Media Foundation: conceptos esenciales
Si no está familiarizado con los medios digitales, en este tema se presentan algunos conceptos que deberá comprender antes de escribir una aplicación de Media Foundation.
Una secuencia de datos multimedia es una secuencia de datos multimedia con un tipo uniforme. Los tipos más comunes son audio y vídeo, pero una secuencia puede contener casi cualquier tipo de datos, incluidos texto, comandos de script e imágenes fijas. El término stream de esta documentación no implica la entrega a través de una red. Un archivo multimedia destinado a la reproducción local también contiene secuencias.
Normalmente, un archivo multimedia contiene una sola secuencia de audio o exactamente una secuencia de vídeo y una secuencia de audio. Sin embargo, un archivo multimedia puede contener varias secuencias del mismo tipo. Por ejemplo, un archivo de vídeo podría contener secuencias de audio en varios idiomas diferentes. En tiempo de ejecución, la aplicación seleccionaría la secuencia que se va a usar.
La compresión hace referencia a cualquier proceso que reduzca el tamaño de un flujo de datos mediante la eliminación de información redundante. Los algoritmos de compresión se dividen en dos categorías generales:
- Compresión sin pérdida . Con un algoritmo sin pérdida, los datos reconstruidos son idénticos al original.
- Compresión perdida . Con un algoritmo de pérdida, los datos reconstruidos son una aproximación del original, pero no es una coincidencia exacta.
En la mayoría de los demás dominios, la compresión perdida no es aceptable. (Imagine recuperar una "aproximación" de una hoja de cálculo). Pero los esquemas de compresión de pérdida son adecuados para audio y vídeo, por un par de razones.
La primera razón tiene que ver con la física de la percepción humana. Cuando escuchamos un sonido complejo, como una grabación de música, parte de la información contenida en ese sonido no es perceptible para el oído. Con la ayuda de la teoría del procesamiento de señales, es posible analizar y separar las frecuencias que no se pueden percibir. Estas frecuencias se pueden quitar sin efecto perceptual. Aunque el audio reconstruido no coincidirá exactamente con el original, suena igual al agente de escucha. Se aplican principios similares al vídeo.
En segundo lugar, una degradación en la calidad de sonido o imagen puede ser aceptable, dependiendo del propósito previsto. Por ejemplo, en la telefonía, el audio suele ser muy comprimido. El resultado es lo suficientemente bueno para una conversación telefónica, pero no querrá escuchar una orquesta sinfónica por teléfono.
La compresión también se denomina codificación y un dispositivo que codifica se denomina codificador. El proceso inverso está descodificador y el dispositivo es un descodificador de forma natural. El término general para codificadores y descodificadores es códec. Los códecs se pueden implementar en hardware o software.
La tecnología de compresión ha cambiado rápidamente desde la llegada de los medios digitales, y un gran número de esquemas de compresión están en uso hoy en día. Este hecho es uno de los principales desafíos para la programación de medios digitales.
Es raro almacenar una secuencia de audio o vídeo sin procesar como un archivo de equipo o enviar una directamente a través de la red. Por una cosa, sería imposible descodificar dicha secuencia, sin saber con antelación qué códec usar. Por lo tanto, los archivos multimedia normalmente contienen al menos algunos de los siguientes elementos:
- Encabezados de archivo que describen el número de secuencias, el formato de cada secuencia, etc.
- Índice que permite el acceso aleatorio al contenido.
- Metadatos que describen el contenido (por ejemplo, el artista o el título).
- Encabezados de paquete, para habilitar la transmisión de red o el acceso aleatorio.
En esta documentación se usa el término contenedor para describir todo el paquete de secuencias, encabezados, índices, metadatos, etc. La razón para usar el término contenedor en lugar de archivo es que algunos formatos de contenedor están diseñados para la difusión en vivo. Una aplicación podría generar el contenedor en tiempo real, nunca almacenarlo en un archivo.
Un ejemplo temprano de un contenedor multimedia es el formato de archivo AVI. Otros ejemplos son MP4 y Advanced Systems Format (ASF). Los contenedores se pueden identificar por extensión de nombre de archivo (por ejemplo, .mp4) o por tipo MIME.
En el diagrama siguiente se muestra una estructura típica para un contenedor multimedia. El diagrama no representa ningún formato específico; los detalles de cada formato varían ampliamente.
Observe que la estructura que se muestra en el diagrama es jerárquica, con información de encabezado que aparece al principio del contenedor. Esta estructura es típica de muchos formatos de contenedor (pero no todos). Observe también que la sección de datos contiene paquetes de audio y vídeo intercalados. Este tipo de intercalación es común en los contenedores multimedia.
El término multiplexación hace referencia al proceso de empaquetar las secuencias de audio y vídeo e intercalar los paquetes en el contenedor. El proceso inverso, ensamblando las secuencias de los datos paquetes, se denomina desmultiplexing.
En los medios digitales, el formato del término es ambiguo. Un formato puede hacer referencia al tipo de codificación, como el vídeo H.264 o el contenedor, como MP4. Esta distinción suele resultar confusa para los usuarios normales. Los nombres proporcionados a los formatos multimedia no siempre ayudan. Por ejemplo, MP3 hace referencia a un formato de codificación (MPEG-1 Audio Layer 3) y a un formato de archivo.
Sin embargo, la distinción es importante, ya que la lectura de un archivo multimedia implica realmente dos fases:
- En primer lugar, se debe analizar el contenedor. En la mayoría de los casos, el número de secuencias y el formato de cada secuencia no se pueden conocer hasta que se complete este paso.
- A continuación, si las secuencias están comprimidas, deben descodificarse mediante los descodificadores adecuados.
Este hecho conduce de forma natural a un diseño de software en el que se usan componentes independientes para analizar contenedores y descodificar secuencias. Además, este enfoque se presta a un modelo de complemento, para que terceros puedan proporcionar sus propios analizadores y códecs. En Windows, el modelo de objetos componentes (COM) proporciona una manera estándar de separar una API de su implementación, que es un requisito para cualquier modelo de complemento. Por este motivo (entre otros), Media Foundation usa interfaces COM.
En el diagrama siguiente se muestran los componentes usados para leer un archivo multimedia:
La escritura de un archivo multimedia también requiere dos pasos:
- Codificación de los datos de audio y vídeo sin comprimir.
- Colocación de los datos comprimidos en un formato de contenedor determinado.
En el diagrama siguiente se muestran los componentes usados para escribir un archivo multimedia: