2012-01-19 6 views
4

私はMedia Foundationを使用しているメディアプレーヤーで作業しています。私はVOBファイルの再生をサポートしたい。ただし、メディア基盤は現在VOBコンテナをサポートしていません。したがって、私はDirectShowを同じものに使用したいと思います。再生せずにDirectShowから生のビデオフレームを取得することはできますか?

私の考えでは、DirectsShowグラフを使用して代替パスを取るのではなく、ビデオフレームを取得してメディア基盤の同じパイプラインに渡すだけです。メディア基盤では、単にビデオファイルからフレームを読み込む 'IMFSourceReader'があります。私はグラフを作成したり、再生サイクルを開始したり、レンダリング・ピンからフレームを抽出したりせずにフレームを与えるだけのダイレクト・ショーがありますか? (より明確にするために、DirectsShowは実際にビデオを再生することなく生のフレームを与えるアーキテクチャをサポートしていますか?)

私はISampleGrabberについて読んだことがありますが、私のアーキテクチャに合わないと思います。以前はDirectShowで作業していませんでした。

おかげで、あなたはグラフを構築し、コンテナを読み、その出力に個々のフレームをお届けしますそれぞれのパーサ/デマルチプレクサフィルタからのフレームを受け入れなければならない MOTS

答えて

6

再生はリアルタイムである必要はなく、これらのビデオフレームをどこかに偽装する必要もありません。 Sample Grabberフィルタまたは顧客フィルタで必要なデータを取得したら、Null Rendererでパイプラインを終了できます。つまり、必要なフレームを手軽に取り揃えることができます。

+0

私はこれを達成する方法について完全には分かっていませんが、手がかりをありがとう。私が見たDirectShowの例から、グラフ、トポロジ、そしてすべてを構築し、マネージャ上で「Run」を呼び出します。「Run」メソッドは、ビデオの再生サイクルを開始します。私のトポロジでは、ヌルレンダラーを置き、 'Run'を呼び出し、サンプルグラバーフィルターが断続的に各フレームのフレームを受け取るのですか?それは、ビデオファイルでDirectShowを初期化する何かを提供するかどうか、必要なデコーダをロードして、私は繰り返し「Read」を呼び出してビデオサンプルフレームを得ることができます。 –

+4

DirectShow(MFではなく)では、グラフはフィルタ間の通信を管理しません。グラフ/パイプラインとヒットスタートを作成するとすぐに、フィルタは単独でデータをストリームします。つまり、フレームをキャプチャするには、VOBコンテナリーダー(またはフレームがデコードされている必要がある場合はビデオデコーダ)の横のパイプラインに独自のフィルタが必要です。そうでない場合は、stadnardサンプルグラバフィルタの設定を使用して、その「SampleCB」メソッド。次に、グラフを実行するとすぐに、このコールバックですべてのビデオフレームを1つずつ取得します。 –

+3

私が言ったように、ビデオデコーダの前後に "グラブポイント"を含めるかどうかに応じて、生のビデオフレームとデコードされたビデオフレームの両方を取得できます。前後に2つのグラバーを配置することもでき、生のビデオフレームとデコードされたビデオフレームの両方に対してコールバックを行います。 –

0

Monogram frame grabber filterを使用すると、VOB DSフィルタの出力を接続することができます。うまくいきます。アウトプットを外部アプリケーションに接続する方法については、そのコメントを参照してください。

関連する問題