Vorschau des Projekts
[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.]
[Diese API wird nicht unterstützt und kann in Zukunft geändert oder nicht mehr verfügbar sein.]
Um eine Vorschau des Projekts anzuzeigen, benötigen Sie eine Komponente namens Render-Engine, die ein DirectShow-Filterdiagramm aus einem Zeitleiste erstellt. Das Filterdiagramm rendert das Projekt tatsächlich. Sie können die Render-Engine verwenden, um eine Vorschau eines Projekts anzuzeigen oder die endgültige Ausgabedatei zu schreiben.
In diesem Artikel wird nicht ausführlich auf die Render-Engine eingegangen. Für die Vorschau benötigen Sie nur wenige Methodenaufrufe. Eine ausführlichere Erläuterung, einschließlich des Schreibens von Ausgabedateien, finden Sie unter Rendern eines Projekts. Im folgenden Codebeispiel wird gezeigt, wie ein Vorschaudiagramm erstellt wird.
IRenderEngine *pRender = NULL;
hr = CoCreateInstance(CLSID_RenderEngine, NULL, CLSCTX_INPROC_SERVER,
IID_IRenderEngine, (void**) &pRender);
hr = pRender->SetTimelineObject(pTL);
hr = pRender->ConnectFrontEnd( );
hr = pRender->RenderOutputPins( );
Erstellen Sie die Render-Engine mithilfe der CoCreateInstance-Funktion . Rufen Sie dann die folgenden Methoden für die IRenderEngine-Schnittstelle der Render-Engine auf:
- SetTimelineObject. Gibt die zu verwendende Zeitleiste an.
- ConnectFrontEnd. Erstellt ein Teilfilterdiagramm mit einem Ausgabestift für jede Gruppe im Zeitleiste.
- RenderOutputPins. Schließt das Vorschaudiagramm ab, indem jeder Ausgabepin mit einem Video- oder Audiorenderer verbunden wird.
Sobald der Graph erstellt wurde, können Sie eine Vorschau des Projekts anzeigen, indem Sie den Graphen ausführen, wie Sie es bei jedem DirectShow-Filtergraphen verwenden würden. Rufen Sie zunächst einen Zeiger auf das Filterdiagramm ab, indem Sie die IRenderEngine::GetFilterGraph-Methode aufrufen.
IGraphBuilder *pGraph = NULL;
hr = pRender->GetFilterGraph(&pGraph);
Fragen Sie das Filterdiagramm für die Schnittstellen IMediaControl und IMediaEvent ab. Verwenden Sie diese beiden Schnittstellen, um das Diagramm auszuführen und auf den Abschluss der Wiedergabe zu warten. Eine Erläuterung zur Verwendung dieser Schnittstellen finden Sie unter Wiedergeben einer Datei und Reagieren auf Ereignisse. Der folgende Code zeigt eine Möglichkeit, diese Schnittstellen zu verwenden.
IMediaControl *pControl = NULL;
IMediaEvent *pEvent = NULL;
long evCode;
pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
hr = pControl->Run();
hr = pEvent->WaitForCompletion(INFINITE, &evCode);
pControl->Stop();
Der Code in diesem Beispiel blockiert die Programmausführung, bis die Wiedergabe abgeschlossen ist, aufgrund des INFINITE-Parameters im IMediaEvent::WaitForCompletion-Methodenaufruf . Wenn jedoch während der Wiedergabe ein Fehler auftritt, kann dies dazu führen, dass das Programm nicht mehr reagiert. Verwenden Sie in einer echten Anwendung eine Nachrichtenschleife, um auf den Abschluss der Wiedergabe zu warten. Es wird auch empfohlen, dem Benutzer eine Möglichkeit zur Unterbrechung der Wiedergabe bereitzustellen.
Wenn Sie die Verwendung der Render-Engine abgeschlossen haben, rufen Sie immer die IRenderEngine::ScrapIt-Methode auf. Diese Methode löscht das Filterdiagramm und gibt alle Ressourcen frei, die von der Render-Engine gespeichert werden.
pRender->ScrapIt();
Zugehörige Themen