¿Qué es Common Media Application Format (CMAF)?
Common Media Application Format (CMAF) es un estándar de MPEG, ISO/IEC 23000-19, para el encoding y el empaquetado de contenido multimedia segmentado como MP4 fragmentado. Especifica la estructura de las pistas, el cifrado y los perfiles multimedia para que HLS y DASH puedan hacer referencia a los mismos objetos multimedia.
Cómo funciona Common Media Application Format (CMAF)
CMAF define objetos multimedia, no un manifiesto ni un protocolo de entrega; la presentación queda a cargo de un modelo de aplicación abstracto que implementan tanto HLS como DASH. Una pista CMAF contiene un solo tipo de contenido multimedia (video, audio o subtítulos) y consta de una cabecera CMAF, que inicializa un decodificador, seguida de fragmentos. Las versiones con distinto encoding del mismo contenido entre las que un reproductor puede alternar en los límites de los fragmentos forman un conjunto de conmutación. Los conjuntos de conmutación del mismo tipo de contenido multimedia, por ejemplo, de distintos idiomas o códecs, forman un conjunto de selección, y una presentación combina conjuntos de selección sincronizados. Para la entrega, los fragmentos se agrupan en segmentos o se dividen en bloques. Una lista de reproducción multimedia HLS enumera los segmentos de una pista y apunta a su cabecera mediante EXT-X-MAP, y un MPD de DASH puede hacer referencia a los mismos archivos.
Datos clave
- Cada pista CMAF contiene un solo tipo de contenido multimedia, por lo que el audio y el video se empaquetan y solicitan por separado. La guía de HLS de Apple indica que los segmentos CMAF no pueden, en general, contener varios tipos de contenido multimedia, que debería haber una lista de reproducción multimedia por pista CMAF y que cada segmento necesita una etiqueta
EXT-X-MAPque apunte a la cabecera CMAF de la pista. Por lo tanto, los segmentos de flujo de transporte multiplexados deben reempaquetarse, no basta con cambiarles el nombre, y un reproductor necesita la cabecera correspondiente antes de poder decodificar cualquier segmento. - Un segmento consta de uno o más fragmentos completos; un bloque es un subconjunto consecutivo de las muestras de un fragmento. Los fragmentos se pueden decodificar de forma independiente, y los reproductores cambian de variante en sus límites. Los bloques sirven para reducir la latencia: pueden publicarse antes de que el fragmento esté completo, pero DASH-IF señala que no se generan para cambiar de tasa de bits ni para el acceso aleatorio. La cadena de entrega y el reproductor también deben colaborar: la guía de baja latencia de DASH-IF exige el mecanismo de transferencia HTTP por bloques desde la recepción de datos en el empaquetador hasta el nodo de borde de la CDN y establece requisitos independientes para los clientes de baja latencia. HLS expone los bloques como segmentos parciales enumerados en la lista de reproducción y define su modo de baja latencia como el uso combinado de segmentos parciales, recarga bloqueante de la lista de reproducción e indicaciones de precarga.
- CMAF no ofrece una única copia cifrada que sirva para todos los dispositivos. Define perfiles de presentación para contenido sin cifrar, cifrado
cbcsy cifradocenc, y Apple indica que HLS solo admite contenido sin cifrar ycbcs. Microsoft documenta la compatibilidad concbcsen PlayReady a partir de la versión 4.0 del cliente, como una función opcional, mientras que los clientes anteriores se limitan acenc. Por lo tanto, una copia concbcsexcluye los dispositivos PlayReady anteriores a la versión 4.0, y una copia concencexcluye los reproductores HLS de Apple. Comprueba las versiones de los clientes DRM de tus dispositivos de destino antes de planificar una entrega cifrada con una única copia. - CMAF sobre HLS necesita reproductores que admitan MP4 fragmentado. Apple sitúa la incorporación de la compatibilidad con segmentos fMP4 a la especificación HLS en septiembre de 2016, indica que los clientes basados en revisiones anteriores probablemente no puedan manejar contenido CMAF y señala iOS 10, macOS 10.12 y tvOS 10 como las primeras versiones de Apple para las que se prevé esa compatibilidad. En cuanto a las versiones del protocolo, el borrador de HLS exige una versión de compatibilidad 6 o superior para
EXT-X-MAPen una lista de reproducción multimedia que no sea exclusivamente de fotogramas I, mientras que la documentación del multiplexor HLS de FFmpeg indica que los segmentos fMP4 pueden usarse en la versión 7 de HLS y posteriores, y describe los segmentos de flujo de transporte como compatibles con todas las versiones de HLS. La lista de Apple solo abarca sus propias plataformas, así que prueba la reproducción de fMP4 en los demás dispositivos que debas seguir admitiendo; los clientes HLS que no puedan reproducirlo siguen necesitando una variante de flujo de transporte junto con la de CMAF.
Cuándo es relevante Common Media Application Format (CMAF)
Usa CMAF cuando el mismo contenido deba llegar tanto a reproductores HLS como DASH y quieras un único conjunto de segmentos en el almacenamiento y en la caché de la CDN en lugar de dos. Solo resulta ventajoso cuando los reproductores de destino comparten compatibilidad: cada cliente debe reproducir MP4 fragmentado, decodificar los códecs elegidos y, para contenido protegido, admitir el mismo esquema de cifrado. CMAF no proporciona manifiestos, por lo que aún debes publicar una lista de reproducción HLS y un MPD de DASH que apunten a los segmentos compartidos.
Cómo ayuda Transloadit con Common Media Application Format (CMAF)
El Robot /video/adaptive de Transloadit tiene un parámetro technique con un valor cmaf, documentado como una salida CMAF basada en FFmpeg con manifiestos MPEG-DASH y HLS que hacen referencia a los mismos segmentos fMP4. Con esa técnica, playlist_name da nombre al manifiesto DASH y hls_playlist_name a la lista de reproducción maestra HLS. El Robot se utiliza normalmente después de /video/encode, que produce las variantes.
Con cmaf, la documentación indica que todo el audio se incluye en un solo conjunto de adaptación etiquetado con el primer idioma de audio y que las entradas con más de un idioma de audio conocido añaden una advertencia a la Assembly; para audio en varios idiomas, recomienda technique: "hls" con audio_group: true. La página del Robot no describe opciones de cifrado de contenido ni de bloques de baja latencia.
Explora los formatos de archivo y las capacidades de compresión de Transloadit
Fuentes
- MPEG: MPEG-A, parte 19, Common Media Application Format (CMAF) para contenido multimedia segmentado (ediciones de ISO/IEC 23000-19)
- Apple: Acerca de Common Media Application Format con HTTP Live Streaming (HLS)
- Borrador de IETF draft-pantos-hls-rfc8216bis-22: HTTP Live Streaming, edición 2 (sección 2, Descripción general; sección 3.1.2, MPEG-4 fragmentado; sección 3.2, Segmentos parciales; y sección 8, Compatibilidad de versiones del protocolo)
- Solicitud de cambio de DASH-IF para IOP v4.3: Modos de baja latencia para DASH (2020)
- Microsoft Learn: Modos de cifrado de contenido de PlayReady (compatibilidad con cenc y cbcs por versión del cliente)
- Documentación de formatos de FFmpeg: multiplexor dash, multiplexor hls (hls_segment_type) y movflag cmaf
- Incidencia #1475 de Shaka Packager: pregunta sobre el uso de distintos esquemas de protección por salida