次の方法で共有


VMR-9 フィルター グラフの構築

[DirectShow このページに関連付けられている機能は、従来の機能です。 これは、 MediaPlayerIMFMediaEngineメディア ファンデーションの Audio/Video Captureに置き換えられました。 これらの機能は、Windows 10 および Windows 11 用に最適化されています。 Microsoftは、新しいコードでは、可能であればDirectShowの代わりに、Media Foundation MediaPlayerIMFMediaEngine、そして Audio/Video Captureの使用を強くお勧めします。 従来の API を使用する既存のコードは、可能であれば新しい API を使用するように書き直すよう提案しています。

ビデオ ミキシング レンダラー 9 フィルター (VMR-9) は既定のビデオ レンダラーではないため、VMR-9 を使用するアプリケーションでは、それをグラフに明示的に追加して接続する必要があります。 このセクションでは、VMR-9 を使用してフィルター グラフを構築するための 2 つの異なる方法について説明します。

キャプチャ グラフ ビルダーの使用

Capture Graph Builder は、カスタム フィルター グラフを構築するためのヘルパー オブジェクトです。 これを使用して、次のように VMR-9 グラフを構築できます。

  1. Capture Graph Builderについて」の説明に従って、Capture Graph Builder を作成して初期化します。

  2. CoCreateInstance を呼び出して VMR-9 を作成します。

    IBaseFilter *pVmr = NULL;
    hr = CoCreateInstance(CLSID_VideoMixingRenderer9, 0, 
        CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&pVmr);
    
  3. フィルター グラフ マネージャー IFilterGraph::AddFilter を呼び出して、フィルター グラフに VMR-9 を追加します。

    hr = pGraph->AddFilter(pVmr, L"VMR9");
    
  4. IGraphBuilder::AddSourceFilter を呼び出して、ビデオ ファイルのソース フィルターを追加します。

    IBaseFilter *pSource;
    hr = pGraph->AddSourceFilter(L"C:\\Example.avi", L"Source1", &pSource);
    
  5. ICaptureGraphBuilder2::RenderStream メソッドを呼び出して、ビデオ ストリームを VMR にレンダリングします。

    hr = pBuild->RenderStream(0, 0, pSource, 0, pVmr);  
    
  6. 必要に応じて、RenderStream をもう一度呼び出してオーディオ ストリームをレンダリングします。

    hr = pBuild->RenderStream(0, &MEDIATYPE_Audio, pSource, 0, NULL);
    

ソース ファイルごとに AddSourceFilter と RenderStream を呼び出すことで、複数のビデオ ストリームを混在させることができます。

フィルター グラフ マネージャーの使用

Capture Graph Builder を使用しない場合は、次のようにフィルター グラフ マネージャーでメソッドを使用するだけで VMR-9 グラフを作成できます。

  1. 前の手順に示すように、VMR-9 を作成し、グラフに追加します。
  2. 前の手順に示すように、AddSourceFilter を使用してビデオ ファイルのソース フィルターを追加します。
  3. オーディオをレンダリングする場合は、DirectSound Renderer フィルターのインスタンスを作成し、フィルター グラフに追加します。
  4. IBaseFilter::EnumPins メソッドを使用して、ソース フィルターの出力ピンを検索します。 詳細については、「ピンの列挙」を参照してください。
  5. IFilterGraph2 インターフェイスのフィルター グラフ マネージャーに対してクエリを実行します。
  6. IFilterGraph2::RenderEx を、AM_RENDEREX_RENDERTOEXISTINGRENDERERS フラグを使用して呼び出します。 この呼び出しでは、グラフに既に含まれているレンダラー フィルター (この場合は VMR-9 と DirectSound レンダラー) のみを使用して、出力ピンがレンダリングされます。 これにより、Intelligent Connect ロジックが既定のビデオ レンダラーをグラフに追加できなくなります。これにより、VMR-9 は接続されません。

Capture Graph Builder を使用してグラフを作成する