[C#]WPF MediaKit


■WPF MediaKitについて
WPFでビデオを扱うには標準でMedieElmentを使用しますがサポートされる形式が限定されており再生したビデオを再生できないことがあります。
そこでDirectShowを使用して再生することになります。
DirectShowは.Net Frameworkで使用するためのライブラリ DirectShow.NET があります。
このライブラリはWin32上で動作するためWPF上のUIElementと親和性がよろしくありません。
WPF MediaKitはDirectShow.NETの表示をD3DImageで行うことによりUIElementと親和性を高め通常のUIElementとして使用できるようにしています。
https://wpfmediakit.codeplex.com/
ライセンスは「New BSD License (BSD)」でありライブラリを使用したアプリケーションのソースコードを非公開ですみとても使用しやすくなっています。
この記事は、シンプルなビデオ再生アプリケーションの例を記載しています。

■ビデオ再生処理の実装
1.ソースコードをオフィシャルサイトからダウンロードします。
Mediakit_001.jpg

2.ソリューション状の右クリックメニュー[追加]-[既存プロジェクト]でWpfMediakitのプロジェクトを追加します。
Mediakit_002.jpg

3.WPFMediakitのプロパティを開き対象フレームワークを作成するアプリケーションい合わせます。
 ※この例では.Net Framework4にしています。
Mediakit_003.jpg

4.作成するアプリケーションにWPFMediakitとDirectShow.NETの参照を追加します。
 DirectShow.NETはWPFMediakitソースコード内の「WPFMediaKit\Assemblies」にあります。
Mediakit_004.jpg

5.作成するアプリケーションのプロパティを開き「ビルドタブ」を開きます。
 ターゲットプラットフォームをx86にします。
 DirectShow関連のモジュールの多くは32bitで提供されておりx64やAny CPUで実行すると期待通り再生が行われません。
Mediakit_005.jpg

7.MainWindows.XAMLを開き以下の様に編集しWPFMediaKitのUIElementへの参照を記載します。

<Window x:Class="TestWPFMediakits.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Control="clr-namespace:WPFMediaKit.DirectShow.Controls;assembly=WPFMediaKit" <-- 追加する
Title="MainWindow" Height="350" Width="525">

8.WPFMediakitのUIElementをWindow状に追加します。
 以下の例ではビデオレンダラ(表示オブジェクト)にVideoMixingRenderer9を設定しています。
<Grid>
<Control:MediaUriElement Name="player" VideoRenderer="VideoMixingRenderer9"/>
</Grid>

9.Loadedイベントを追加しファイル再生処理を記載します。
//MediaUriElementの初期化開始処理を行う
player.BeginInit();
//ファイルを指定する
player.Source = new Uri(@"C:\tmp\test.mp4");
//DirectShowグラフの構築を行う
player.EndInit();

※c:\tmp\test.mp4を作成しておく必要あります。
10.構成マネージャーで出力形式をx86にします。
Mediakit_006.jpg

11.ビルドし実行するとc:\tmp\test.mp4が再生されます。
■サンプルのダウンロード
TestWPFMediakits.zip

0 件のコメント :

コメントを投稿