マルチストリームビデオプレーヤーを構築しています。現在、ファイルを閉じようとして問題が発生しています。事実上、一度に 1 ~ 4 個のビデオ ファイルを再生できます。4 つのファイルを再生しているときに、次のシーケンスには 1 つしかありません。ソース ファイル フィルタを削除した後、ビデオ パネルを正しく再描画できないようです。
すべてのフィルター/レンダラーなどを接続するなど、グラフを手動で作成および管理していると言わなければなりません (速度を上げるため)。時間 (高速再生 (タイムコーディングによる追いつき) や、レンダリング グラフとファイル グラフの両方でメディア コントロールを同時に実行/一時停止/停止/ステップ実行する必要がある (再生に失敗する場合がある) などの問題)。メモリから、レンダー グラフを正しく構成する必要があり、私のシナリオは提供されたサンプルと正確に一致しませんでした (スムーズに再生する必要がありますが、ファイルごとに個別の時間コーディングが必要でした - 1 つの大きなファイルにマージされていません)。
アプリケーションの存続期間中、IFilterGraph2/VMR/DirectSound オブジェクトを再利用します。変更されるのは、SourceFilter と必要なデコーダー/デマルチプレクサだけです。
したがって、プロセスは次のとおりです。
- グラフを作成
- レンダラーを追加
- ファイルの再生を試みます - ファイルの種類に応じて、ソース フィルターと demux/decoders などを追加します (古いフィルターを削除します)。
- フィルターを一緒に接続します (手動でピンを接続します)。
- シーク/プレイなど
- 完了したら、Graph.RemoveFilter() を呼び出して現在のソース ファイルをアンロードしますが、レンダラーをグラフに残し、すべてのピンを切断します。
次のエラーが発生しました。
- ファイルを閉じる (および VMR.RepaintVideo() を呼び出す) ときの COM+ 例外
編集:エラーはこれです:
この操作には COM+ が必要ですが、インストールされていません (HRESULT からの例外: 0x8004020C)
レンダラーをグラフに追加するときに、VMR.SetVideoClippingWindow() を 1 回呼び出します。
フィルターグラフを破棄せずにファイルをアンロードし、ビデオ ウィンドウを再描画/クリアする方法はありますか? さらに言えば、グラフにソース ファイル フィルタがない場合にビデオを再描画する方法はありますか?