2

C# と DirectShow.net を使用して簡単なビデオ エディターを開発しました。今のところ、DirectShow Editing Services を使用して構築された DirectShow フィルター グラフがあります。私のアプリケーションは、グラフを制御し、必要に応じてプレビュー ウィンドウで再生を実行、一時停止、および停止します。編集セッションでは、メディアを追加、削除、または変更するユーザーの要求に従って、グラフが変更されます。

現在、WindowsFormsHost にラップされた PictureBox を使用して、編集したビデオをプレビューしています。しかし、代わりに Jeremiah Morril の WPF MediaKit を使用してみたいと思っています。(http://wpfmediakit.codeplex.com)

最初の考え (私のブルート フォース アプローチ) は、グラフから IGraphBuilder と IPin を WPF MediaKit の MediaUriPlayer.cs の OpenSource() 関数に渡すことでした。元の OpenSource() で行われた新しいグラフ。これはうまくいかず、さまざまな組み合わせを試した後、あきらめましたが、ほとんどの場合、「COM オブジェクトが基になる RCW から分離されました」というエラーが発生しました。

最初の失敗の後、検索したところ、Morrill の同様の VideoRendererElement がhttp://videorendererelement.codeplex.comにありました。サンプル グラバーを DirectShow グラフに追加し、それを使用してサンプルを VideoRendererElement に送信するのはそれほど難しくないようです。これは、VideoRendererElement に含まれている Web カメラの例とまったく同じです。

最後に、グラフのサンプル グラバーからのサンプルを MediaUriElement、DvdPlayerElement、または別のコントロールに渡すことによって、同じ方法で WPF MediaKit の新しいコントロールを使用できないかどうか疑問に思っています。 WPF MediaKit コレクション。基本的に私の質問は次のとおりです。WPF MediaKit または VideoRenderingElement を使用してこのサンプル グラバー シナリオを実装することを推奨できる人はいますか? または、誰かが、DES で作成したフィルター グラフを WPF コントロールにレンダリングするためのさらに良い方法を提案できます...

4

1 に答える 1

4

これをメモリから実行します。

カスタム DirectShow グラフがあるように聞こえるので。私はいくつかのことのためにWPF MediaKitを直します:

D3DRenderer 基本クラスを使用します。これにより、D3DImage を使用して D3D コンテンツを簡単にレンダリングできるようになります。VMR9 アロケータと D3D9 相互運用機能を取り上げます。

VideoMixingRenderer9 を使用していると仮定します...したがって、コードで VMR9 を作成するときに、カスタム アロケーターを設定できる VMR9 インターフェイスを取得します (baseclass.cs の CreateRenderer メソッドに例があります)。MediaKit からジャックしたカスタム アロケーターをインスタンス化し、インターフェイスに渡します。そのアロケーターには、新しい d3d サーフェスを取得したとき、および新しいフレームを表示する準備ができたときに発生するイベントがあります。D3DRenderer クラスがこれらのイベント (新しいサーフェス、新しいフレーム) を取得していることを確認してください。90% のコピー アンド ペースト操作である必要があります :)

于 2011-10-06T22:56:14.037 に答える