Qu’est-ce que M3U8 ?

M3U8 est la forme UTF-8 du format de liste de lecture multimédia M3U et est largement utilisé pour les manifestes HTTP Live Streaming. Ses entrées textuelles peuvent décrire des variantes, des segments, des clés et des métadonnées de plages de dates.

Liste de lecture multivariante : flux de variantes et variantes multimédias
Segments multimédias et clés récupérés par URI
Un client HLS suit les URI depuis la liste de lecture multivariante vers la liste de lecture multimédia de chaque variante multimédia sélectionnée pour la lecture, par exemple la vidéo et l’audio séparés, puis vers les segments multimédias de ces variantes multimédias.

Comment fonctionne M3U8

Un document M3U8 est un fichier texte UTF-8 organisé par lignes. Chaque ligne est une URI, est vide ou commence par # ; les lignes commençant par #EXT sont des balises et les autres lignes commençant par # sont des commentaires. En HLS, une liste de lecture multivariante annonce les flux de variantes et les variantes multimédias alternatives, tandis qu’une liste de lecture multimédia énumère les segments multimédias d’une variante multimédia. Les clients passent d’une variante à l’autre selon les conditions réseau et rechargent périodiquement une liste de lecture multimédia, sauf si celle-ci déclare qu’elle ne changera pas, comme décrit ci-dessous. Les outils de conditionnement écrivent ces listes de lecture après l’encodage et la segmentation du contenu multimédia.

Points clés

  1. #EXTM3U doit être la première ligne de chaque liste de lecture HLS. Certaines balises, telles que #EXT-X-VERSION et #EXT-X-TARGETDURATION, s’appliquent à toute la liste de lecture, tandis que les balises de segments multimédias se rapportent à ce qui les suit : #EXTINF est obligatoire pour chaque segment multimédia et s’applique uniquement à l’URI du segment suivant, et certaines autres balises s’appliquent à tous les segments suivants jusqu’à une autre occurrence de la même balise. Déplacer, supprimer ou insérer des lignes de balises et d’URI peut donc changer le sens, même si le résultat reste un texte valide.
  2. Une liste de lecture est de l’un des deux types, jamais des deux. Une liste de lecture multivariante, appelée liste de lecture principale dans la RFC 8216, décrit les flux de variantes et pointe vers d’autres listes de lecture ; une liste de lecture multimédia énumère les segments d’une variante multimédia dans l’ordre de lecture. La RFC 8216 exige que les clients rejettent l’analyse d’une liste de lecture qui mélange des balises de segments multimédias et des balises de liste de lecture principale.
  3. Les URI relatives sont résolues par rapport à l’URI de la liste de lecture qui les contient ; déplacer une liste de lecture peut donc modifier leur destination. Conservez la même organisation relative des fichiers référencés ou mettez les URI à jour. Selon les règles standard de résolution des URI, une référence relative possédant son propre chemin n’hérite pas de la chaîne de requête de l’URI de base. Un jeton ou une signature dans la chaîne de requête de l’URL de la liste de lecture n’est donc pas transmis aux requêtes de segments, de clés ou de listes de lecture enfants, et un mécanisme d’URL signées doit signer chaque URI référencée ou autoriser ces requêtes autrement.
  4. Nommez ou servez une liste de lecture de façon à ce que les clients l’acceptent. La RFC 8216 exige qu’une liste de lecture HLS soit identifiable soit par un chemin d’URI se terminant par .m3u8 ou .m3u, soit par le Content-Type HTTP application/vnd.apple.mpegurl ou audio/mpegurl, et indique que les clients devraient refuser les listes de lecture qui ne sont identifiées d’aucune de ces façons. Le texte doit être en UTF-8 sans indicateur d’ordre des octets ; les clients devraient rejeter l’analyse d’une liste de lecture qui en contient un.

Quand M3U8 est utile

M3U8 est pertinent dès que vous générez, hébergez ou ingérez du HLS. Le producteur doit respecter l’ordre des balises, les durées et les URI pour que la liste de lecture soit valide, et l’hébergeur doit maintenir chaque URI qu’elle contient accessible, quel que soit l’endroit depuis lequel la liste de lecture est servie. Traitez une liste de lecture provenant d’une source non fiable comme une liste d’instructions de récupération : la RFC 8216 indique que les clients effectueront des requêtes réseau vers toutes les destinations désignées par ses URI, et le démultiplexeur HLS de FFmpeg limite par défaut les extensions de fichier qu’une liste de lecture peut référencer.

Travailler avec M3U8

La RFC 8216 exige que les clients rechargent périodiquement une liste de lecture multimédia, sauf si celle-ci déclare #EXT-X-PLAYLIST-TYPE:VOD, ou #EXT-X-PLAYLIST-TYPE:EVENT avec #EXT-X-ENDLIST. Tant qu’une liste de lecture multimédia ne contient pas #EXT-X-ENDLIST, le serveur doit publier une nouvelle version avec au moins un nouveau segment entre 0,5 et 1,5 fois la durée cible après la version précédente. Ajoutez #EXT-X-ENDLIST une fois le dernier segment répertorié, et utilisez #EXT-X-PLAYLIST-TYPE:VOD pour déclarer que la liste de lecture ne peut pas changer. Une liste de lecture qui s’allonge évolue à une URL fixe, tandis que ses segments restent inchangés ; c’est cette propriété qui doit guider la conception de la mise en cache.

Comment Transloadit facilite l’utilisation de M3U8

Le Robot /video/adaptive de Transloadit génère des fichiers de listes de lecture M3U8 avec les segments multimédias lorsque son paramètre technique vaut hls, et une liste de lecture HLS à côté du manifeste MPEG-DASH lorsqu’il vaut cmaf.

La documentation du Robot indique que ses fichiers de résultat contiennent une propriété de métadonnées relative_path et que le chemin de stockage devrait être construit à partir de celle-ci pour que les fichiers de listes de lecture continuent de fonctionner, ce qui met en pratique la règle des URI relatives ci-dessus. Elle répertorie également les en-têtes de réponse CORS à configurer pour les lecteurs de navigateur qui récupèrent les listes de lecture et les segments depuis une autre origine.

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