Entrée glossaire · Format de manifeste
DASH MPD (Manifeste MPEG-DASH)
Le manifeste XML derrière le streaming adaptatif MPEG-DASH. Un fichier MPD décrit tout ce qu'un lecteur doit savoir d'une présentation : timeline, qualités, pistes audio, sous-titres et DRM.
Définition
Un fichier MPD est un document XML défini par la norme ISO/IEC 23009-1, également connue sous le nom de MPEG-DASH (Dynamic Adaptive Streaming over HTTP). Le fichier est typiquement servi avec l'extension .mpd et le type MIME application/dash+xml. Le MPD ne contient pas d'octets média. Il décrit comment un lecteur doit demander les segments média à un serveur HTTP ordinaire.
MPEG-DASH a été développé comme une alternative open standard à HLS. Le protocole a été publié en 2012 et est depuis devenu le protocole de streaming dominant sur les plateformes non-Apple. YouTube, Netflix, Amazon Prime Video et la plupart des services de streaming premium servent du contenu DASH aux clients web et Android, et servent du HLS aux clients iOS.
Structure : Period, AdaptationSet, Representation, Segment
Un MPD utilise une hiérarchie stricte à quatre niveaux. Chaque niveau exprime une préoccupation spécifique.
- Period : un segment contigu de la timeline de la présentation. La plupart des contenus VOD ont une seule Period ; les contenus avec insertion publicitaire ou en live peuvent en avoir plusieurs.
- AdaptationSet : un groupe de médias fonctionnellement interchangeables. Un AdaptationSet par vidéo, un par langue audio, un par piste de sous-titres.
- Representation : une version encodée du contenu avec des paramètres spécifiques de bande passante, résolution et codec. Le lecteur bascule entre les Representations à l'intérieur d'un AdaptationSet pour le bitrate adaptatif.
- Segment : le morceau média réel. Défini soit via un SegmentTemplate (les URLs suivent un motif), soit via une SegmentList (les URLs sont énumérées). Les segments sont généralement des fichiers MP4 fragmentés (.m4s).
Un MPD squelettique ressemble à ceci :
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" type="static"
mediaPresentationDuration="PT10M">
<Period>
<AdaptationSet mimeType="video/mp4" codecs="avc1.640028">
<Representation id="1080p" bandwidth="4500000"
width="1920" height="1080">
<SegmentTemplate media="1080p/seg-$Number$.m4s"
initialization="1080p/init.mp4"
startNumber="1" duration="6" timescale="1"/>
</Representation>
</AdaptationSet>
<AdaptationSet mimeType="audio/mp4" codecs="mp4a.40.2" lang="fr">
<Representation id="audio-fr" bandwidth="128000">
<SegmentTemplate media="audio-fr/seg-$Number$.m4s"
initialization="audio-fr/init.mp4"
startNumber="1" duration="6" timescale="1"/>
</Representation>
</AdaptationSet>
</Period>
</MPD>
Les AdaptationSets vidéo et audio sont indépendants. Le lecteur choisit une Representation dans chacun et les télécharge en parallèle, ce qui explique pourquoi le contenu DASH a des fichiers de segments vidéo et audio séparés. HLS muxait historiquement l'audio dans le même segment TS mais évolue vers des flux séparés dans les déploiements fMP4 modernes.
DASH vs HLS
Les deux protocoles résolvent le même problème. Les différences sont surtout historiques et tactiques.
- Format de manifeste : DASH utilise du XML (.mpd). HLS utilise du texte brut (.m3u8). Le XML est plus expressif ; le texte brut est plus facile à debugger à l'œil.
- Conteneur de segment : DASH utilise pratiquement toujours du MP4 fragmenté (.m4s). HLS utilisait MPEG-TS (.ts) historiquement et supporte désormais fMP4 aussi.
- Support navigateur natif : HLS se lit nativement dans Safari. DASH ne se lit nativement nulle part ; il requiert un lecteur JavaScript.
- Écosystème DRM : DASH utilise Common Encryption (CENC) avec Widevine et PlayReady. HLS utilise FairPlay sur les plateformes Apple.
- Latence live : les deux protocoles supportent des variantes basse latence (LL-DASH et LL-HLS), avec des latences sous la seconde possibles.
Si vous opérez un service de streaming aujourd'hui, la réponse réaliste est de publier les deux formats à partir d'un jeu partagé de segments fMP4 via CMAF. Les plateformes Apple récupèrent des playlists HLS ; tout le reste récupère un MPD DASH. Les mêmes segments encodés sont réutilisés.
DRM et DASH (Widevine, PlayReady)
DASH est le format de streaming de fait pour le contenu protégé par DRM sur le web ouvert parce que les principaux navigateurs embarquent Widevine. Le MPD référence le DRM via un ou plusieurs éléments ContentProtection à l'intérieur de chaque AdaptationSet :
<ContentProtection
schemeIdUri="urn:mpeg:dash:mp4protection:2011"
value="cenc"
cenc:default_KID="abcdef01-2345-6789-abcd-ef0123456789"/>
<ContentProtection
schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
<cenc:pssh>...boîte PSSH en base64...</cenc:pssh>
</ContentProtection>
Le schemeIdUri identifie le système DRM. Widevine, PlayReady et FairPlay ont chacun leur propre UUID. Le chiffrement réel est Common Encryption (CENC), ce qui signifie que les segments eux-mêmes sont des octets chiffrés indépendamment de l'écosystème DRM qui livrera la clé. Les outils grand public ne peuvent pas contourner Widevine ni PlayReady. L'échange de clé se fait dans un environnement sécurisé hardware-backed sur l'appareil.
Si un flux DASH n'est pas protégé par un DRM reconnu, les segments sont généralement du fMP4 en clair et un outil capable de lire DASH (comme yt-dlp, N_m3u8DL-RE ou Vidora) peut les télécharger et les remuxer en un MP4 unique. Notre guide approfondi sur la conversion HLS et DASH vers MP4 couvre les workflows exacts pour vidéo et audio.
Patterns de manifeste courants
Vous croiserez trois familles de manifestes DASH dans la nature.
- VOD statique avec SegmentTemplate : le manifeste définit un motif comme
seg-$Number$.m4s, le lecteur itère de 1 à N. C'est le cas le plus courant pour les vidéos courtes. - VOD statique avec SegmentTimeline : le manifeste liste les durées exactes de chaque segment. Utilisé quand les segments ne sont pas parfaitement uniformes.
- Live dynamique : le manifeste a
type="dynamic"et se rafraîchit toutes les quelques secondes. Le lecteur doit recharger le MPD périodiquement pour découvrir les nouveaux segments.
Savoir quel pattern vous rencontrez compte quand vous scriptez un téléchargeur : un MPD statique peut être entièrement résolu en une passe, tandis qu'un MPD dynamique nécessite une boucle de polling jusqu'à la fin de l'événement live. Notre analyseur DASH MPD vous indique quel pattern utilise un manifeste donné sans quitter le navigateur.