Erstellen eines VMR-9-Filtergraphen

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]

Da der Videomischungsrenderer 9-Filter (VMR-9) nicht der Standard-Videorenderer ist, muss eine Anwendung, die VMR-9 verwendet, diesen explizit dem Diagramm hinzufügen und verbinden. In diesem Abschnitt werden zwei verschiedene Ansätze zum Erstellen von Filterdiagrammen mit VMR-9 vorgestellt.

Verwenden des Capture Graph-Generators

Der Capture Graph Builder ist ein Hilfsobjekt zum Erstellen benutzerdefinierter Filtergraphen. Sie können es verwenden, um VMR-9-Diagramme wie folgt zu erstellen:

  1. Erstellen und initialisieren Sie den Capture Graph Builder, wie im Thema Informationen zum Capture Graph Builder beschrieben.

  2. Rufen Sie CoCreateInstance auf, um die VMR-9 zu erstellen:

    IBaseFilter *pVmr = NULL;
    hr = CoCreateInstance(CLSID_VideoMixingRenderer9, 0, 
        CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&pVmr);
    
  3. Rufen Sie IFilterGraph::AddFilter im Filter Graph Manager auf, um dem Filtergraphen die VMR-9 hinzuzufügen:

    hr = pGraph->AddFilter(pVmr, L"VMR9");
    
  4. Rufen Sie IGraphBuilder::AddSourceFilter auf, um einen Quellfilter für die Videodatei hinzuzufügen:

    IBaseFilter *pSource;
    hr = pGraph->AddSourceFilter(L"C:\\Example.avi", L"Source1", &pSource);
    
  5. Rufen Sie die ICaptureGraphBuilder2::RenderStream-Methode auf, um den Videodatenstrom in der VMR zu rendern:

    hr = pBuild->RenderStream(0, 0, pSource, 0, pVmr);  
    
  6. Rufen Sie optional RenderStream erneut auf, um den Audiodatenstrom zu rendern:

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

Sie können mehrere Videostreams kombinieren, indem Sie AddSourceFilter und RenderStream für jede Quelldatei aufrufen.

Verwenden des Filtergraph-Managers

Wenn Sie den Capture Graph Builder nicht verwenden möchten, können Sie einen VMR-9-Graphen wie folgt mithilfe von Methoden im Filter Graph-Manager erstellen:

  1. Erstellen Sie die VMR-9, und fügen Sie sie dem Diagramm hinzu, wie im vorherigen Verfahren gezeigt.
  2. Verwenden Sie AddSourceFilter, um einen Quellfilter für die Videodatei hinzuzufügen, wie im vorherigen Verfahren gezeigt.
  3. Wenn Sie die Audiowiedergabe rendern möchten, erstellen Sie eine instance des DirectSound Renderer-Filters, und fügen Sie ihn dem Filterdiagramm hinzu.
  4. Verwenden Sie die IBaseFilter::EnumPins-Methode, um einen Ausgabepin im Quellfilter zu finden. Weitere Informationen finden Sie unter Aufzählen von Pins .
  5. Fragen Sie den Filter Graph-Manager nach der IFilterGraph2-Schnittstelle ab.
  6. Rufen Sie IFilterGraph2::RenderEx mit dem flag AM_RENDEREX_RENDERTOEXISTINGRENDERERS auf. Durch diesen Aufruf wird der Ausgabepin gerendert, wobei nur die Rendererfilter verwendet werden, die bereits im Graphen enthalten sind – in diesem Fall die VMR-9 und der DirectSound-Renderer. Dadurch wird verhindert, dass die Intelligent Connect-Logik dem Graphen den Standard-Videorenderer hinzufügt, wodurch die Verbindung zwischen VMR-9 und VMR-9 aufgehoben wird.

Erstellen von Graphen mit dem Capture Graph Builder