Información general sobre la creación de grafos
[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.
Para crear un grafo de filtro, empiece por crear una instancia del Administrador de gráficos de filtros:
IGraphBuilder* pIGB;
HRESULT hr = CoCreateInstance(CLSID_FilterGraph,
NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder,
(void **)&pIGB);
Filter Graph Manager admite los siguientes métodos de creación de grafos:
- IFilterGraph::ConnectDirect intenta establecer una conexión directa entre dos patillas. Si los pines no se pueden conectar, se produce un error en el método .
- IGraphBuilder::Connect conecta dos pines. Si es posible, realiza una conexión directa. De lo contrario, usa filtros intermedios para completar la conexión.
- IGraphBuilder::Render comienza desde un pin de salida y compila el resto del gráfico. Estos métodos agregan filtros según sea necesario, trabajando en bajada, hasta que llegue a un filtro de representador.
- IGraphBuilder::RenderFile compila un gráfico completo de reproducción de archivos.
- IFilterGraph::AddFilter agrega un filtro al grafo. No conecta el filtro. Debe crear el filtro antes de llamar a este método, ya sea llamando a CoCreateInstance o mediante el asignador de filtros o el enumerador de dispositivos del sistema.
Estos métodos proporcionan tres enfoques básicos para crear el grafo:
- Filter Graph Manager compila todo el grafo.
- Filter Graph Manager compila parte del gráfico.
- La aplicación compila todo el grafo.
El Administrador de gráficos de filtros compila todo el grafo
Si simplemente desea reproducir un archivo creado en un formato reconocido, como AVI, MPEG, WAV o MP3, use el método RenderFile . En el artículo Cómo reproducir un archivo se muestra cómo hacerlo.
El método RenderFile comienza buscando en el Registro un filtro de origen que pueda analizar el archivo. Usa el protocolo (como " https://
" en la dirección URL), la extensión de archivo o los patrones de bytes predefinidos en el archivo para determinar el filtro de origen. Para obtener más información, consulte Registro de un tipo de archivo personalizado.
Para compilar el resto del grafo, el Administrador de gráficos de filtros usa un proceso iterativo en el que toma los tipos multimedia que admite un filtro en sus patillas de salida y busca en el registro filtros que aceptarán ese tipo de medio como entrada. Usa varios criterios para restringir la búsqueda y priorizar los filtros:
- La categoría de filtro identifica la funcionalidad general del filtro.
- El tipo de medio describe qué tipo de datos puede aceptar el filtro como entrada o entregar como salida.
- El mérito determina el orden en el que se prueban los filtros. Si dos filtros de la misma categoría de filtro admiten los mismos tipos de entrada, el Administrador de gráficos de filtros selecciona el que tiene el valor de mérito más alto. A algunos filtros se les asigna un valor de mérito bajo, ya que están diseñados para fines especializados y solo se deben agregar al grafo por la aplicación.
El Administrador de gráficos de filtros usa el objeto Filter Mapper para buscar en el registro.
A medida que se agrega cada filtro, el Administrador de gráficos de filtros intenta conectarlo al pin de salida del filtro anterior. Los filtros negocian para determinar si pueden conectarse y, si es así, qué tipo de medio usar para la conexión. Si el nuevo filtro no se puede conectar, el Administrador de gráficos de filtros lo descarta e intenta otro filtro. Este proceso continúa hasta que se representa cada secuencia.
El Administrador de gráficos de filtros compila parte del grafo
Para hacer algo más allá de simplemente reproducir un archivo, la aplicación debe realizar al menos parte del trabajo de compilación del grafo. Por ejemplo, una aplicación de captura de vídeo debe seleccionar un filtro de origen de captura y agregarlo al gráfico. Si va a escribir datos en un archivo AVI, debe agregar los filtros AVI Mux y File Writer al grafo. Sin embargo, a menudo es posible permitir que el Administrador de gráficos de filtros complete el grafo. Por ejemplo, puede representar un pin para la vista previa llamando al método Render .
La aplicación compila todo el grafo
En algunos escenarios, es posible que la aplicación tenga que compilar el grafo agregando y conectando cada filtro. En este caso, probablemente sepa específicamente qué filtros se deben agregar al grafo. Con este enfoque, la aplicación agrega cada filtro llamando a AddFilter, enumera los pins de los filtros y los conecta llamando a Connect o ConnectDirect.
Temas relacionados