次の方法で共有


DirectShow フィルターについて

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

DirectShow はモジュール型アーキテクチャを使用します。このアーキテクチャでは、処理の各ステージは、フィルターと呼ばれる COM オブジェクトによって実行されます。 DirectShow には、アプリケーションで使用する標準フィルターのセットが用意されており、開発者は DirectShow の機能を拡張する独自のカスタム フィルターを記述できます。 説明するために、AVI ビデオ ファイルを再生するために必要な手順と、各ステップを実行するフィルターを次に示します。

  • ファイルから生データをバイト ストリームとして読み取ります (ファイル ソース フィルター)。
  • AVI ヘッダーを調べ、バイト ストリームを個別のビデオ フレームとオーディオ サンプル (AVI スプリッター フィルター) に解析します。
  • ビデオ フレームをデコードします (圧縮形式に応じてさまざまなデコーダー フィルター)。
  • ビデオ フレームを描画します (ビデオ レンダラー フィルター)。
  • オーディオ サンプルをサウンド カードに送信します (既定の DirectSound デバイス フィルター)。

これらのフィルターを次の図に示します。

圧縮されたビデオでaviファイルを再生するためのフィルタグラフ

図に示すように、各フィルターは 1 つ以上の他のフィルターに接続されています。 接続ポイントは、 ピンと呼ばれる COM オブジェクトでもあります。 フィルターはピンを使用して、次のフィルターからデータを移動します。 図の矢印は、データが移動する方向を示しています。 DirectShow では、フィルターのセットは フィルター グラフと呼ばれます。

フィルターには、実行中、停止、一時停止の 3 つの状態があります。 フィルターを実行すると、メディア データが処理されます。 停止すると、データの処理が停止します。 一時停止状態は、実行前にデータをキューに入えるために使用されます。フィルター グラフData Flowセクションでは、この概念について詳しく説明します。 非常にまれな例外では、状態の変更はフィルター グラフ全体で調整されます。グラフスイッチ内のすべてのフィルタは、一致して状態を切り替えます。 したがって、フィルター グラフ全体も実行中、停止、または一時停止と言われます。

フィルターは、いくつかの広範なカテゴリにグループ化できます。

  • ソース フィルターでは、グラフにデータが導入されます。 データは、ファイル、ネットワーク、カメラ、またはその他の場所から取得される場合があります。 各ソース フィルターは、異なる種類のデータ ソースを処理します。
  • 変換フィルターは、入力ストリームを受け取り、データを処理し、出力ストリームを作成します。 エンコーダーとデコーダーは、変換フィルターの例です。
  • レンダラー フィルターは、チェーンの末尾に配置されます。 データを受け取り、ユーザーに提示します。 たとえば、ビデオ レンダラーは、ディスプレイにビデオ フレームを描画します。オーディオ レンダラーは音声データをサウンド カードに送信し、ファイル ライター フィルターはファイルにデータを書き込みます。
  • スプリッター フィルターは、入力ストリームを 2 つ以上の出力に分割し、通常は途中で入力ストリームを解析します。 たとえば、AVI スプリッターはバイト ストリームを個別のビデオ ストリームとオーディオ ストリームに解析します。
  • 多重化フィルターは複数の入力を受け取り、それらを 1 つのストリームに結合します。 たとえば、AVI Mux は AVI スプリッターの逆演算を実行します。 オーディオおよびビデオ ストリームを受け取り、AVI 形式のバイト ストリームを生成します。

これらのカテゴリの違いは絶対ではありません。 たとえば、ASF リーダー フィルターは、ソース フィルターとスプリッター フィルターの両方として機能します。

すべての DirectShow フィルターは IBaseFilter インターフェイスを公開し、すべてのピンは IPin インターフェイスを公開します。 DirectShow では、より具体的な機能をサポートする他の多くのインターフェイスも定義されています。

フィルター グラフ マネージャーについて

フィルター グラフのData Flow

DirectShow フィルター