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, IMFMediaEnginey 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 captura de audio y vídeo 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 filtros que realiza la captura de vídeo o audio se denomina gráfico de captura de . Los gráficos de captura suelen ser más complicados que los gráficos de reproducción de archivos. Para facilitar la compilación de gráficos de captura de aplicaciones, 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 el Generador de grafos de captura y la interfaz ICaptureGraphBuilder2.

mediante el generador de gráficos de captura

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

inicializar el 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 crear gráficos de captura completamente 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, consulte Temas de captura avanzada.

Acerca de la captura de vídeo en DirectShow