Introducción a la programación de aplicaciones directShow

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

En este artículo se presentan la terminología básica y los conceptos que se usan en DirectShow. Después de leer esta sección, estará listo para escribir su primera aplicación directShow.

Filtros y gráficos de filtros

El bloque de creación de DirectShow es un componente de software denominado filtro. Un filtro es un componente de software que realiza alguna operación en una secuencia multimedia. Por ejemplo, los filtros directShow pueden

  • leer archivos
  • obtener vídeo de un dispositivo de captura de vídeo
  • descodificar varios formatos de secuencia, como vídeo MPEG-1
  • pasar datos a los gráficos o a la tarjeta de sonido

Los filtros reciben la entrada y generan la salida. Por ejemplo, si un filtro descodifica vídeo MPEG-1, la entrada es la secuencia con codificación MPEG y la salida es una serie de fotogramas de vídeo sin comprimir.

En DirectShow, una aplicación realiza cualquier tarea mediante la conexión de cadenas de filtros, de modo que la salida de un filtro se convierta en la entrada de otra. Un conjunto de filtros conectados se denomina gráfico de filtros. Por ejemplo, en el diagrama siguiente se muestra un gráfico de filtros para reproducir un archivo AVI.

filtrar gráfico para reproducir un archivo avi

El filtro Origen de archivo lee el archivo AVI del disco duro. El filtro Divisor AVI analiza el archivo en dos secuencias, una secuencia de vídeo comprimido y una secuencia de audio. El filtro de descompresión AVI descodifica los fotogramas de vídeo. El filtro Video Renderer dibuja los fotogramas en la pantalla, mediante DirectDraw o GDI. El filtro Default DirectSound Device reproduce la secuencia de audio mediante DirectSound.

La aplicación no tiene que administrar todo este flujo de datos. En su lugar, los filtros se controlan mediante un componente de alto nivel denominado Filter Graph Manager. La aplicación realiza llamadas API de alto nivel, como "Ejecutar" (para mover datos a través del grafo) o "Detener" (para detener el flujo de datos). Si necesita más control sobre las operaciones de flujo, puede acceder a los filtros directamente a través de interfaces COM. Filter Graph Manager también pasa notificaciones de eventos a la aplicación.

El Administrador de gráficos de filtros también sirve para otro propósito: proporciona métodos para que la aplicación compile el gráfico de filtros, conectando los filtros juntos. (DirectShow también proporciona varios objetos auxiliares que simplifican este proceso. Estos se describen exhaustivamente en la documentación).

Escritura de una aplicación DirectShow

En términos generales, hay tres tareas que cualquier aplicación directShow debe realizar. Se muestran en el diagrama siguiente.

aplicación típica de directshow

  1. La aplicación crea una instancia del Administrador de gráficos de filtros.
  2. La aplicación usa el Administrador de gráficos de filtros para crear un gráfico de filtro. El conjunto exacto de filtros del gráfico dependerá de la aplicación.
  3. La aplicación usa el Administrador de gráficos de filtros para controlar el gráfico de filtros y transmitir los datos a través de los filtros. A lo largo de este proceso, la aplicación también responderá a los eventos del Administrador de gráficos de filtros.

Cuando se completa el procesamiento, la aplicación libera el Administrador de gráficos de filtros y todos los filtros.

DirectShow se basa en COM; Filter Graph Manager y los filtros son todos los objetos COM. Debe tener conocimientos generales de la programación de clientes COM antes de empezar a programar DirectShow. Hay muchos libros sobre la programación COM disponibles.

Para empezar a trabajar con DirectShow, lea el artículo Cómo reproducir un archivo, que presenta una sencilla aplicación de consola para reproducir un archivo de vídeo. En la sección Acerca de DirectShow se explica la arquitectura de DirectShow con más detalle, mientras que la sección Using DirectShow examina los principales escenarios admitidos por DirectShow, como la captura, la edición de vídeo, la reproducción de DVD y la televisión.