次の方法で共有


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

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

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

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

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

  1. 「グラフ ビルダーのキャプチャについて」のトピックで説明されているように、 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. ビデオ ストリームを VMR にレンダリングするには、 ICaptureGraphBuilder2::RenderStream メソッドを呼び出します。

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

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

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

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

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

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

グラフ ビルダーを使用したグラフの作成