Compartir a través de


Acerca de Capture Graph Builder

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

Un gráfico de filtro que realiza la captura de vídeo o audio se denomina grafo de captura. Los gráficos de captura suelen ser más complicados que los gráficos de reproducción de archivos. Para facilitar que las aplicaciones compilen gráficos de captura, DirectShow proporciona un objeto auxiliar denominado Capture Graph Builder. Capture Graph Builder expone la interfaz ICaptureGraphBuilder2 , que contiene métodos para compilar y controlar un gráfico de captura. En el diagrama siguiente se muestra capture Graph Builder y la interfaz ICaptureGraphBuilder2 .

uso del generador de gráficos de captura

Para empezar, llame a CoCreateInstance para crear nuevas instancias de Capture Graph Builder y Filter Graph Manager. A continuación, inicialice Capture Graph Builder llamando a ICaptureGraphBuilder2::SetFiltergraph con un puntero a la interfaz IGraphBuilder del Administrador de gráficos de filtros. En el siguiente diagrama se muestra este proceso.

inicialización del generador de grafos de captura

En el código siguiente se muestra una función auxiliar para realizar estos pasos:

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
}

En esta sección sobre la captura de vídeo, se supone que usa Capture Graph Builder para crear el grafo de captura. Sin embargo, es posible compilar gráficos de captura por completo mediante métodos IGraphBuilder. Sin embargo, esto se considera un tema avanzado y se prefieren los métodos capture Graph Builder. Para obtener más información, vea Temas de captura avanzada.

Acerca de la captura de vídeo en DirectShow