Vorschau eines Projekts
[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]
[Diese API wird nicht unterstützt und kann in Zukunft geändert oder nicht mehr verfügbar sein.]
Um eine Vorschau eines Projekts anzuzeigen, rufen Sie zuerst CoCreateInstance auf, um eine instance der Basic Render Engine zu erstellen. Der Klassenbezeichner ist CLSID_RenderEngine. Rufen Sie dann die IRenderEngine::SetTimelineObject-Methode auf, um die Zeitleiste anzugeben, die Sie rendern.
Führen Sie bei der ersten Vorschau der Zeitleiste die folgenden Aufrufe in der aufgeführten Reihenfolge aus:
- Rufen Sie IRenderEngine::SetRenderRange auf, um anzugeben, welcher Teil des Zeitleiste in der Vorschau angezeigt werden soll. (Optional)
- Rufen Sie IRenderEngine::ConnectFrontEnd auf, um das Front-End des Graphen zu erstellen.
- Rufen Sie IRenderEngine::RenderOutputPins auf. Diese Methode verbindet jeden Ausgabenadel mit einem Videorenderer oder Audiorenderer und vervollständigt das Diagramm.
Das folgende Codebeispiel zeigt die folgenden Schritte:
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();
Führen Sie nun das Filterdiagramm aus. Rufen Sie zunächst die IRenderEngine::GetFilterGraph-Methode auf, um einen Zeiger auf die IGraphBuilder-Schnittstelle des Filter Graph-Managers abzurufen. Fragen Sie dann den Filter Graph Manager für die IMediaControl-Schnittstelle ab, und rufen Sie IMediaControl::Run auf, wie im folgenden Code gezeigt:
IGraphBuilder *pGraph = NULL;
IMediaControl *pControl = NULL;
hr = pRender->GetFilterGraph(&pGraph);
hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pControl->Run();
Verwenden Sie die IMediaEventEx-Schnittstelle des Filter Graph-Managers, um zu warten, bis die Vorschau abgeschlossen ist. Sie können das Diagramm auch über die IMediaSeeking-Schnittstelle des Filter Graph-Managers suchen, genau wie bei einem Dateiwiedergabegraphen.
Um eine erneute Vorschau des Projekts anzuzeigen, suchen Sie das Diagramm zurück zur Zeit 0, und rufen Sie erneut Ausführen auf . Wenn Sie den Inhalt der Zeitleiste ändern, gehen Sie wie folgt vor:
- Rufen Sie SetRenderRange auf. (Optional)
- Rufen Sie ConnectFrontEnd auf.
- Wenn die ConnectFrontEnd-Methode S_WARN_OUTPUTRESET zurückgibt, rufen Sie RenderOutputPins auf. (Wenn ConnectFrontEnd S_OK zurückgibt, können Sie diesen Schritt überspringen.)
- Suchen Sie das Diagramm zurück zur Zeit 0.
- Führen Sie das Diagramm aus.
Das folgende Beispiel zeigt die folgenden Schritte:
hr = pRender->ConnectFrontEnd();
if (hr == S_WARN_OUTPUTRESET)
{
hr = pRender->RenderOutputPins();
}
LONGLONG llStart = 0;
hr = pSeek->SetPositions(&llStart, AM_SEEKING_AbsolutePositioning, 0, 0);
hr = pControl->Run();
Ein vollständiges Beispiel zum Laden und Anzeigen einer Vorschau einer Projektdatei finden Sie unter Laden und Vorschau eines Projekts.
Zugehörige Themen