Freigeben über


Informationen zum Capture Graph Builder

[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.]

Ein Filterdiagramm, das eine Video- oder Audioaufnahme ausführt, wird als Aufnahmegraph bezeichnet. Erfassungsgraphen sind häufig komplizierter als Dateiwiedergabegraphen. Um Anwendungen das Erstellen von Erfassungsgraphen zu erleichtern, stellt DirectShow ein Hilfsobjekt namens Capture Graph Builder bereit. Der Capture Graph Builder macht die ICaptureGraphBuilder2-Schnittstelle verfügbar, die Methoden zum Erstellen und Steuern eines Erfassungsgraphen enthält. Das folgende Diagramm veranschaulicht den Capture Graph Builder und die ICaptureGraphBuilder2-Schnittstelle .

Verwenden des Capture Graph-Generators

Rufen Sie zunächst CoCreateInstance auf, um neue Instanzen des Capture Graph Builder und des Filter Graph-Managers zu erstellen. Initialisieren Sie dann den Capture Graph Builder, indem Sie ICaptureGraphBuilder2::SetFiltergraph mit einem Zeiger auf die IGraphBuilder-Schnittstelle des Filtergraph-Managers aufrufen. Dieser Prozess wird anhand des folgenden Diagramms veranschaulicht.

Initialisieren des Capture Graph Builder

Der folgende Code zeigt eine Hilfsfunktion zum Ausführen dieser Schritte:

HRESULT InitCaptureGraphBuilder(
  IGraphBuilder **ppGraph,  // Receives the pointer.
  ICaptureGraphBuilder2 **ppBuild  // Receives the pointer.
)
{
    if (!ppGraph || !ppBuild)
    {
        return E_POINTER;
    }
    IGraphBuilder *pGraph = NULL;
    ICaptureGraphBuilder2 *pBuild = NULL;

    // Create the Capture Graph Builder.
    HRESULT hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, 
        CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void**)&pBuild );
    if (SUCCEEDED(hr))
    {
        // Create the Filter Graph Manager.
        hr = CoCreateInstance(CLSID_FilterGraph, 0, CLSCTX_INPROC_SERVER,
            IID_IGraphBuilder, (void**)&pGraph);
        if (SUCCEEDED(hr))
        {
            // Initialize the Capture Graph Builder.
            pBuild->SetFiltergraph(pGraph);

            // Return both interface pointers to the caller.
            *ppBuild = pBuild;
            *ppGraph = pGraph; // The caller must release both interfaces.
            return S_OK;
        }
        else
        {
            pBuild->Release();
        }
    }
    return hr; // Failed
}

In diesem Abschnitt zur Videoaufnahme wird davon ausgegangen, dass Sie den Capture Graph Builder zum Erstellen des Aufnahmegraphen verwenden. Es ist jedoch möglich, Erfassungsgraphen vollständig mithilfe von IGraphBuilder-Methoden zu erstellen. Dies gilt jedoch als fortgeschrittenes Thema, und die Capture Graph Builder-Methoden werden bevorzugt. Weitere Informationen finden Sie unter Themen zur erweiterten Erfassung.

Informationen zur Videoaufnahme in DirectShow