Freigeben über


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:

  1. Rufen Sie IRenderEngine::SetRenderRange auf, um anzugeben, welcher Teil des Zeitleiste in der Vorschau angezeigt werden soll. (Optional)
  2. Rufen Sie IRenderEngine::ConnectFrontEnd auf, um das Front-End des Graphen zu erstellen.
  3. 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:

  1. Rufen Sie SetRenderRange auf. (Optional)
  2. Rufen Sie ConnectFrontEnd auf.
  3. 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.)
  4. Suchen Sie das Diagramm zurück zur Zeit 0.
  5. 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.

Verwalten von Videobearbeitungsprojekten

Rendern eines Projekts