2009-08-19 16 views
6

私は、c#用のdirectshowlibを使用して、複数のストリームで1つのビデオウィンドウを使用して、最大8つのビデオを同期して再生することに成功しました。問題は、ビデオウィンドウが1つの画面でのみ再生されることです。複数の画面にまたがるようにしようとすると動作しません。アプリウィンドウは正しく表示されますが、動画は1つの画面でのみ再生されます。何か案は?DirectShowを使用して複数のモニターで複数の動画を同期再生する方法は?

ありがとうございます。

答えて

11

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

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

  • グラフを1つマスタとして選択します。
  • マスターに時計があることを確認してください。これは通常、アクティブになるときに実行されますが、グラフ上でSetDefaultSyncSourceを呼び出すことで、以前に強制的に発生させることができます。
  • IMediaFilterのグラフを照会し、GetSyncSourceを使用してマスターグラフから時計を取得し、SetSyncSourceを使用して他のグラフに渡します。
  • すべてのグラフを一時停止します。
  • GetStateがS_OKを返すまで待機します(一時停止が完了しました)。
  • グラフから時間を取得し、10ms程度加算します。
  • IMediaFilter ::すべてのグラフで実行し、この時間(現在+ 10ms)をパラメータとして渡します。
+0

ありがとうGeraint。私はそれを試みます。 –

関連する問題