私は、ビデオキャプチャデバイスと見なすことができるように、CLSID_VideoInputDeviceCategoryとして登録されているDirectShowソースフィルタを作成しています(たとえば、Skypeから別のWebCam)。 私のソースフィルタはhereのVCamの例に基づいていますが、今のところFillBuffer()メソッドで実装されているこのサンプル(正確には1つのビデオ出力ピンがあり、オーディオはありません)唯一の出力ピンです。DirectShow - ソースフィルタからファイルを読み取る方法
実際のシナリオは少し難解です - フィルタはCreateFile()API呼び出しを使用して開かれたハードウェアデバイスへのファイルハンドルを使用します(デバイスを開くことは自分のコントロールではなく、3Partyとしょうかん)。次に、このハンドルからデータのチャンクを読み取る必要があります(通常、256〜512バイトのチャンクサイズ)。 デバイスはWinUSBデバイスであり、3Partyフレームワークはちょうどチャンクを読み取るために開かれたファイルハンドルを "与え"ます。 フィルタによって読み取られるデータは、デバイスから「ハンドル」にストリーミングされる* .mp4ファイルです。
このシナリオは、ディスク上の* .mp4ファイル( "チャンク")から読み込み、そのデータをDirectShowグラフにプッシュするが、最初から最後までファイルを完全に読み取ることができないソースフィルタと同等です、ファイルサイズは不明です(正しい?)。
私はDirectShowには新しく、基本的な概念がいくつか欠落しているように感じます。誰でも私に次の質問のためにソリューション\リソース\説明を指示できればうれしいでしょう:
1)Web上のさまざまなソースとMicrosoft SDK(v7.1)のサンプルから、正しい&の有効なDirectShowグラフを作成して(ビデオが&オーディオを正常にレンダリングするように)、ソースフィルタピン(CSourceStreamから継承)はメソッド "GetMediaType"を実装する必要があります。この実装された関数の戻り値に応じて、アプリケーションは正しいグラフを作成してデータをレンダリングし、正しい順序でフィルタを構築することができます。これが正しければ - グラフを* .mp4入力をチャンクでレンダリングするようにグラフが構築されるように私はどのように実装しますか(一定のチャンクサイズを想定することができます)
2)私は、FillBuffer()メソッドがSetTime()を呼び出すIMediaSampleオブジェクト(取得して埋めている)に気付いています。私はデバイスから生の* .mp4データを読み込んでいます。私はデータを解析し、ストリームからフレーム&の時間値を抽出する必要がありますか?はいの場合 - 例は素晴らしいでしょう。
3)ファイルハンドル(「チャンク」)から受け取ったデータをVideo & Audioに分割する必要がありますか、ソースフィルタでデータを操作する必要がなくグラフにプッシュすることはできますか?分割が必要な場合 - どのようにして(データは連続ではなく、チャンクに分割されますか)、これが "GetMediaType"の望ましい実装に影響しますか?
誤った用語を使用している場合は、私を修正してください。
ありがとう:-)