Vlc.DotNet全体映像制御方法張架
参考Vlc.DotNet
公式たとえば、VLC様々なDLLが出力ディレクトリにコピーされ、その後、パッケージNuget Vlc.DotNet.Core.Interops、Vlc.DotNet.Core、手続きの種類に応じてVlc.DotNetの選択をインストールVLC最初のダウンロード、。フォームまたはVlc.DotNet.Wpf。多くのオンラインチュートリアルの具体的な例があります。私はあなたにも環境に設定されたこの質問に検索すると確信しています。
実装コード
ここでは、WPF、直接的な影響を持つ私のプログラムです。
XAMLコードルックス
サンプルコードや公式と実質的に同じ
<Window x:Class="VLCTest.DemoWin"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:wpf="clr-namespace:Vlc.DotNet.Wpf;assembly=Vlc.DotNet.Wpf"
xmlns:local="clr-namespace:VLCTest"
mc:Ignorable="d"
Title="DemoWin" Height="450" Width="800">
<Grid>
<ContentControl Width="400" Height="400" Name="Container">
<wpf:VlcControl x:Name="VlcControl" />
</ContentControl>
<Button Content="Stop" HorizontalAlignment="Left" Margin="664,360,0,0" VerticalAlignment="Top" Width="75" Click="StopPlay"/>
</Grid>
</Window>
次のようにプレイコードがあります
private void Play()
{
string path = @"D:\TestFiles\TestVideo.mp4";
string currentDirectory = Directory.GetCurrentDirectory();
DirectoryInfo vlcDirectory = new DirectoryInfo(System.IO.Path.Combine(currentDirectory, "VLC"));
VlcControl.SourceProvider.CreatePlayer(vlcDirectory);
FileInfo playFile = new FileInfo(path);
// 这里把帧图像拉伸成填满整个控件
var viewBox = VlcControl.Content as Viewbox;
viewBox.Stretch = System.Windows.Media.Stretch.Fill;
VlcControl.SourceProvider.MediaPlayer.Play(playFile);
}
ここでは、限り、コントロールを埋めるためにストレッチViewBoxを塗りつぶし内部への制御モードとして、それを見ることができます。
アイデアの実現
兄のおかげで、ここで最初の記事は、私のためのガイドラインを提供します。
参考ます。https://my.oschina.net/duoing/blog/1499664
ビデオ画像の効果を達成するためには、全体の制御を埋め、実際には、映像のアスペクト比を変更するには、それをエクスポートすることです。:2つのアイデアがある
一定規模やレンダリングのアスペクト比の画面上で、適切なタイミングでレンダリングされた1つのビデオストリームが。この必要性は、パラメータまたはコールVLCにおけるメソッド呼び出しのアスペクト比を変更することによって達成されます。
2.各フレームをレンダリングし得る、インターフェースに提示する前に、映像が画面にアスペクト比と、出力を調整するようにスケーリングされます。このプログラムは、各フレームのための私たち自身の書かれた手順は、一度、その後、出力を再処理することにより、達成するためのインタフェースプログラムに依存しています。
上記のコードは、第2のプログラムを使用します。
スキームの比較
最初のシナリオは、2番目のオプションを保存するよりも大幅にパフォーマンスで、ソースはよりよいレンダリングするフレームに入れて。第2のオプションは、以上のストレッチ操作画面が、それは、VLCの内部実装機構の深い理解を必要としません。全体的に、実際には、に属しマルチゾーン再生高精細ビデオや再生時間遭遇した第二の選択肢トリッキーなプログラムはまだカトンを有することができます。
録音は、ピットを強化しました
自分自身の描画フレームを開始することを決めた、VlcControl Vlc.dotnet.Wpfは、この制御を実現する方法であるソースコードを見てみましょう私の最初に考えたのは、結果は少しコードは、わずか数十行を発見された見えます。ラインの数十、まだ非常に硬いコア、フレームのレンダリングと完全に分離のプレゼンテーション、内部のスロー映像イメージを取得するためにのみ責任があるコントロールで、その後、バインドレンダリング源、Aの各変更がありますが画面を変更します。
ソースコードの一部
/// <summary>
/// The constructor
/// </summary>
public VlcControl()
{
sourceProvider = new VlcVideoSourceProvider(this.Dispatcher);
this.viewBox = new Viewbox
{
Child = this.videoContent,
Stretch = Stretch.Uniform
};
this.Content = this.viewBox;
this.Background = Brushes.Black;
// Binds the VideoSource to the Image.Source property
this.videoContent.SetBinding(Image.SourceProperty, new Binding(nameof(VlcVideoSourceProvider.VideoSource)) { Source = sourceProvider });
}
ちょうどここVlcControlは、コンテンツだけで結果を達成することができるようにするために塗りつぶしモードにViewBoxを、ViewBoxをストレッチされたユーザーコントロールのコントロールから継承されました。
最後に、私たちは遠く見る巨人の肩の上に立って、良いデザインとオープンソースの精神のVlc.dotnetに感謝します。
Vlc.dotnet出典ます。https://github.com/ZeBobo5/Vlc.DotNet/tree/develop/srcは、
この記事はあなたを助けるために機会を持っている場合は、あなたの賞賛を意味しないでください。