6

私は、c#のdirectshowlibを使用して、複数のストリームを持つ単一のビデオウィンドウを使用して、最大8つのビデオを同期して再生することに成功しました。問題は、ビデオウィンドウが単一の画面でしか再生されないことです。多くの画面にまたがって表示しようとすると、機能しません。アプリウィンドウは正しく表示されますが、ビデオは1つの画面でしか再生されません。何か案は?

よろしくお願いします。

4

1 に答える 1

11

複数の入力ピンを持つ VMR を使用していると仮定します。VMR は、単一のディスプレイ上にある必要がある単一のサーフェスにレンダリングされます。最大化されたウィンドウ内の個別のディスプレイに各 VMR を配置して、ストリームを複数の VMR にレンダリングできる必要があります。

1 つのグラフにすべてのストリームがあるように聞こえます。それらを異なるグラフに分けて、各グラフに 1 つのソースと 1 つのレンダラーを持たせることができます。同期してグラフを開始するということは、IMediaControl::Run の代わりに IMediaFilter::Run を使用することを意味します。

  • 1 つのグラフをマスターとして選択します。
  • マスターにクロックがあることを確認します。これは通常、アクティブになるときに行われますが、グラフで SetDefaultSyncSource を呼び出すことで、強制的に早期に行うことができます。
  • IMediaFilter のグラフをクエリし、GetSyncSource を使用してマスター グラフからクロックを取得し、SetSyncSource を使用して他のグラフに渡します。
  • すべてのグラフを一時停止します。
  • GetState が S_OK を返すまで待ち​​ます (一時停止が完了します)。
  • グラフから時間を取得し、10ms 程度追加します。
  • すべてのグラフで IMediaFilter::Run を呼び出し、この時間 (現在は + 10ms) をパラメーターとして渡します。
于 2009-08-19T15:39:59.033 に答える