トランスポート

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

フィルター グラフを介してメディア データを移動するには、DirectShow フィルターで使用可能なプロトコルの 1 つをサポートする必要があります。 これらのプロトコルはトランスポートと呼ばれます。 2 つのフィルターが接続する場合は、同じトランスポートをサポートする必要があります。それ以外の場合は、メディア データを交換できません。 通常、トランスポートでは、いずれかのピンが特定のインターフェイスをサポートしている必要があります。 フィルターが接続されると、1 つのピンがインターフェイスに対してもう一方のピンに対してクエリを実行します。

ほとんどの DirectShow フィルターは、メインメモリ内のメディア データを保持し、ピン接続全体で他のフィルターに配信します。 この種類のトランスポートは、ローカル メモリ トランスポートと呼ばれます。 ローカル メモリ トランスポートは DirectShow で最も一般的なトランスポートですが、すべてのフィルターで使用されるわけではありません。 たとえば、一部のフィルターはハードウェア パスに沿ってメディア データを送信し、ピンのみを使用して制御情報を配信します。 たとえば、 IOverlay インターフェイスを参照してください。

DirectShow では、ローカル メモリ トランスポートの 2 つのメカニズム (プッシュ モデルとプル モデル) が定義されています。 プッシュ モデルでは、ソース フィルターによってデータが生成され、ダウンストリームの次のフィルターに配信されます。 このフィルターは、データを受動的に受信し、処理し、さらに下流に送信します。 プル モデルでは、ソース フィルターはパーサー フィルターに接続されます。 パーサー フィルターは、ソース フィルターからデータを要求します。 ソース フィルターは、データを配信することで要求に応答します。 プッシュ モデルでは IMemInputPin インターフェイスが使用され、プル モデルでは IAsyncReader インターフェイスが使用されます。

プッシュ モデルは、プル モデルよりも一般的です。 そのため、以下の記事ではプッシュ モデルを想定しています。 このセクションの最後の記事である Pull Model では、 IAsyncReader インターフェイスと IMemInputPin の違いについて説明します。

フィルター グラフのData Flow