Udostępnij przez


Informacje o narzędziu Capture Graph Builder

[Funkcja skojarzona z tą stroną, DirectShow, jest starszą funkcją. Został zastąpiony przez MediaPlayer, IMFMediaEnginei Audio/Video Capture w Media Foundation. Te funkcje zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał MediaPlayer, IMFMediaEngine oraz funkcji Audio/Video Capture w ramach Media Foundation, zamiast DirectShow, jeśli to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]

Graf filtru, który wykonuje przechwytywanie wideo lub audio, jest nazywany grafem przechwytywania . Wykresy przechwytywania są często bardziej skomplikowane niż wykresy odtwarzania plików. Aby ułatwić aplikacjom tworzenie grafów przechwytywania, directshow udostępnia obiekt pomocnika o nazwie Capture Graph Builder. Capture Graph Builder udostępnia interfejs ICaptureGraphBuilder2, który zawiera metody do budowania i kontrolowania grafu przechwytywania. Na poniższym diagramie przedstawiono narzędzie Capture Graph Builder i interfejs ICaptureGraphBuilder2.

przy użyciu konstruktora grafów przechwytywania

Zacznij od wywołania metody CoCreateInstance w celu utworzenia nowych wystąpień konstruktora programu Capture Graph i Menedżera filtru programu Graph. Następnie zainicjuj konstruktora Capture Graph, wywołując ICaptureGraphBuilder2::SetFiltergraph z wskaźnikiem do interfejsu IGraphBuilder menedżera schematu filtrów. Na poniższym diagramie przedstawiono ten proces.

inicjowanie konstruktora grafu przechwytywania

Poniższy kod przedstawia funkcję pomocnika, aby wykonać następujące kroki:

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
}

W tej sekcji dotyczącej przechwytywania wideo zakłada się, że do utworzenia grafu przechwytywania używasz narzędzia Capture Graph Builder. Jednak można tworzyć wykresy przechwytywania w całości przy użyciu metod IGraphBuilder. Jest to jednak uważane za zaawansowany temat, a preferowane są metody Capture Graph Builder. Aby uzyskać więcej informacji, zobacz tematy advanced capture.

Informacje o przechwytywaniu wideo w DirectShow