Schreiben einer Windows Mediendatei in DES

[Diese API wird nicht unterstützt und kann in Zukunft geändert oder nicht mehr verfügbar sein.]

In diesem Abschnitt wird beschrieben, wie Sie eine Windows-Mediendatei mithilfe von DirectShow Editing Services (DES) schreiben.

Wichtig

Verwenden Sie die intelligente Render-Engine nicht zum Schreiben Windows Mediendateien. Verwenden Sie immer die Einfache Render-Engine (CLSID _ RenderEngine).

Gehen Sie wie folgt vor Windows um eine Mediendatei zu schreiben:

  1. Rufen Sie SetSite in der Render-Engine mit einem Zeiger auf Ihren Schlüsselanbieter auf.

  2. Erstellen Sie das Front-End des Graphen. (Weitere Informationen finden Sie unter Rendern Project.)

  3. Erstellen Sie den WM ASF Writer-Filter, und fügen Sie ihn dem Diagramm hinzu.

  4. Verwenden Sie die IFileSinkFilter-Schnittstelle im WM ASF Writer-Filter, um den Dateinamen fest zu legen.

  5. Konfigurieren Sie den WM ASF Writer für die Verwendung eines Windows Medienprofils. Jedes Profil verfügt über eine vordefinierte Anzahl von Streams. Sie müssen ein Profil auswählen, das den Gruppen in Ihrem Projekt entspricht.

    Die IConfigAsfWriter-Schnittstelle enthält einige verschiedene Methoden zum Festlegen des Profils. Beispielsweise gibt die ConfigureFilterUsingProfileGuid-Methode ein Systemprofil als GUID an. Sie können auch die methoden Windows Media Format verwenden, um einen IWMProfile-Zeiger zu erhalten, und dann IConfigAsfWriter::ConfigureFilterUsingProfile aufrufen. Weitere Informationen finden Sie unter Konfigurieren des ASF Writer.

  6. Verbinden das Front-End zum ASF Writer. Das Front-End des Diagramms enthält einen Ausgabepin für jede Gruppe. Unter der Annahme, dass Sie ein kompatibles Profil angegeben haben, sollte der ASF Writer über einen übereinstimmenden Satz von Eingabepins verfügen. Verbinden jeden Ausgabepin an den entsprechenden Eingabepin an. Die einfachste Möglichkeit hierzu ist die Verwendung der ICaptureGraphBuilder2::RenderStream-Methode. Erstellen Sie zunächst eine neue Instanz des Capture Graph Builder, und initialisieren Sie sie mit einem Zeiger auf den Filter Graph Manager:

    ICaptureGraphBuilder2 *pBuild = 0;
    hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, 0, CLSCTX_INPROC_SERVER,
        IID_ICaptureGraphBuilder2, (void**)&pBuild);
    pBuild->SetFiltergraph(pGraph); 
    

    Rufen Sie als Nächstes den Ausgabepin für jede Gruppe ab, indem Sie die IRenderEngine::GetGroupOutputPin-Methode aufrufen. Rufen Sie RenderStream auf, um den Pin mit dem ASF Writer zu verbinden:

    long cGroups = 0;
    hr = pTimeline->GetGroupCount(&cGroups);
    for (long i = 0; i < cGroups; i++)
    {
        IPin *pPin;
        hr = pRenderEngine->GetGroupOutputPin(i, &pPin);
        if (SUCCEEDED(hr))
        {
            hr = pBuild->RenderStream(0, 0, pPin, 0, pASF);
        }
        pPin->Release();
    }
    pBuild->Release
    

Verwenden Windows Medien mit DirectShow-Bearbeitungsdiensten