Conexión inteligente

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

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 de 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 de comprobación predeterminados, que son bytes en desplazamientos concretos en el archivo que coinciden con determinados patrones. Para obtener más información, consulte Registro de 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 gráfico y llama al método IFileSourceFilter::Load del filtro con el nombre de archivo.

IGraphBuilder::Render

El método IGraphBuilder::Render crea una subsección de un grafo. Se inicia 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 varias patillas 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 con 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 al 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 pocas patillas admiten esta interfaz.

  2. El Administrador de gráficos de filtros intenta usar filtros que se almacenan en caché en la 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. (También, consulte Dynamic Graph Building).)

  3. Si el gráfico de filtros contiene filtros con patillas de entrada no conectadas, el Administrador de gráficos de filtros los prueba a continuación. Puede forzar el método Render para probar un filtro determinado agregando ese filtro al grafo 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 interfaz IAMPluginControl . Los cambios en la lista afectan al proceso actual de la aplicación y se descartan una vez finalizado el proceso.

  5. Por último, si no se ha encontrado 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 de medios 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 cómo es preferible el filtro, en relación con otros filtros. El método EnumMatchingFilters devuelve filtros por orden de mérito, con un mínimo 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 superiores.

    A partir de Windows 7, DirectShow tiene una lista de filtros bloqueados para determinados subtipos multimedia. Filter Graph Manager omite los filtros de esta lista. Una aplicación puede modificar la lista de filtros bloqueados mediante la interfaz IAMPluginControl . Los cambios en esta lista afectan al proceso actual de la aplicación y se descartan una vez finalizado 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étodo Render :

  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

Mérito

Simulación de la compilación de grafos con GraphEdit

Creación del gráfico de filtros