次の方法で共有


オプションのストリーム

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

DMO では、その出力ストリームの一部を省略可能として指定できます。 省略可能なストリームは、アプリケーションが完全または時折サンプルで破棄できるデータを生成します。 たとえば、オプションのストリームには、プライマリ ストリームに関する追加情報が含まれている場合があります。

ストリームが省略可能かどうかを照会するには、IMediaObject::GetOutputStreamInfo メソッドを呼び出し、pdwFlags パラメーターをチェックします。 オプションのストリームは、DMO_OUTPUT_STREAMF_DISCARDABLE フラグまたは DMO_OUTPUT_STREAMF_OPTIONAL フラグを返します。 これらのフラグはほぼ同じことを意味します。それらの間の 1 つの小さな違いについて簡単に説明します。

ストリームが省略可能な場合、クライアントは、出力を処理するときに、そのストリームからデータを破棄するように DMO に指示できます。 これを行うには、 IMediaObject::P rocessOutput メソッドを呼び出し、破棄するストリームごとに出力バッファーを NULL に設定します。 (出力バッファーは、DMO_OUTPUT_DATA_BUFFERpBuffer メンバーで指定されます)。また、dwFlags パラメーターに DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER フラグを設定します。

pBuffer ポインターが NULL であるストリームごとに、DMO はデータの破棄を試みます。 ストリームが省略可能な場合、DMO はデータを破棄することが保証されます。 ストリームが省略可能でない場合、DMO は可能な限りデータを破棄しますが、データを破棄する保証はありません。 データを破棄できない場合は、DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE フラグを設定します。 pBuffer ポインターを NULL に設定しても、DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER フラグを設定しない場合、DMO はデータを破棄しません。 その場合、DMO は出力を内部的にバッファーするか、 単に ProcessOutput 呼び出しに失敗します。

DMO_OUTPUT_STREAMF_OPTIONAL フラグと DMO_OUTPUT_STREAMF_DISCARDABLE フラグの機能的な違いは次のとおりです。

  • DMO_OUTPUT_STREAMF_OPTIONAL フラグは、クライアントがそのストリームにメディアの種類を設定する必要がないことを示します。 ただし、クライアントがストリームのメディアの種類を設定せずにデータの処理を開始する場合は、ストリーミングの間、そのストリームからデータを破棄する必要があります。 サンプルを選択的に破棄する場合は、メディアの種類を設定する必要があります。
  • DMO_OUTPUT_STREAMF_DISCARDABLE フラグは、ストリームは省略可能ですが、常にメディアの種類が必要であることを示します。

DMO を直接ホストする