Compartir a través de


Conexión inteligente

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEnginey captura de audio y 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.

Intelligent Connect es el mecanismo que el Administrador de gráficos de filtros usa para crear gráficos de filtro. Consta de varios algoritmos relacionados que seleccionan filtros y los agregan al gráfico de filtros.

Lea este tema si tiene problemas para crear un determinado gráfico de filtros y desea solucionar el problema, o si está escribiendo su propio filtro y desea que esté disponible para la creación automática de grafos.

Intelligent Connect implica los siguientes métodos IGraphBuilder:

IGraphBuilder::AddSourceFilter

El método IGraphBuilder::AddSourceFilter agrega un filtro de origen que puede representar un archivo especificado. En primer lugar, busca en el Registro y coincide con el protocolo (como https://), la extensión de nombre de archivo o un conjunto de bytes predeterminados comprobar bytes, que son bytes en desplazamientos concretos en el archivo que coinciden con determinados patrones. Para obtener más información, consulte Registrar un tipo de archivo personalizado. Suponiendo que el método localiza un filtro de origen adecuado, crea una instancia de ese filtro, la agrega al grafo y llama al método IFileSourceFilter::Load con el nombre de archivo.

IGraphBuilder::Render

El método IGraphBuilder::Render crea una subsección de un grafo. Comienza desde un pin de salida no conectado y funciona de bajada, agregando nuevos filtros según sea necesario. El filtro inicial ya debe estar en el gráfico. En cada paso, el método Render busca un filtro que pueda conectarse al filtro anterior. La secuencia puede bifurcarse si un filtro de conexión tiene varios pines de salida. La búsqueda se detiene cuando cada secuencia tiene un representador. Si el método Render se bloquea, podría realizar una copia de seguridad e intentarlo de nuevo mediante un conjunto diferente de filtros.

Para conectar cada pin de salida, el método Render hace lo siguiente:

  1. Si el pin admite la interfaz IStreamBuilder, el Administrador de gráficos de filtros delega todo el proceso en el método IStreamBuilder::Render del pin. Al exponer esta interfaz, el pin asume la responsabilidad de crear el resto del gráfico, hasta el representador. Sin embargo, muy pocos patillas admiten esta interfaz.

  2. El Administrador de gráficos de filtros intenta usar filtros almacenados en caché en memoria, si los hay. A lo largo del proceso de Intelligent Connect, Filter Graph Manager puede almacenar en caché los filtros de los pasos anteriores del proceso. (Consulte también creación de grafos dinámicos).

  3. Si el gráfico de filtros contiene filtros con patillas de entrada no conectadas, el Administrador de gráficos de filtros los intenta a continuación. Puede forzar el método Render para probar un filtro determinado agregando ese filtro al gráfico antes de llamar a Render.

  4. A partir de Windows 7, DirectShow tiene una lista de filtros preferidos para determinados subtipos multimedia. Si hay un filtro preferido para el tipo de medio que se está representando, el Administrador de gráficos de filtros intenta ese filtro a continuación. Una aplicación puede modificar la lista de filtros preferidos mediante la interfazIAMPluginControl. Los cambios en la lista afectan al proceso actual de la aplicación y se descartan después de que finalice el proceso.

  5. Por último, si no se encuentra ningún filtro adecuado, el Administrador de gráficos de filtros busca en el registro mediante el método IFilterMapper2::EnumMatchingFilters. Intenta hacer coincidir los tipos multimedia preferidos del pin de salida con los tipos de medios enumerados en el Registro.

    Cada filtro se registra con un mérito, un valor numérico que indica lo preferible que es el filtro, en relación con otros filtros. El método EnumMatchingFilters devuelve filtros en orden de mérito, con un mínimo mérito de MERIT_DO_NOT_USE + 1. Omite los filtros con un mérito de MERIT_DO_NOT_USE o menos. Los filtros también se agrupan en categorías, definidas por GUID. Las propias categorías tienen mérito, y el método EnumMatchingFilters omite cualquier categoría con un mérito de MERIT_DO_NOT_USE o menos, incluso si los filtros de esa categoría tienen valores de mérito más altos.

    A partir de Windows 7, DirectShow tiene una lista de filtros bloqueados para determinados subtipos multimedia. El Administrador de gráficos de filtros omite los filtros de esta lista. Una aplicación puede modificar la lista de filtros bloqueados mediante la interfazIAMPluginControl. Los cambios en esta lista afectan al proceso actual de la aplicación y se descartan después de que finalice el proceso.

En resumen, el método Render intenta filtrar en el orden siguiente:

  1. Use IStreamBuilder.
  2. Pruebe los filtros almacenados en caché.
  3. Pruebe los filtros en el gráfico.
  4. Windows 7 o posterior: pruebe el filtro preferido para el tipo de medio, si existe.
  5. Busque filtros en el Registro.

IGraphBuilder::RenderFile

El método IGraphBuilder::RenderFile crea un gráfico de reproducción predeterminado a partir de un nombre de archivo. Internamente, este método usa addSourceFilter para buscar el filtro de origen correcto y render para compilar el resto del gráfico.

IGraphBuilder::Connect

El método IGraphBuilder::Connect conecta un pin de salida a un pin de entrada. Este método agrega filtros intermedios si es necesario, mediante una variación del algoritmo descrito para el métodoRender:

  1. Pruebe una conexión directa entre los filtros, sin filtros intermedios.
  2. Pruebe los filtros almacenados en caché.
  3. Pruebe los filtros en el gráfico.
  4. Windows 7 o posterior: pruebe el filtro preferido para el tipo de medio, si existe.
  5. Busque filtros en el Registro.

categorías de filtro de

Merit

simulación de la creación de grafos con graphEdit

Crear el gráfico de filtros