ビデオのプレビュー (DirectShow)
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
ビデオ プレビュー グラフを作成するには、次のように ICaptureGraphBuilder2::RenderStream メソッドを呼び出します。
ICaptureGraphBuilder2 *pBuild; // Capture Graph Builder
// Initialize pBuild (not shown).
IBaseFilter *pCap; // Video capture filter.
/* Initialize pCap and add it to the filter graph (not shown). */
hr = pBuild->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video,
pCap, NULL, NULL);
この例では、次のことを前提としています。
- 「Capture Graph Builder について」の説明に従って、pBuild が初期化されました。
- 「キャプチャ デバイスの選択」の説明に従って、キャプチャ フィルターのインスタンスを作成し、フィルター グラフに追加することで、pCap が初期化されました。
ICaptureGraphBuilder2::RenderStream メソッドの最初のパラメーターは、ピン カテゴリを指定します。プレビュー グラフの場合は、PIN_CATEGORY_PREVIEWを使用します。 2 番目のパラメーターは、メディアの種類をメジャー型 GUID として指定します。 ビデオの場合は、 MEDIATYPE_Videoを使用します。 DV デバイスは、メディアの種類が MEDIATYPE_Interleavedされているインターリーブオーディオとビデオを提供します。 (DV キャプチャの詳細については、「 DirectShow のデジタル ビデオ」を参照してください)。
3 番目のパラメーターは、キャプチャ フィルターの IBaseFilter インターフェイスへのポインターです。 この例では、次の 2 つのパラメーターは必要ありません。 ストリームをレンダリングするために必要になる可能性がある追加のフィルターを指定するために使用されます。 最後のパラメーターを NULL に設定すると、キャプチャ グラフ ビルダーは、メディアの種類に基づいてストリームの既定のレンダラーを選択します。 ビデオの場合、Capture Graph Builder では常に ビデオ レンダラー フィルターが既定のレンダラーとして使用されます。
Note
Windows XP 以降では、ビデオ 混合レンダラー (VMR) は IGraphBuilder メソッドの既定のビデオ レンダラーですが、 RenderStream メソッドの既定のレンダラーではありません。 いずれのプラットフォームでも、特に指定しない限り、Capture Graph Builder は常に古いビデオ レンダラー フィルターを使用します。
ピン カテゴリは PIN_CATEGORY_PREVIEWとして指定されますが、フィルターに実際にプレビュー ピンがあるかどうかは関係ありません。ビデオポートピンまたはキャプチャピンを持つことができます。 どちらの場合も、Capture Graph Builder によって正しいグラフが自動的に作成されます。
次の図は、ビデオをプレビューするための最も簡単なグラフを示しています。
この図では、キャプチャ フィルターにプレビュー ピンがあり、ビデオ レンダラーに直接接続します。
キャプチャ フィルターにキャプチャ ピンしかない場合、キャプチャ グラフ ビルダーは Smart Tee フィルターを挿入します。これにより、ストリームがキャプチャ ストリームとプレビュー ストリームに分割されます。 詳細については、「 ビデオ キャプチャとプレビューの組み合わせ」を参照してください。
場合によっては、ビデオ ストリームがオーバーレイ ミキサー フィルターを通過する必要があります。 その場合は、 RenderStream メソッドによってグラフに自動的に追加されます。
関連トピック