¿Qué es el MP4 fragmentado?

El MP4 fragmentado divide un archivo multimedia base ISO en datos de inicialización y fragmentos multimedia que pueden entregarse por separado. Los fragmentos suelen contener metadatos moof seguidos de datos multimedia mdat.

Pistas de audio y video codificadas
Segmento de inicialización más fragmentos moof y mdat
La fragmentación traslada los metadatos de cada muestra desde un índice central a cada fragmento.

Cómo funciona el MP4 fragmentado

Un MP4 fragmentado separa la inicialización estable de las pistas de una secuencia de grupos de muestras temporizadas escritos por separado. La parte de inicialización declara las pistas y los formatos de las muestras y, en la forma que requieren HLS y Media Source Extensions, no contiene muestras, mientras que cada fragmento incluye los metadatos del grupo necesarios para localizar y asignar marcas de tiempo a su carga útil multimedia adyacente. Esto difiere de un MP4 convencional finalizado, cuyas tablas centrales de muestras describen la presentación completa. La fragmentación permite la generación incremental, la distribución segmentada y los flujos de trabajo de adición de datos en el navegador sin esperar a un índice global final. Cambia la estructura del contenedor, no el códec, y CMAF se basa en la misma estructura para que las listas de reproducción HLS y los manifiestos DASH puedan hacer referencia a un mismo conjunto de segmentos.

Datos clave

  1. Para HLS y Media Source Extensions, el segmento de inicialización es una caja ftyp seguida de una caja moov que declara pistas y descripciones de muestras, pero no contiene muestras, y una caja mvex dentro de moov indica que a continuación hay fragmentos. Después, el contenido multimedia llega en cajas moof, cada una de las cuales describe muestras cuyos bytes se encuentran en la caja o las cajas mdat posteriores.
  2. Un MP4 convencional no puede añadirse sin cambios a un SourceBuffer de Media Source Extensions: el formato de flujo de bytes ISO BMFF del W3C exige un error de adición cuando la caja moov contiene muestras o carece de mvex. Tampoco es un segmento multimedia HLS válido: el RFC 8216 exige que cada segmento utilice un formato que describa, y su único formato MP4 es el MP4 fragmentado, cuya sección de inicialización debe tener un recuento de muestras de cero y contener mvex. La fragmentación es una operación de reempaquetado, por lo que FFmpeg puede copiar flujos existentes en un archivo fragmentado sin un nuevo encoding cuando el navegador ya admite los códecs y los fotogramas clave existentes coinciden con los puntos donde deben comenzar los segmentos.
  3. Cada fragmento de pista necesita una caja tfdt que contenga su tiempo base de decodificación: HLS exige una en cada traf, y el formato de flujo de bytes de Media Source Extensions exige un error de adición si falta. Las marcas de tiempo de HLS deben continuar desde el segmento anterior, a menos que la lista de reproducción indique una discontinuidad, y la especificación HLS advierte que las discontinuidades sin marcar pueden provocar errores de reproducción. La especificación de creación de contenido de Apple establece la regla para fMP4: el tiempo de decodificación del fragmento de pista debe ser coherente con el tiempo de decodificación y la duración del segmento anterior. En Media Source Extensions, un fotograma codificado cuya marca de tiempo de decodificación sea anterior a la del fotograma previo, o posterior a ella en más del doble de la duración del último fotograma, hace que todos los búferes de pistas esperen un nuevo punto de acceso aleatorio. Tanto HLS como el formato de flujo de bytes también exigen un direccionamiento relativo al fragmento de película en lugar de desplazamientos de bytes absolutos, que FFmpeg escribe con su opción default_base_moof.
  4. Inicia los segmentos de video en un punto de acceso aleatorio. HLS indica que un segmento que contenga H.264 debería incluir un fotograma IDR y que los fotogramas anteriores al primer IDR pueden descargarse, pero descartarse; la especificación de creación de contenido de Apple exige que los segmentos de video comiencen con un fotograma IDR, y las directrices de DASH-IF sitúan un punto de acceso al flujo de tipo IDR al inicio de cada segmento para facilitar el cambio entre variantes. Después de un segmento de inicialización, un búfer de pista de Media Source Extensions descarta los fotogramas codificados hasta que llega un punto de acceso aleatorio.

Cuándo es importante el MP4 fragmentado

Los desarrolladores eligen MP4 fragmentado para segmentos HLS o DASH, para contenido multimedia añadido mediante Media Source Extensions y para grabaciones que deben seguir siendo legibles si la escritura se detiene antes de tiempo. Para un archivo único que deban abrir reproductores y editores cualesquiera, un MP4 convencional suele ser la estructura más segura: la documentación de FFmpeg señala que los archivos fragmentados son menos compatibles con otras aplicaciones.

Casos de uso comunes del MP4 fragmentado

  • Entrega HLS de video HEVC o AV1 a dispositivos Apple, para los que la especificación de creación de contenido de Apple exige fMP4; el video H.264 puede utilizar segmentos fMP4 o segmentos de flujo de transporte MPEG.
  • Un conjunto de segmentos CMAF al que hacen referencia tanto una lista de reproducción HLS como un manifiesto DASH, lo que, según Apple, permite un almacenamiento en caché eficiente al entregar contenido a varias plataformas.
  • Reproductores personalizados para navegador que añaden segmentos de inicialización y multimedia mediante Media Source Extensions.
  • Grabaciones largas o en directo: FFmpeg señala que un archivo fragmentado sigue siendo decodificable si se interrumpe la escritura y necesita menos memoria al escribir archivos muy largos.

Trabajo con MP4 fragmentado

En FFmpeg, la fragmentación es un ajuste de los multiplexores mov, mp4 y ismv, en lugar de un ajuste del codificador. La opción frag_keyframe inicia un nuevo fragmento en cada fotograma clave de video, por lo que, con esa opción, el intervalo entre fotogramas clave del codificador determina dónde comienzan los fragmentos. La copia de flujos deja pasar los paquetes sin decodificarlos ni aplicarles encoding, de modo que el video copiado conserva sus fotogramas clave existentes y cambiar su separación requiere un nuevo encoding. Las opciones independientes cmaf y dash escriben una salida fragmentada compatible con esos formatos.

En HLS, el MP4 fragmentado cambia tanto la lista de reproducción como el contenido multimedia. Cada segmento fMP4 debe tener una etiqueta EXT-X-MAP que apunte a su sección de inicialización, y utilizar esa etiqueta en una lista de reproducción multimedia convencional requiere la versión 6 del protocolo o una posterior. Apple señala que HLS definió los segmentos MPEG-4 fragmentados en septiembre de 2016 y que los clientes basados en revisiones anteriores probablemente no puedan manejar contenido CMAF.

Qué costo tiene

  • La documentación de FFmpeg describe los archivos fragmentados como menos compatibles con otras aplicaciones que los archivos MP4 convencionales e indica que su opción faststart no funciona con la salida fragmentada.
  • MDN informa que un archivo fragmentado es ligeramente más grande que el original, normalmente un 1 por ciento o menos, porque los metadatos están distribuidos por todo el archivo.

Cómo te ayuda Transloadit con el MP4 fragmentado

El Robot /video/adaptive de Transloadit documenta el valor cmaf de su parámetro technique, que produce una salida CMAF basada en FFmpeg, con manifiestos MPEG-DASH y HLS que hacen referencia a los mismos segmentos fMP4.

La documentación del Robot menciona segmentos fMP4 solo para technique: cmaf; no indica el contenedor de los segmentos para las técnicas hls o dash. También indica que la salida CMAF coloca todo el audio en un único conjunto de adaptación y remite a technique: hls con audio_group para audio en varios idiomas.

Explora los formatos de archivo y las capacidades de compresión de Transloadit

Fuentes

Convierte tus conocimientos sobre multimedia en un pipeline funcional

Conecta las subidas, el procesamiento, la IA, el almacenamiento y la entrega mediante una sola API declarativa, mientras nos encargamos por ti del stack de encoding, el escalado y los cambios constantes de formatos.

Prueba Transloadit gratis