次の方法で共有


IAMPushSource インターフェイス

IAMPushSource インターフェイスは、ライブ ソースをレンダリングするフィルタ グラフの同期をとるメソッドを備えている。ライブ ソースとは、キャプチャ デバイスやネットワーク ブロードキャストのように、リアルタイムでデータをストリーミングするものである。このインターフェイスは、IAMLatency インターフェイスを継承している。

ライブ データをストリームするソース フィルタは、その出力ピンにおいてこのインターフェイスを公開する必要がある。

一般に、アプリケーションはこのインターフェイスのメソッドを呼び出してはならない。代わりに、IAMGraphStreams インターフェイスを使う。フィルタ グラフ マネージャは、このインターフェイスのメソッドを使って、ライブ ソースをレンダリングするときに共通して発生する 2 つの問題を解決する。

  • 遅延時間 : フィルタ グラフに複数のライブ ソースが含まれる場合は、しばしばその遅延時間がそれぞれ異なるために、同期がとれないことがある。たとえば、オーディオ キャプチャの遅延時間がビデオ キャプチャの遅延時間よりも長い場合は、グラフがその相違を補正しない限り、音声が映像よりも遅れてしまう。
  • レート マッチング : レンダリング フィルタがライブ ソースに接続している場合は、そのデータ消費レートを調整してソース フィルタの生成レートに一致させる必要がある。この操作を行わないと、データにギャップが生じたり (レンダラの実行速度がソースよりも速い場合)、データが欠落してしまう (ソースの実行速度の方が早い場合)。

遅延時間を補正するためにフィルタ グラフは、IAMPushSource インターフェイスを公開している各出力ピンにおいて IAMLatency::GetLatency を呼び出し、グラフ内の最大の遅延時間を調べる。次に、最大遅延時間よりも遅延時間が短いフィルタにおいて IAMPushSource::SetStreamOffset を呼び出し、各自が生成するタイム スタンプを正しいオフセットで調整する。

フィルタ グラフは、レート マッチングを実行するために、レンダリング フィルタがクロック レートをソース フィルタに一致できるかどうかを調べる必要がある。IAMPushSource::GetPushSourceFlags メソッドによって、レンダラがレートをソースに一致させても問題がないかどうかを示すフラグのセットが返される。

これらの問題は、ファイルへのキャプチャには影響しない。ファイル ライタ フィルタは、受信するサンプル上のタイム スタンプに基づいて、ファイルへの正しい書き込みを実行する。この後、再生するときにストリームの同期が行われる。レート マッチングに関して、データは常に可能な限り高速にファイルに書き込まれる。

IAMGraphStreams インターフェイスは、IAMLatency から継承されるメソッドに加え、以下のメソッドを公開する。

メソッド 説明
GetMaxStreamOffset フィルタがサポートできる最大ストリーム オフセットを取得する。
GetPushSourceFlags フィルタの動作を表すフラグの組み合わせを取得する。
GetStreamOffset タイム スタンプを生成するときにフィルタが使うオフセットを取得する。
SetMaxStreamOffset 最大ストリーム オフセットを指定する基準タイム。
SetPushSourceFlags フィルタの動作を指定するフラグを設定する。
SetStreamOffset このフィルタで生成されるタイム スタンプのオフセットを設定する。