Qu’est-ce que le MP4 fragmenté ?

Le MP4 fragmenté divise un fichier au format ISO de base pour les médias en données d’initialisation et en fragments multimédias pouvant être distribués séparément. Les fragments contiennent généralement des métadonnées moof suivies de données multimédias mdat.

Pistes audio et vidéo encodées
Segment d’initialisation et fragments moof et mdat
La fragmentation déplace les métadonnées de chaque échantillon d’un index central vers le fragment correspondant.

Fonctionnement du MP4 fragmenté

Un MP4 fragmenté sépare les données stables d’initialisation des pistes d’une succession de séries d’échantillons horodatés écrites séparément. La partie d’initialisation déclare les pistes et les formats d’échantillons et, sous la forme exigée par HLS et Media Source Extensions, ne contient aucun échantillon. Chaque fragment transporte les métadonnées de série nécessaires pour localiser et horodater sa charge utile multimédia adjacente. Cela diffère d’un MP4 classique finalisé, dont les tables centrales d’échantillons décrivent la présentation complète. La fragmentation permet la génération incrémentale, la distribution segmentée et les traitements par ajout dans le navigateur sans attendre un index global final. Elle modifie l’organisation du conteneur, pas le codec, et CMAF repose sur la même organisation pour que les listes de lecture HLS et les manifestes DASH puissent référencer un même ensemble de segments.

Points clés

  1. Pour HLS et Media Source Extensions, le segment d’initialisation est une boîte ftyp suivie d’une boîte moov qui déclare les pistes et les descriptions d’échantillons, mais ne contient aucun échantillon. Une boîte mvex située dans moov signale que des fragments suivent. Les médias arrivent ensuite sous forme de boîtes moof, chacune décrivant des échantillons dont les octets se trouvent dans la ou les boîtes mdat qui la suivent.
  2. Un MP4 classique ne peut pas être ajouté tel quel à un objet SourceBuffer de Media Source Extensions : le format de flux d’octets ISO BMFF du W3C exige une erreur d’ajout lorsque la boîte moov contient des échantillons ou ne contient pas mvex. Ce n’est pas non plus un segment multimédia HLS valide : la RFC 8216 exige que chaque segment utilise un format qu’elle décrit, et son seul format MP4 est le MP4 fragmenté, dont la section d’initialisation doit avoir un nombre d’échantillons égal à zéro et contenir mvex. La fragmentation est une opération de reconditionnement. FFmpeg peut donc copier les flux existants dans un fichier fragmenté sans réencodage lorsque le navigateur prend déjà en charge les codecs et que les images clés existantes se trouvent aux endroits où les segments doivent commencer.
  3. Chaque fragment de piste doit contenir une boîte tfdt portant son temps de décodage de base : HLS en exige une dans chaque traf, et le format de flux d’octets de Media Source Extensions exige une erreur d’ajout en son absence. Les horodatages HLS doivent prolonger ceux du segment précédent, sauf si la liste de lecture signale une discontinuité, et la spécification HLS avertit que les discontinuités non signalées peuvent provoquer des erreurs de lecture. La spécification de création d’Apple énonce la règle pour fMP4 : le temps de décodage du fragment de piste doit être cohérent avec le temps de décodage et la durée du segment précédent. Dans Media Source Extensions, une image codée dont l’horodatage de décodage précède celui de l’image précédente, ou le suit de plus du double de la durée de la dernière image, oblige chaque tampon de piste à attendre un nouveau point d’accès aléatoire. HLS et le format de flux d’octets exigent également tous deux un adressage relatif au fragment de présentation plutôt que des décalages absolus en octets, ce que FFmpeg écrit avec son indicateur default_base_moof.
  4. Faites commencer les segments vidéo à un point d’accès aléatoire. HLS indique qu’un segment contenant du H.264 devrait inclure une image IDR et que les images précédant la première IDR peuvent être téléchargées, mais écartées ; la spécification de création d’Apple exige que les segments vidéo commencent par une image IDR, et les recommandations DASH-IF placent un point d’accès au flux de type IDR au début de chaque segment pour faciliter le changement de variante. Après un segment d’initialisation, un tampon de piste Media Source Extensions écarte les images codées jusqu’à l’arrivée d’un point d’accès aléatoire.

Quand le MP4 fragmenté est important

Les développeurs choisissent le MP4 fragmenté pour les segments HLS ou DASH, les médias ajoutés au moyen de Media Source Extensions et les enregistrements qui doivent rester lisibles si l’écriture s’arrête prématurément. Pour un fichier unique que des lecteurs et des logiciels de montage quelconques doivent pouvoir ouvrir, un MP4 classique constitue généralement l’organisation la plus sûre : la documentation de FFmpeg précise que les fichiers fragmentés sont moins compatibles avec les autres applications.

Cas d’usage courants du MP4 fragmenté

  • Distribution HLS de vidéos HEVC ou AV1 aux appareils Apple, pour laquelle la spécification de création d’Apple exige fMP4 ; les vidéos H.264 peuvent utiliser des segments fMP4 ou des segments de flux de transport MPEG.
  • Un même ensemble de segments CMAF référencé à la fois par une liste de lecture HLS et un manifeste DASH, ce qui, selon Apple, permet une mise en cache efficace lors de la distribution sur plusieurs plateformes.
  • Lecteurs personnalisés pour navigateur qui ajoutent des segments d’initialisation et des segments multimédias au moyen de Media Source Extensions.
  • Enregistrements longs ou en direct : FFmpeg précise qu’un fichier fragmenté reste décodable si l’écriture est interrompue et nécessite moins de mémoire lors de l’écriture de fichiers très longs.

Utiliser le MP4 fragmenté

Dans FFmpeg, la fragmentation est un réglage des multiplexeurs mov, mp4 et ismv, plutôt qu’un réglage de l’encodeur. L’indicateur frag_keyframe commence un nouveau fragment à chaque image clé vidéo. Avec cet indicateur, l’intervalle entre les images clés de l’encodeur détermine donc où commencent les fragments. La copie de flux transmet les paquets sans les décoder ni les encoder. Une vidéo copiée conserve donc ses images clés existantes, et modifier leur espacement exige un réencodage. Les indicateurs distincts cmaf et dash produisent une sortie fragmentée compatible avec ces formats.

Dans HLS, le MP4 fragmenté modifie aussi bien la liste de lecture que les médias. Chaque segment fMP4 doit avoir une balise EXT-X-MAP qui pointe vers sa section d’initialisation, et l’utilisation de cette balise dans une liste de lecture multimédia classique exige la version 6 du protocole ou une version ultérieure. Apple précise que HLS a défini les segments MPEG-4 fragmentés en septembre 2016 et que les clients fondés sur des révisions antérieures ne pourront probablement pas gérer le contenu CMAF.

Ce que cela coûte

  • La documentation de FFmpeg décrit les fichiers fragmentés comme moins compatibles avec les autres applications que les fichiers MP4 classiques et indique que son option faststart ne fonctionne pas avec une sortie fragmentée.
  • MDN indique qu’un fichier fragmenté est légèrement plus volumineux que l’original, généralement de 1 pour cent ou moins, car les métadonnées sont réparties dans tout le fichier.

Comment Transloadit facilite l’utilisation du MP4 fragmenté

La documentation du Robot /video/adaptive de Transloadit présente la valeur cmaf pour son paramètre technique, qui produit une sortie CMAF basée sur FFmpeg, avec des manifestes MPEG-DASH et HLS référençant les mêmes segments fMP4.

La documentation du Robot ne mentionne des segments fMP4 que pour technique: cmaf ; elle ne précise pas le conteneur des segments pour les techniques hls ou dash. Elle indique également que la sortie CMAF place tout l’audio dans un seul ensemble d’adaptation et renvoie à technique: hls avec audio_group pour l’audio multilingue.

Explorer les possibilités de Transloadit en matière de formats de fichiers et de compression

Références

Transformer vos connaissances sur les médias en une chaîne de traitement opérationnelle

Reliez les téléversements, le traitement, l’IA, le stockage et la diffusion via une seule API déclarative — la pile d’encodage, la montée en charge et l’évolution constante des formats sont prises en charge pour vous.

Essayer Transloadit gratuitement