DirectShow アプリケーション プログラミングの概要
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
この記事では、DirectShow で使用される基本的な用語と概念について説明します。 このセクションを読むと、最初の DirectShow アプリケーションを作成する準備が整います。
フィルターとフィルター グラフ
DirectShow の構成要素は、 フィルターと呼ばれるソフトウェア コンポーネントです。 フィルターは、マルチメディア ストリームに対して何らかの操作を実行するソフトウェア コンポーネントです。 たとえば、DirectShow フィルターは次の操作を実行できます。
- ファイルの読み取り
- ビデオ キャプチャ デバイスからビデオを取得する
- MPEG-1 ビデオなど、さまざまなストリーム形式をデコードする
- グラフィックスまたはサウンド カードにデータを渡す
フィルターは入力を受け取り、出力を生成します。 たとえば、フィルターが MPEG-1 ビデオをデコードする場合、入力は MPEG でエンコードされたストリームであり、出力は一連の圧縮されていないビデオ フレームです。
DirectShow では、あるフィルターからの出力が別のフィルターの入力になるように、アプリケーションはフィルターのチェーンを接続することによって任意のタスクを実行します。 接続されたフィルターのセットは、 フィルター グラフと呼ばれます。 たとえば、次の図は、AVI ファイルを再生するためのフィルター グラフを示しています。
ファイル ソース フィルターは、ハード ディスクから AVI ファイルを読み取ります。 AVI スプリッター フィルターは、圧縮されたビデオ ストリームとオーディオ ストリームの 2 つのストリームにファイルを解析します。 AVI 圧縮解除フィルターは、ビデオ フレームをデコードします。 ビデオ レンダラー フィルターは、DirectDraw または GDI を使用して、フレームをディスプレイに描画します。 既定の DirectSound デバイス フィルターは、DirectSound を使用してオーディオ ストリームを再生します。
アプリケーションは、このすべてのデータ フローを管理する必要はありません。 代わりに、フィルターは、フィルター グラフ マネージャーと呼ばれる高レベルのコンポーネントによって制御されます。 アプリケーションは、"Run" (グラフ内でデータを移動するため) や "Stop" (データフローを停止する) などの高レベルの API 呼び出しを行います。 ストリーム操作をより詳細に制御する必要がある場合は、COM インターフェイスを介してフィルターに直接アクセスできます。 Filter Graph Manager では、イベント通知もアプリケーションに渡されます。
フィルター グラフ マネージャーは、別の目的にも役立ちます。フィルターを接続することで、アプリケーションがフィルター グラフを構築するためのメソッドを提供します。 (DirectShow には、このプロセスを簡略化するさまざまなヘルパー オブジェクトも用意されています。これらはドキュメントで十分に説明されています。
DirectShow アプリケーションの作成
大まかに言えば、DirectShow アプリケーションで実行する必要があるタスクは 3 つあります。 これらの図を次の図に示します。
- アプリケーションは、Filter Graph Manager のインスタンスを作成します。
- アプリケーションでは、フィルター グラフ マネージャーを使用してフィルター グラフを作成します。 グラフ内のフィルターの正確なセットは、アプリケーションによって異なります。
- アプリケーションでは、フィルター グラフ マネージャーを使用してフィルター グラフを制御し、フィルターを使用してデータをストリーミングします。 このプロセス全体を通じて、アプリケーションは Filter Graph Manager からのイベントにも応答します。
処理が完了すると、アプリケーションは Filter Graph Manager とすべてのフィルターを解放します。
DirectShow は COM に基づいています。フィルター グラフ マネージャーとフィルターはすべて COM オブジェクトです。 DirectShow のプログラミングを開始する前に、COM クライアント プログラミングに関する一般的な理解が必要です。 COM プログラミングに関する多くの書籍を入手できます。
DirectShow の使用を開始するには、ビデオ ファイル を再生する簡単なコンソール アプリケーションを示す「ファイルの再生方法」の記事を参照してください。 「 DirectShow について 」セクションでは DirectShow アーキテクチャについて詳しく説明しますが、「 DirectShow を使用 する」では、キャプチャ、ビデオ編集、DVD 再生、テレビなど、DirectShow でサポートされる主要なシナリオについて説明します。