DirectShow (a veces abreviado como DS o DShow ), nombre en clave Quartz , es un marco multimedia y una API producidos por Microsoft para que los desarrolladores de software realicen diversas operaciones con archivos multimedia o transmisiones. Es el reemplazo de la tecnología anterior de vídeo para Windows de Microsoft . [1] Basado en el marco del Modelo de objetos componentes (COM) de Microsoft Windows , DirectShow proporciona una interfaz común para medios en varios lenguajes de programación y es un marco extensible basado en filtros que puede representar o grabar archivos multimedia a pedido a pedido de el usuario o desarrollador. Las herramientas y la documentación de desarrollo de DirectShow se distribuyeron originalmente como parte del SDK de DirectX . [2] Actualmente, se distribuyen como parte del SDK de Windows (anteriormente conocido como Platform SDK). [3]
Microsoft planea reemplazar completamente DirectShow gradualmente con Media Foundation en futuras versiones de Windows. Una de las razones citadas por Microsoft es la de proporcionar "un soporte mucho más sólido para los sistemas de protección de contenidos" [4] (ver gestión de derechos digitales ). Becky Weiss de Microsoft confirmó en 2006 que "notarás que trabajar con Media Foundation requiere trabajar a un nivel ligeramente inferior al que tendría trabajar con DirectShow. Y todavía hay funciones de DirectShow que no están (todavía) en Media Foundation". ". [4] [5] Como se describe en el artículo de Media Foundation, las aplicaciones de Windows Vista y Windows 7 utilizan Media Foundation en lugar de DirectShow para varias tareas relacionadas con los medios.
El predecesor directo de DirectShow, ActiveMovie (con nombre en código Quartz), fue diseñado para proporcionar soporte MPEG-1 para Windows. También estaba pensado como un reemplazo futuro para marcos de procesamiento de medios como Video para Windows y Media Control Interface , que nunca se habían adaptado completamente a un entorno de 32 bits y no utilizaban COM. [6] [1]
El equipo de desarrollo utilizó un proyecto de procesador de medios digitales modular preexistente con nombre en código "Clockwork" como base para DirectShow. Clockwork se había utilizado anteriormente en el proyecto Microsoft Interactive Television. [7]
El proyecto se llamó inicialmente "ActiveMovie" y se lanzó en mayo de 1996, incluido con la versión beta de Internet Explorer 3 .0. [8] [9] En marzo de 1997, Microsoft anunció que ActiveMovie pasaría a formar parte del conjunto de tecnologías DirectX 5, y alrededor de julio comenzó a referirse a él como DirectShow, lo que refleja los esfuerzos de Microsoft en ese momento para consolidar tecnologías que funcionaban directamente con el hardware bajo un esquema de nomenclatura común. [10] [11] [12] DirectShow se convirtió en un componente estándar de todos los sistemas operativos Windows a partir de Windows 98 ; [13] sin embargo, está disponible en Windows 95 instalando el último redistribuible DirectX disponible. [14] En la versión 8.0 de DirectX, DirectShow se convirtió en parte del SDK principal de DirectX junto con otras API de DirectX. [15]
En octubre de 2004, DirectShow se eliminó de la distribución principal de DirectX y se trasladó a la descarga de DirectX Extras. [ cita necesaria ] En abril de 2005, DirectShow se eliminó por completo de DirectX y se trasladó al SDK de Windows a partir de la versión Windows Server 2003 SP1 del SDK. [3] Sin embargo, todavía era necesario el SDK de DirectX para crear algunas de las muestras de DirectShow. [dieciséis]
Desde noviembre de 2007, las API de DirectShow forman parte del SDK de Windows . Incluye varias mejoras nuevas, códecs y actualizaciones de filtros, como Enhanced Video Renderer (EVR) y DXVA 2.0 ( DirectX Video Acceleration ). [17]
DirectShow divide una tarea multimedia compleja (por ejemplo, reproducción de vídeo) en una secuencia de pasos de procesamiento fundamentales conocidos como filtros . [18] [19] Cada filtro, que representa una etapa en el procesamiento de los datos, tiene pines de entrada y/o salida que pueden usarse para conectar el filtro a otros filtros. La naturaleza genérica de este mecanismo de conexión permite conectar filtros de varias maneras para implementar diferentes funciones complejas. [20] Para implementar una tarea compleja específica, un desarrollador primero debe crear un gráfico de filtros creando instancias de los filtros requeridos y luego conectando los filtros entre sí. [21]
Hay tres tipos principales de filtros:
Durante el proceso de renderizado, el gráfico de filtros busca filtros registrados en el Registro de Windows y crea su gráfico de filtros en función de las ubicaciones proporcionadas. Después de esto, conecta los filtros y, a petición del desarrollador, ejecuta (es decir, reproduce, pausa, etc.) el gráfico creado. [ cita necesaria ] Los gráficos de filtro DirectShow se utilizan ampliamente en la reproducción de video (en la que los filtros implementan funciones como análisis de archivos, demultiplexación, descompresión y renderizado de video y audio), así como para grabación, edición, codificación, transcodificación o red de video y audio. transmisión de medios. DirectShow también puede controlar tareas interactivas como la navegación de DVD. [ cita necesaria ]
En el ejemplo anterior, de izquierda a derecha, el gráfico contiene un filtro de origen para leer un archivo MP3, filtros divisores de flujo y decodificadores para analizar y decodificar el audio, y un filtro de renderizado para reproducir las muestras de audio sin procesar. Cada filtro tiene uno o más pines que se pueden usar para conectar ese filtro a otros filtros. Cada pin funciona como fuente de entrada o salida para que los datos fluyan de un filtro a otro. Dependiendo del filtro, los datos se "extraen" de un pin de entrada o se "empujan" a un pin de salida para transferir datos entre filtros. Cada pin solo puede conectarse a otro pin y deben ponerse de acuerdo sobre qué tipo de datos envían. [ cita necesaria ]
La mayoría de los filtros se crean utilizando un conjunto de clases de C++ proporcionadas en el SDK de DirectShow, denominadas clases base de DirectShow. [ cita necesaria ] Estos manejan gran parte de la lógica de creación, registro y conexión del filtro. [23] Para que el gráfico de filtros utilice filtros automáticamente, deben estar registrados en una entrada de registro DirectShow separada, además de estar registrados en COM. Este registro puede ser gestionado por las clases base de DirectShow. Sin embargo, si la aplicación agrega los filtros manualmente, no es necesario registrarlos en absoluto. [ cita necesaria ] Desafortunadamente, es difícil modificar un gráfico que ya se está ejecutando. Generalmente es más fácil detener el gráfico y crear uno nuevo desde cero. A partir de DirectShow 8.0, se introdujeron la creación de gráficos dinámicos, la reconexión dinámica y cadenas de filtros para ayudar a modificar el gráfico mientras se estaba ejecutando. [24] Sin embargo, muchos proveedores de filtros ignoran esta característica, lo que hace que la modificación del gráfico sea problemática una vez que el gráfico ha comenzado a procesarse. [ cita necesaria ]
Aunque DirectShow es capaz de crear dinámicamente un gráfico para representar un tipo de medio determinado, en ciertos casos es difícil para los desarrolladores confiar en esta funcionalidad y necesitan recurrir a la creación manual de gráficos de filtro si el gráfico de filtro resultante es variable. [ cita necesaria ] Es posible que los gráficos de filtros cambien con el tiempo a medida que se instalan nuevos filtros en la computadora. [ cita necesaria ]
De forma predeterminada, DirectShow incluye una serie de filtros para decodificar algunos formatos de archivos multimedia comunes, como MPEG-1 , MP3 , Windows Media Audio , Windows Media Video , MIDI , contenedores multimedia como AVI , ASF , WAV , algunos divisores/demultiplexores, multiplexores. , filtros de origen y receptor , algunos filtros de imágenes estáticas, algo de aceleración de video y soporte mínimo de administración de derechos digitales (DRM). [25] [26] El repertorio de formatos estándar de DirectShow se puede ampliar fácilmente mediante una variedad de filtros, lo que permite que DirectShow admita prácticamente cualquier formato contenedor y cualquier códec de audio o vídeo. Por ejemplo, se han desarrollado filtros para Ogg Vorbis , Musepack y AC3 , y algunos códecs como MPEG-4 Advanced Simple Profile , AAC , H.264 , Vorbis y contenedores MOV , MP4 están disponibles de terceros como ffdshow , K- Lite y CCCP . [27] [28] [29] La incorporación de soporte para códecs adicionales como estos puede implicar el pago de tarifas de licencia al desarrollador de tecnología de códec involucrado o al titular de la patente. [ cita necesaria ] Finalmente, existen filtros "puente" que admiten simultáneamente múltiples formatos, así como funciones como multiplexación de secuencias, al exponer la funcionalidad de las API multimedia subyacentes como VLC . [30]
La cantidad de trabajo necesaria para implementar un gráfico de filtro depende de varios factores. En el caso más simple, DirectShow puede crear un gráfico de filtro automáticamente a partir de una fuente como un archivo o una URL. [31] Si esto no es posible, el desarrollador puede crear manualmente un gráfico de filtro a partir de un archivo fuente, posiblemente agregando un filtro personalizado, y luego dejar que DirectShow complete el gráfico de filtro conectando los filtros entre sí. En el siguiente nivel, el desarrollador debe crear el gráfico de filtros desde cero agregando y conectando manualmente cada filtro deseado. Finalmente, en los casos en los que un filtro esencial no esté disponible, el desarrollador debe crear un filtro personalizado antes de poder crear un gráfico de filtro. [ cita necesaria ]
A diferencia de la API C principal de QuickTime, donde es necesario llamar a MoviesTask en un bucle para cargar un archivo multimedia, DirectShow maneja todo esto de forma transparente. Crea varios subprocesos en segundo plano que reproducen sin problemas el archivo o URL solicitado sin necesidad de mucho trabajo por parte del programador. [ cita necesaria ] Además, a diferencia de QuickTime, no se requiere nada especial para cargar una URL en lugar de un archivo local en el disco: el gráfico de filtro de DirectShow abstrae estos detalles del programador, aunque los desarrollos recientes en QuickTime (incluido un control ActiveX ) han reducido esto. disparidad. [ cita necesaria ]
DirectShow Editing Services (DES), introducido en DirectX 8.0/ Windows XP , es una API dirigida a tareas de edición de video y construida sobre la arquitectura principal de DirectShow. Los servicios de edición DirectShow se introdujeron para Windows Movie Maker de Microsoft . [1] Incluye API para servicios de cambio y línea de tiempo, cambio de tamaño, recorte, efectos de video y audio, así como transiciones, incrustación , conversión automática de frecuencia de cuadros y frecuencia de muestreo y otras características que se utilizan en la edición de video no lineal que permite la creación. de medios compuestos a partir de una serie de flujos de audio y vídeo de origen. Los servicios de edición de DirectShow permiten la composición en tiempo de ejecución de nivel superior, la búsqueda de soporte y la gestión de gráficos, al mismo tiempo que permiten que las aplicaciones accedan a funciones de DirectShow de nivel inferior.
Si bien la API original está en C++, se puede acceder a DirectShow Editing Services en cualquier lenguaje compatible con Microsoft .NET, incluidos Microsoft Visual C# y Microsoft Visual Basic , mediante el uso de una biblioteca de códigos de terceros llamada "Biblioteca DirectShowNet". [32] Alternativamente, se puede acceder a toda la API de DirectShow, incluidos los servicios de edición de DirectShow, desde Borland Delphi 5, 6 y 7, C++ Builder 6 y desde versiones posteriores con algunas modificaciones menores, utilizando una biblioteca de software de terceros llamada "DSPack ". [33]
En marzo de 2012 [34] (y, aparentemente, ya en 2009 [35] ), Microsoft ha declarado que los servicios de edición de DirectShow "la API no es compatible y puede modificarse o no estar disponible en el futuro".
Originalmente, en Windows 9x , DirectShow usaba el filtro Video Renderer . Esto dibujó las imágenes usando DirectDraw 3, pero también podría recurrir a GDI o modos de dibujo superpuestos en algunas circunstancias (dependiendo de la visibilidad de la ventana de video y las capacidades de la tarjeta de video). [14] [36] Tenía acceso limitado a la ventana de vídeo. [ cita necesaria ] El video para Windows había estado plagado de interbloqueos causados por el manejo incorrecto de las ventanas de video por parte de las aplicaciones, por lo que en las primeras versiones de DirectShow, el identificador de la ventana de reproducción estaba oculto a las aplicaciones. Tampoco había una forma confiable de dibujar textos de subtítulos o gráficos encima del video. [ cita necesaria ]
DirectShow 6.0, lanzado como parte de DirectX Media, introdujo el renderizador Overlay Mixer diseñado para reproducción de DVD y transmisiones de video con subtítulos y subtítulos . [ cita necesaria ] Overlay Mixer utiliza DirectDraw 5 para renderizar. [14] Se requiere una conexión descendente con Video Renderer para la administración de ventanas. [ cita necesaria ] Overlay Mixer también admite extensiones de puerto de video (VPE), lo que le permite funcionar con sintonizadores de TV analógicos con capacidad de superposición (enviando video directamente a una tarjeta de video a través de un enlace analógico en lugar de a través del bus PCI ). Overlay Mixer también admite conexiones DXVA . [ cita necesaria ] Debido a que siempre se muestra en superposición , el video de pantalla completa para salida de TV siempre está activado.
A partir de Windows XP , se introdujo un nuevo filtro llamado Video Mixing Renderer 7 ( VMR-7 o, a veces, simplemente VMR ). El número 7 se debió a que VMR-7 solo usó DirectDraw versión 7 para renderizar el video y no tenía la opción de usar dibujo GDI. La principal característica nueva de VMR-7 fue la capacidad de mezclar múltiples transmisiones y gráficos con combinación alfa, lo que permite que las aplicaciones dibujen texto y gráficos sobre el video y admitan efectos personalizados. [37] También presentaba un "modo sin ventanas" (acceso a la imagen compuesta antes de ser renderizada) que solucionaba los problemas con el acceso al identificador de la ventana. [38]
DirectX 9 introdujo VMR-9 , que se incluye en Windows XP SP2 y versiones posteriores. [39] Esta versión utiliza Direct3D 9 en lugar de DirectDraw, lo que permite a los desarrolladores transformar imágenes de vídeo utilizando los sombreadores de píxeles de Direct3D. [40] Está disponible para todas las plataformas Windows como parte del redistribuible DirectX 9. [ cita necesaria ] Como VMR-7 , proporciona un modo sin ventanas. Sin embargo, a diferencia del mezclador Overlay o VMR-7 , no admite puertos de vídeo. [41] El uso de la opción de arranque /3GB puede provocar que VMR-9 falle. [42]
Windows Vista y Windows 7 vienen con un nuevo renderizador, disponible como componente Media Foundation y como filtro DirectShow, llamado Enhanced Video Renderer ( EVR ). [43] EVR está diseñado para funcionar con Desktop Window Manager y es compatible con DXVA 2.0 , que está disponible en Windows Vista y Windows 7. [44] [ cita necesaria ] Ofrece mejor rendimiento y mejor calidad según Microsoft. [45]
El 8 de enero de 2007, Microsoft recibió el premio Emmy por arquitecturas y componentes de medios de transmisión en la 58ª edición anual de los premios Emmy de tecnología e ingeniería . [46]
Ordenar a DirectShow que reproduzca un archivo es una tarea relativamente sencilla. Sin embargo, al programar personalizaciones más avanzadas, como ordenar a DirectShow que muestre ciertos mensajes de Windows desde la ventana de video o crear filtros personalizados, muchos desarrolladores se quejan de dificultades. [47] [48] Se considera una de las bibliotecas/API de desarrollo más complejas de Microsoft. [49] [ cita necesaria ]
Los desarrolladores rara vez crean filtros DirectShow desde cero. Más bien, emplean clases base de DirectShow. [ cita necesaria ] Las clases base a menudo pueden simplificar el desarrollo, permitiendo al programador omitir ciertas tareas. Sin embargo, el proceso puede seguir siendo relativamente complejo; [ cita necesaria ] el código que se encuentra en las clases base es casi la mitad del tamaño de toda la biblioteca MFC . [ cita necesaria ] Como resultado, incluso con las clases base, la cantidad de objetos COM que contiene DirectShow a menudo abruma a los desarrolladores. [ cita necesaria ] [ palabras de comadreja ] En algunos casos, la API de DirectShow se desvía de las reglas COM tradicionales, particularmente con respecto a los parámetros utilizados para los métodos . [ cita necesaria ] [ palabras de comadreja ] Para superar sus dificultades con las reglas COM únicas de DirectShow, los desarrolladores a menudo recurren a una API de nivel superior que usa DirectShow, en particular, Windows Media Player SDK , una API proporciona al desarrollador un control ActiveX que tiene menos COM. interfaces con las que lidiar. [ cita necesaria ] [ palabras de comadreja ]
Aunque DirectShow es capaz de crear dinámicamente un gráfico para representar un tipo de medio determinado, en ciertos casos es difícil para los desarrolladores confiar en esta funcionalidad y necesitan recurrir a la creación manual de gráficos de filtro si el gráfico de filtro resultante es variable. [ cita necesaria ] Es posible que los gráficos de filtros cambien con el tiempo a medida que se instalan nuevos filtros en la computadora. [ cita necesaria ]
El infierno de códec (un término derivado del infierno de DLL ) ocurre cuando varios filtros DirectShow entran en conflicto para realizar la misma tarea. Un gran número de empresas desarrollan ahora códecs en forma de filtros DirectShow, lo que da como resultado la presencia de varios filtros que pueden decodificar el mismo tipo de medio. [50] [51] Este problema se ve exacerbado aún más por el sistema de méritos de DirectShow, donde las implementaciones de filtros terminan compitiendo entre sí al registrarse con una prioridad cada vez más elevada. [51]
Ted Youmans de Microsoft explicó que "DirectShow se basó en el sistema de méritos, con la idea de que, usando una combinación del mérito del filtro y cuán específico es el tipo/subtipo de medio, uno podría elegir razonablemente el códec correcto cada vez. "No está realmente diseñado para una carrera armamentista nuclear por méritos competitivos". [51]
Una herramienta para ayudar en la resolución de problemas del "infierno de códecs" a los que normalmente se hace referencia es GSpot Codec Information Appliance, que puede resultar útil para determinar qué códec se utiliza para representar archivos de vídeo en AVI y otros contenedores. [52] GraphEdit también puede ayudar a comprender la secuencia de filtros que DirectShow utiliza para representar el archivo multimedia. El infierno de códecs se puede resolver creando gráficos de filtros manualmente, usando un reproductor multimedia que admita ignorar o anular los méritos de los filtros, o usando un administrador de filtros que cambie los méritos de los filtros en el Registro de Windows . [22]
DirectShow, al ser un marco y una API centrados en el desarrollador, no ofrece directamente al usuario final control sobre la codificación del contenido, ni incorpora una interfaz de usuario para codificar utilizando códecs instalados o en diferentes formatos; en cambio, depende de los desarrolladores para desarrollar software utilizando la API. Por el contrario, otros marcos multimedia como QuickTime o Video para Windows permiten a los usuarios finales realizar tareas básicas relacionadas con el vídeo, como volver a codificar utilizando un códec diferente y editar archivos y transmisiones. [ cita necesaria ] La conveniencia que ofrece una GUI para el usuario final es evidente ya que el formato AVI y los códecs utilizados por Video para Windows aún permanecen en uso, por ejemplo, VirtualDub .