次の方法で共有


DirectShow アプリケーション プログラミングの概要

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

この記事では、DirectShow で使用される基本的な用語と概念について説明します。 このセクションを読むと、最初の DirectShow アプリケーションを作成する準備が整います。

フィルターとフィルター グラフ

DirectShow の構成要素は、 フィルターと呼ばれるソフトウェア コンポーネントです。 フィルターは、マルチメディア ストリームに対して何らかの操作を実行するソフトウェア コンポーネントです。 たとえば、DirectShow フィルターは次の操作を実行できます。

  • ファイルの読み取り
  • ビデオ キャプチャ デバイスからビデオを取得する
  • MPEG-1 ビデオなど、さまざまなストリーム形式をデコードする
  • グラフィックスまたはサウンド カードにデータを渡す

フィルターは入力を受け取り、出力を生成します。 たとえば、フィルターが MPEG-1 ビデオをデコードする場合、入力は MPEG でエンコードされたストリームであり、出力は一連の圧縮されていないビデオ フレームです。

DirectShow では、あるフィルターからの出力が別のフィルターの入力になるように、アプリケーションはフィルターのチェーンを接続することによって任意のタスクを実行します。 接続されたフィルターのセットは、 フィルター グラフと呼ばれます。 たとえば、次の図は、AVI ファイルを再生するためのフィルター グラフを示しています。

フィルター グラフで avi ファイルを再生する

ファイル ソース フィルターは、ハード ディスクから AVI ファイルを読み取ります。 AVI スプリッター フィルターは、圧縮されたビデオ ストリームとオーディオ ストリームの 2 つのストリームにファイルを解析します。 AVI 圧縮解除フィルターは、ビデオ フレームをデコードします。 ビデオ レンダラー フィルターは、DirectDraw または GDI を使用して、フレームをディスプレイに描画します。 既定の DirectSound デバイス フィルターは、DirectSound を使用してオーディオ ストリームを再生します。

アプリケーションは、このすべてのデータ フローを管理する必要はありません。 代わりに、フィルターは、フィルター グラフ マネージャーと呼ばれる高レベルのコンポーネントによって制御されます。 アプリケーションは、"Run" (グラフ内でデータを移動するため) や "Stop" (データフローを停止する) などの高レベルの API 呼び出しを行います。 ストリーム操作をより詳細に制御する必要がある場合は、COM インターフェイスを介してフィルターに直接アクセスできます。 Filter Graph Manager では、イベント通知もアプリケーションに渡されます。

フィルター グラフ マネージャーは、別の目的にも役立ちます。フィルターを接続することで、アプリケーションがフィルター グラフを構築するためのメソッドを提供します。 (DirectShow には、このプロセスを簡略化するさまざまなヘルパー オブジェクトも用意されています。これらはドキュメントで十分に説明されています。

DirectShow アプリケーションの作成

大まかに言えば、DirectShow アプリケーションで実行する必要があるタスクは 3 つあります。 これらの図を次の図に示します。

一般的な directshow アプリケーション

  1. アプリケーションは、Filter Graph Manager のインスタンスを作成します。
  2. アプリケーションでは、フィルター グラフ マネージャーを使用してフィルター グラフを作成します。 グラフ内のフィルターの正確なセットは、アプリケーションによって異なります。
  3. アプリケーションでは、フィルター グラフ マネージャーを使用してフィルター グラフを制御し、フィルターを使用してデータをストリーミングします。 このプロセス全体を通じて、アプリケーションは Filter Graph Manager からのイベントにも応答します。

処理が完了すると、アプリケーションは Filter Graph Manager とすべてのフィルターを解放します。

DirectShow は COM に基づいています。フィルター グラフ マネージャーとフィルターはすべて COM オブジェクトです。 DirectShow のプログラミングを開始する前に、COM クライアント プログラミングに関する一般的な理解が必要です。 COM プログラミングに関する多くの書籍を入手できます。

DirectShow の使用を開始するには、ビデオ ファイル を再生する簡単なコンソール アプリケーションを示す「ファイルの再生方法」の記事を参照してください。 「 DirectShow について 」セクションでは DirectShow アーキテクチャについて詳しく説明しますが、「 DirectShow を使用 する」では、キャプチャ、ビデオ編集、DVD 再生、テレビなど、DirectShow でサポートされる主要なシナリオについて説明します。