アプリケーションでのマルチメディア ストリームの使用
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
注意
これらの API は非推奨です。 アプリケーションでは 、サンプル グラバー フィルターを使用するか、カスタム フィルターを実装して DirectShow フィルター グラフからデータを取得する必要があります。
マルチメディア ストリーミング インターフェイスは、ハードウェアまたはソフトウェア ソースの特定の特性への依存関係を削除し、すべての Microsoft DirectX® メディア形式のサポートを提供することで、マルチメディア データを操作するプロセスを大幅に簡素化します。 ストリームは、データを非常に高いレベルに抽象化します。アプリケーションは、データの形式について何も知らなくても、あるストリームから別のストリームにデータを移動することもできます。
マルチメディア ストリームを作成するには、次の手順を実行します。
- マルチメディア ストリームを作成します。 ストリームの作成と初期化の方法は、アーキテクチャ固有です。 DirectShow では、ストリームの初期化に使用される IAMMultiMediaStream インターフェイスがサポートされています。 IMultiMediaStream の他のインプロセス サーバー実装は、さまざまなメカニズムを使用して作成および初期化されます。
- マルチメディア ストリーム オブジェクトが初期化されると、アプリケーションは QueryInterface を 使用してオブジェクトの IMultiMediaStream インターフェイスを取得します。 ストリームのプロパティを特定し、ストリーム自体を列挙するには、このインターフェイスを使用します。 特定の目的 ID を持つ IMultiMediaStream::GetMediaStream メソッドを呼び出すことで、特定のストリームを取得できます。 プライマリ ビデオストリームとオーディオ ストリームを表すMSPID_PrimaryVideoとMSPID_PrimaryAudioは、最も一般的に使用される目的 ID です。
- ストリームのメディアの種類に固有のインターフェイスについては、 IUnknown::QueryInterface を呼び出します。 たとえば、ビデオ ストリームをレンダリングする場合は、 その IDirectDrawMediaStream インターフェイスを取得します。 メディア固有のインターフェイスは、形式の機能を最大限に活用するために必要な追加のメソッドを定義します。
- ストリーム データから 1 つ以上のサンプルを作成します。 すべてのメディア ストリームでは、サンプル作成用の IMediaStream::CreateSharedSample メソッドがサポートされています。 結果のサンプルでは、サンプルとその特性を制御できる IStreamSample インターフェイスがサポートされます。 通常、メディア ストリームでは、前述の IStreamSample メソッドよりも強力な形式固有のサンプル作成メソッドがサポートされています。 たとえば、IDirectDrawMediaStream では、目的の DirectDraw サーフェスとクリッピング四角形にアタッチされたサンプルを作成できます。 ただし、状況によっては、データ形式を知らずにデータを処理する必要があります。 形式に関係なくデータをストリーミングする場合は、 IMediaStream::CreateSharedSample メソッドを使用してデータ サンプルを作成します。
- 必要なすべてのストリーム サンプルを作成したら、 IMultiMediaStream::SetState メソッドを呼び出してストリームを開始し、パラメーターとして STREAMSTATE_RUN フラグを渡します。
- IStreamSample::Update を呼び出してストリーム サンプルを更新します。 IStreamSample::Update メソッドが終了すると、サンプルのデータにアクセスできます。 更新プログラムが返されたときに特定のイベントまたは関数呼び出しをトリガーする場合は、適切なポインターを IStreamSample::Update メソッドに渡します。
マルチメディア ストリーミング インターフェイスの詳細については、「 マルチメディア ストリーミング」を参照してください。