Compartir a través de


Creación de un grafo de filtro VMR-9

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

Dado que el representador de mezcla de vídeos 9 (VMR-9) no es el representador de vídeo predeterminado, una aplicación que usa VMR-9 debe agregarla explícitamente al grafo y conectarla. En esta sección se presentan dos enfoques diferentes para crear gráficos de filtros con VMR-9.

Uso del Generador de gráficos de captura

Capture Graph Builder es un objeto auxiliar para crear gráficos de filtros personalizados. Puede usarlo para compilar gráficos VMR-9 de la siguiente manera:

  1. Cree e inicialice capture Graph Builder, como se describe en el tema Acerca de Capture Graph Builder.

  2. Llame a CoCreateInstance para crear el VMR-9:

    IBaseFilter *pVmr = NULL;
    hr = CoCreateInstance(CLSID_VideoMixingRenderer9, 0, 
        CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&pVmr);
    
  3. Llame a IFilterGraph::AddFilter en el Administrador de gráficos de filtros para agregar VMR-9 al gráfico de filtros:

    hr = pGraph->AddFilter(pVmr, L"VMR9");
    
  4. Llame a IGraphBuilder::AddSourceFilter para agregar un filtro de origen para el archivo de vídeo:

    IBaseFilter *pSource;
    hr = pGraph->AddSourceFilter(L"C:\\Example.avi", L"Source1", &pSource);
    
  5. Llame al método ICaptureGraphBuilder2::RenderStream para representar la secuencia de vídeo en VMR:

    hr = pBuild->RenderStream(0, 0, pSource, 0, pVmr);  
    
  6. Opcionalmente, vuelva a llamar a RenderStream para representar la secuencia de audio:

    hr = pBuild->RenderStream(0, &MEDIATYPE_Audio, pSource, 0, NULL);
    

Puede mezclar varias secuencias de vídeo llamando a AddSourceFilter y RenderStream para cada archivo de origen.

Uso del Administrador de gráficos de filtros

Si prefiere no usar Capture Graph Builder, puede compilar un grafo VMR-9 simplemente mediante métodos en el Administrador de gráficos de filtros, como se indica a continuación:

  1. Cree vmR-9 y agréguelo al grafo, como se muestra en el procedimiento anterior.
  2. Use AddSourceFilter para agregar un filtro de origen para el archivo de vídeo, como se muestra en el procedimiento anterior.
  3. Si desea representar el audio, cree una instancia del filtro DirectSound Renderer y agréguela al gráfico de filtros.
  4. Use el método IBaseFilter::EnumPins para buscar un pin de salida en el filtro de origen. Consulte Enumerar patillas para obtener más información.
  5. Consulte el Administrador de gráficos de filtros para la interfaz IFilterGraph2.
  6. Llame a IFilterGraph2::RenderEx con la marca AM_RENDEREX_RENDERTOEXISTINGRENDERERS. Esta llamada representa el pin de salida, con solo los filtros del representador que ya están en el gráfico; en este caso, VMR-9 y DirectSound Renderer. Esto impide que la lógica de Intelligent Connect agregue el representador de vídeo predeterminado al grafo, lo que dejaría que VMR-9 no estuviera conectado.

Creación de gráficos con el Generador de gráficos de captura