En entregas anteriores de esta serie de blog te hemos contado todo sobre cómo nuestras soluciones ayudan a dar sentido a la calidad del video y a trabajar de forma colaborativa para mejorarla. Esta vez cambiamos el foco hacia fuera. En su lugar, compartiremos algunos conocimientos generales sobre una de las tecnologías que ayudamos a hacer más observables: el formato contenedor MP4.
¿Qué es MP4?
MP4 es un formato contenedor que permite empaquetar juntos en un solo archivo video, audio y otra información relacionada. Entre otras cosas, se usa comúnmente en servicios de streaming de video.
¿Es lo mismo que MPEG-4?
Sí y no (sobre todo no). El nombre MP4 viene del estándar MPEG-4, pero el formato contenedor es solo una parte del estándar MPEG-4 (la parte 14, para ser precisos).
El estándar MPEG-4 también contiene muchas otras partes, incluyendo especificaciones sobre cómo codificar y decodificar la parte de video del video —las imágenes en movimiento— antes de combinarlo con audio usando MP4 u otro contenedor. Este códec (especificado en la parte 10) se llama AVC o H.264, pero a menudo se denomina simplemente MPEG-4, para máxima confusión.
Así como el video codificado con MPEG-4 AVC puede encapsularse en un contenedor distinto al MP4 (como MPEG-2 Transport Stream, Matroska o Ogg), el contenedor MP4 puede encapsular contenido de video codificado con otros códecs, quizá especialmente HEVC, también conocido como H.265.
El resto de este texto trata sobre MP4, el formato contenedor especificado en MPEG-4 Parte 14, no sobre el códec de video definido en MPEG-4 Parte 10. ¿Te has perdido ya? ¿No? ¡Bien!
¿Dónde se usa y por qué?
Los archivos MP4 pueden usarse para almacenar o hacer streaming de contenido audiovisual completo en un único archivo. Como puede dividirse fácilmente en piezas más pequeñas, se utiliza ampliamente en servicios de streaming de video basados en tecnologías de bitrate adaptativo como Smooth Streaming, MPEG-DASH y HLS.
La tecnología HLS de Apple entró pronto en juego y al principio usó Transport Streams MPEG-2 como formato contenedor. Este es el formato utilizado en la distribución IPTV, cable, terrestre y satélite. Funciona bien, pero tiene cierto overhead innecesario para acomodar información de programación de canales y otras cosas que simplemente no aplican al streaming de video. Con el tiempo, HLS ha evolucionado para abrazar también MP4, pero los Transport Streams todavía se usan ampliamente.
La tecnología Smooth Streaming de Microsoft se basó en MP4 desde el principio. Puede usar Transport Streams, pero rara vez se ve. MPEG-DASH, en un intento de crear un estándar que los abarcara a todos, también soporta tanto MP4 como Transport Streams MPEG-2, pero MP4 ha sido siempre el favorito de facto.
Historia: de QuickTime a una extensión de ISO BMFF
El formato contenedor MP4 se basa en gran medida en el formato de archivo de QuickTime. Si ese nombre te suena, puede que tengas la edad de quien escribe esto. Si no, niños, déjenme contarles una historia sobre cómo era el video por internet a mediados de los 90.
Un clip corto, de calidad mediocre, tardaba horas o días en descargarse (siempre que nadie levantara el teléfono en el ínterin; no preguntes), y luego había que descargar un reproductor de video que soportara el formato del archivo, nada de soporte mágico integrado en el navegador. A menudo, ese reproductor era QuickTime, otra tecnología de Apple. Y el formato nativo de archivo de ese reproductor es el que se usó como base para el contenedor MP4 estandarizado.
Posteriormente, las partes centrales del formato contenedor MP4 se separaron en el ISO base media file format (ISO BMFF), y MP4 quedó redefinido como una extensión de la especificación ISO BMFF.
¿Cómo está estructurado?
Conceptualmente, el formato se organiza en una serie de boxes, que pueden, a su vez, contener otros boxes. Qué tipos de boxes existen, qué información pueden contener y dónde pueden aparecer en la jerarquía de boxes está claramente definido. Cada tipo de box tiene un identificador de cuatro caracteres.

En el nivel superior, un archivo MP4 consta de:
- un box ftyp (file type), que se identifica a sí mismo como MP4 y proporciona información adicional de compatibilidad,
- un box moov (movie), que contiene metadatos organizados en una estructura anidada de otros boxes, y
- un box mdat (media data), que contiene el payload de audio/video.
MP4 fragmentado
La capacidad de dividir una película o un stream en vivo en piezas más pequeñas —llamadas fragmentos, segmentos o chunks— es clave en aplicaciones de streaming. En lugar de esperar a que se descargue un archivo MP4 completo, queremos descargar no más de unos pocos segundos a la vez, para poder reproducir y descargar simultáneamente.
A medida que cambian las condiciones de la red, también queremos poder cambiar sin interrupciones entre distintas versiones del stream con mayor o menor resolución o más o menos compresión. Esto es lo que hace adaptativo al streaming de bitrate adaptativo. Cuanto más cortos sean los segmentos, más rápido podremos adaptarnos.
Un stream MP4 fragmentado consta de un segmento de inicialización y una secuencia de segmentos de medios. El segmento de inicialización es similar al inicio de un archivo no fragmentado: consta de un box ftyp y un box moov. El box moov contiene información adicional para indicar que el stream está fragmentado, incluyendo un box mvex (movie extends).
Los segmentos de medios constan de un box moof (movie fragment), que contiene metadatos solo de ese fragmento, y un box mdat, que contiene una parte del payload de audio/video. También pueden tener un box styp al inicio, que es como ftyp pero para un segmento. En un stream codificado correctamente, cada segmento de medios puede decodificarse y reproducirse sin necesidad de información de ningún segmento anterior, salvo del segmento de inicialización.

¿Qué hay del cifrado?
Como a los proveedores de contenido y a los servicios de streaming les gusta ganar dinero, normalmente se utiliza cifrado para controlar quién puede reproducir un archivo de video y cómo. A esto también se le llama Digital Rights Management (DRM).
El método más común y estandarizado para el cifrado del contenido encapsulado en MP4 se llama Common Encryption. Al usar Common Encryption, el cifrado se aplica solo al payload mdat. Los metadatos permanecen sin cifrar.
También se añade información a los metadatos para señalizar que el contenido está cifrado y cómo. Esta información incluye los IDs de las claves necesarias para descifrar el contenido.
Cómo usar los IDs de las claves para obtener las claves reales depende de la solución DRM específica utilizada, pero este es el único aspecto específico del proveedor. Qué algoritmos de cifrado usar y a qué aplicarlos está todo estandarizado.
¿Qué podría salir mal?
Los Transport Streams MPEG-2 necesitan transportar muchos checksums y contadores porque, en la distribución IPTV tradicional, se envían usando UDP, que es un protocolo de mejor esfuerzo. Básicamente, un servidor dispara un montón de paquetes hacia tu decodificador y, con suerte, llegan intactos y en orden.
MP4, en cambio, necesita menos mecanismos propios para verificar la integridad de los datos, ya que los servicios de streaming basados en HTTP usan TCP, que tiene comunicación bidireccional para garantizar que los paquetes lleguen en buen estado. Por eso, el monitoreo del transporte en las CDN para servicios de streaming se centra más en asegurar que el contenido llegue a tiempo que en buscar corrupción de datos en tránsito.
Pero aún quedan muchas cosas que verificar a nivel del contenedor MP4, principalmente problemas introducidos durante el packaging. Esto incluye la estructura de los boxes así como su contenido, y va más allá de validar la conformidad con las especificaciones.
Para dar solo un ejemplo, las fluctuaciones en los valores de duración de los boxes trun (track fragment run) —que residen en el box traf dentro del box moof de los segmentos de medios— pueden técnicamente estar permitidas, pero normalmente no deberían esperarse en contenido bien codificado. Si aparecen, puede ser el resultado de fallos del codificador que producen tasas de fotogramas desiguales y artefactos visuales, y es una de las muchas cosas que vale la pena monitorear.
Por supuesto, el Analyzer OTT puede hacerlo, pero, de nuevo, este no es un post sobre lo fantásticas que son nuestras soluciones, aunque lo sean.
Sobre Alexander Nordström
Alex es Product Manager y Solution Architect, y está en Agama desde 2009. Cuenta que el mejor aspecto de su rol son las diversas interacciones con los clientes y con todas las partes del equipo de Agama.
