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:
Erstellen und initialisieren Sie den Capture Graph Builder, wie im Thema Informationen zum Capture Graph Builder beschrieben.
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);
Rufen Sie IFilterGraph::AddFilter im Filter Graph Manager auf, um dem Filtergraphen die VMR-9 hinzuzufügen:
hr = pGraph->AddFilter(pVmr, L"VMR9");
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);
Rufen Sie die ICaptureGraphBuilder2::RenderStream-Methode auf, um den Videodatenstrom in der VMR zu rendern:
hr = pBuild->RenderStream(0, 0, pSource, 0, pVmr);
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:
- Erstellen Sie die VMR-9, und fügen Sie sie dem Diagramm hinzu, wie im vorherigen Verfahren gezeigt.
- Verwenden Sie AddSourceFilter, um einen Quellfilter für die Videodatei hinzuzufügen, wie im vorherigen Verfahren gezeigt.
- Wenn Sie die Audiowiedergabe rendern möchten, erstellen Sie eine instance des DirectSound Renderer-Filters, und fügen Sie ihn dem Filterdiagramm hinzu.
- Verwenden Sie die IBaseFilter::EnumPins-Methode, um einen Ausgabepin im Quellfilter zu finden. Weitere Informationen finden Sie unter Aufzählen von Pins .
- Fragen Sie den Filter Graph-Manager nach der IFilterGraph2-Schnittstelle ab.
- 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.
Zugehörige Themen