Dynamic Adaptive Streaming over HTTP (DASH) est une norme internationale de diffusion multimédia adaptative, développée par le MPEG (Moving Picture Experts Group). DASH assure la livraison de vidéo et d'audio via HTTP en utilisant une description XML du flux au format Media Presentation Description (MPD) et divise le contenu en segments de différents débits binaires. Selon le Bitmovin Video Developer Report (2025), 58% des développeurs vidéo utilisent DASH, ce qui en fait le deuxième protocole le plus populaire après HLS.
Points clés
MPEG-DASH (Dynamic Adaptive Streaming over HTTP) est une norme internationale ISO/IEC 23009-1, publiée en 2012 en réponse à la fragmentation des solutions propriétaires de streaming adaptatif. Contrairement à HLS (protocole propriétaire d'Apple) et Smooth Streaming (Microsoft), DASH a été développé dès le départ comme une norme ouverte et indépendante du fournisseur, ce qui a assuré son large soutien dans l'industrie.
La principale innovation de DASH est la séparation de la description du flux et du contenu multimédia. La description du flux est stockée dans un fichier XML appelé MPD (Media Presentation Description), qui contient toutes les informations sur les options disponibles : débits binaires, résolutions, codecs, sous-titres, pistes audio. Le contenu multimédia est stocké dans des segments individuels (généralement fMP4), qui peuvent être chargés indépendamment via HTTP. Cette architecture permet à l'infrastructure serveur d'être aussi simple que possible — tout serveur HTTP peut diffuser du contenu DASH.
L'adaptabilité de DASH est implémentée via le multiplexage de variantes de contenu. Le serveur prépare plusieurs Representations — des copies du contenu avec différents paramètres de compression. Le client analyse la bande passante du canal et bascule dynamiquement entre les représentations, choisissant l'équilibre optimal entre qualité et stabilité de lecture. Selon une étude académique (IEEE Access, 2024), DASH avec l'algorithme BOLA montre 22% de changements de débit binaire en moins par rapport à HLS sur des connexions instables.
MPEG a commencé à travailler sur DASH en 2010 après avoir analysé les solutions existantes : Apple HLS, Microsoft Smooth Streaming et Adobe HDS. La première version de la norme (ISO/IEC 23009-1:2012) est sortie en 2012. La deuxième version (2014) a ajouté la prise en charge des événements, une insertion publicitaire améliorée et une adaptation contrôlée par le serveur. La troisième version (2019) a ajouté la prise en charge du HDR, du 8K, de la vidéo haptique et une meilleure intégration avec MMT (MPEG Media Transport) pour les réseaux 5G.
En 2024, MPEG a annoncé DASH Next Generation, qui inclut la prise en charge des codecs à réseau neuronal, du rendu cloud et de l'optimisation pour les scénarios de réalité étendue (XR). Une innovation clé est le codage vidéo basé sur les réseaux neuronaux (NNVC), qui utilise des modèles de ML pour le décodage côté client, pouvant réduire le débit binaire de 30 à 50% tout en maintenant la qualité.
Le processus de lecture d'un flux DASH comprend quatre étapes séquentielles : récupération du MPD, analyse de la description du flux, sélection de la représentation initiale et commutation dynamique entre les représentations. Chaque étape a ses spécificités qui affectent la qualité de l'expérience utilisateur.
Le lecteur charge le fichier MPD depuis une URL connue. Le MPD contient une structure XML décrivant l'intégralité du flux : durée du contenu, ligne de temps, périodes disponibles (Period), ensembles d'adaptation (AdaptationSet) et représentations (Representation) avec des paramètres d'encodage spécifiques. Le lecteur analyse le MPD et crée un modèle interne des ressources multimédia disponibles.
Exemple d'un fichier MPD de base pour un contenu VOD avec deux résolutions :
<?xml version="1.0" encoding="utf-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
profiles="urn:mpeg:dash:profile:isoff-live:2011"
type="static"
mediaPresentationDuration="PT1H30M">
<Period duration="PT1H30M">
<AdaptationSet mimeType="video/mp4">
<Representation bandwidth="5000000"
width="1920" height="1080"
codecs="avc1.640028"/>
<Representation bandwidth="1000000"
width="640" height="360"
codecs="avc1.64001E"/>
</AdaptationSet>
</Period>
</MPD>
Après avoir sélectionné la représentation initiale, le lecteur commence à charger les segments. Chaque segment contient plusieurs secondes de contenu (généralement 2 à 10 secondes). Le lecteur maintient un tampon de plusieurs segments d'avance, assurant une résistance aux baisses de courte durée de la vitesse du réseau. L'algorithme ABR (Adaptive Bitrate) surveille en permanence la vitesse de téléchargement des segments et décide de basculer entre les débits binaires disponibles.
Les algorithmes ABR modernes pour DASH, tels que BOLA (Buffer Occupancy based Lyapunov Algorithm) et Pensieve (basé sur l'apprentissage par renforcement), prennent en compte non seulement la bande passante actuelle, mais aussi la taille du tampon, le type de contenu (sport, actualités, films) et même la consommation d'énergie de l'appareil. BOLA, qui fait partie de dash.js et d'ExoPlayer, minimise le nombre de changements de débit binaire tout en maintenant un tampon stable, comme confirmé par la recherche ACM (Spiteri et al., 2020).
La structure hiérarchique d'un flux DASH est organisée en quatre niveaux : MPD → Period → AdaptationSet → Representation. Chaque niveau ajoute une couche de détail, permettant de décrire des scénarios complexes — du simple VOD aux diffusions en direct avec insertion publicitaire et vidéo multi-angle.
MPD est l'élément racine décrivant l'ensemble de la présentation multimédia. Les attributs MPD définissent le type de flux (static pour VOD, dynamic pour live), la durée totale, la ligne de temps, le profil et les informations DRM. Le MPD peut contenir une ou plusieurs Periods, chacune représentant un segment temporel indépendant du contenu.
Period est un segment temporel de la présentation. Pour VOD, une seule Period est utilisée pour tout le contenu. Pour le live avec pauses publicitaires, la Period peut changer dynamiquement — le lecteur charge le MPD mis à jour et détecte une nouvelle Period correspondant au bloc publicitaire. Chaque Period contient un ou plusieurs AdaptationSets.
AdaptationSet est un groupe de représentations interchangeables d'un type de média : vidéo, audio, sous-titres. Au sein d'un AdaptationSet, toutes les représentations diffèrent uniquement par le débit binaire et/ou la résolution, mais encodent le même contenu. Une propriété importante : le lecteur peut basculer entre les représentations au sein du même AdaptationSet aux limites des segments sans interruption de la lecture.
Representation est une variante d'encodage spécifique avec un débit binaire, une résolution et un codec définis. Pour chaque Representation, le MPD spécifie un modèle d'URL pour charger les segments. DASH utilise un système d'adressage de segments flexible — via des modèles d'URL avec substitution du numéro de segment et du temps ($Number$, $Time$), permettant au serveur de générer dynamiquement des noms de fichiers sans avoir à lister chaque segment dans le MPD.
Les segments dans DASH peuvent être de deux types : type Segment (contient uniquement des données média) et type Subsegment (partie d'un segment pour un accès plus granulaire). Pour encoder du contenu DASH, des outils comme FFmpeg ou des encodeurs par lots sont utilisés. Exemple de création d'un flux DASH à partir d'un fichier d'entrée :
import subprocess
subprocess.run([
"ffmpeg",
"-i", "input.mp4",
"-filter_complex",
"[0:v]split=2[v1][v2];[v1]scale=1920:1080[v1out];[v2]scale=640:360[v2out]",
"-map", "[v1out]", "-b:v:0", "5000k",
"-map", "[v2out]", "-b:v:1", "1000k",
"-map", "0:a",
"-f", "dash",
"-seg_duration", "4",
"-use_template", "1",
"-use_timeline", "1",
"dash/stream.mpd"
])
Le choix entre DASH et HLS est l'une des décisions clés lors de la conception d'un système de streaming vidéo. Les deux protocoles résolvent le même problème (livraison adaptative de vidéo sur HTTP), mais présentent des différences fondamentales dans l'architecture, la prise en charge des codecs et l'écosystème. Examinons-les selon les paramètres clés.
| Paramètre | DASH | HLS |
|---|---|---|
| Norme | Internationale (ISO/IEC 23009-1) | Propriétaire (RFC 8216, Apple) |
| Description du flux | XML (MPD) | Liste de lecture M3U8 |
| Codecs | Tout (H.264, HEVC, AV1, VP9) | Limité (H.264, HEVC, AV1 depuis 2023) |
| Format des segments | fMP4 (principal), MPEG-2 TS | MPEG-2 TS, fMP4 |
| DRM | CENC (unifié pour tous les DRM) | FairPlay, Widevine (séparés) |
| Support iOS | Via des lecteurs tiers | Natif (AVPlayer, Safari) |
| Navigateurs | Chrome, Firefox, Edge (via MSE) | Safari (natif), autres via MSE |
Avantage clé de DASH — indépendance des codecs. Alors que HLS limitait à l'origine les codecs à ceux supportés par Apple (H.264, HEVC, et récemment AV1), DASH peut utiliser n'importe quel codec supporté par le lecteur : VP9/VP8 (critique pour YouTube et Chrome), AV1 (pour l'efficacité), H.264/HEVC (pour la compatibilité). Cela fait de DASH le choix privilégié pour les services multiplateformes nécessitant un flux unifié pour tous les appareils.
Inconvénient de DASH sur iOS — absence de support natif dans Safari et AVPlayer. Les développeurs iOS doivent utiliser des lecteurs compatibles HLS tiers ou des bibliothèques comme libdash avec intégration via VTDecoder. En pratique, cela signifie que pour les projets axés sur iOS, HLS reste le standard de facto, tandis que pour Android et les plateformes web, DASH est une solution plus flexible et puissante.
L'intégration de DASH dans les applications mobiles dépend de la plateforme. Sur Android, DASH est supporté directement via ExoPlayer avec le module d'extension. Sur iOS, des bibliothèques tierces comme libdash avec intégration via AVFoundation ou MPEGDASHPlayer sont nécessaires. Voyons l'implémentation pratique pour les deux plateformes.
ExoPlayer de Google offre un support intégré pour DASH via le module `exoplayer-dash`. Connecter un flux DASH n'est pas différent des autres formats — il suffit de passer l'URI du fichier MPD dans un MediaItem. ExoPlayer détecte automatiquement le format du contenu et lance le rendu approprié, supportant tous les algorithmes ABR standard.
val player = ExoPlayer.Builder(this).build()
val dashMediaItem = MediaItem
.Builder()
.setUri("https://example.com/dash/stream.mpd")
.setMimeType("application/dash+xml")
.build()
player.setMediaItem(dashMediaItem)
player.prepare()
player.playWhenReady = true
Common Encryption (CENC) est l'une des fonctionnalités clés de DASH, permettant d'utiliser un seul flux multimédia avec différents systèmes DRM. Le fichier MPD contient des éléments XML ContentProtection avec des identifiants de systèmes DRM (Widevine, PlayReady, FairPlay). Le client sélectionne le système DRM approprié en fonction de sa plateforme et demande une licence au serveur de licences.
val drmLicenseUri = Uri.parse("https://license.example.com/wv")
val drmSessionManager = DefaultDrmSessionManager
.Builder()
.setUuidAndExoMediaDrmProvider(
C.WIDEVINE_UUID,
FrameworkMediaDrm.DEFAULT_PROVIDER
)
.build(drmLicenseUri, null)
val mediaItem = MediaItem
.Builder()
.setUri("https://example.com/encrypted/stream.mpd")
.setDrmConfiguration(
MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
.setLicenseUri("https://license.example.com/wv")
.build()
)
.build()
Les applications mobiles nécessitent une configuration spéciale de DASH en raison des limitations de bande passante et de consommation d'énergie. Les principales recommandations incluent : définir un tampon minimum de 2-3 segments pour la résistance aux baisses de courte durée de la vitesse, utiliser des segments de 2-4 secondes pour une réponse plus rapide aux changements de réseau, et précharger le segment suivant lors du changement de qualité.
Pour économiser le trafic sur les réseaux mobiles, Bitmovin (2024) recommande d'utiliser Content Steering — un mécanisme similaire à la fonction analogue de HLS, permettant de diriger dynamiquement le client vers le nœud CDN optimal. DASH Content Steering est décrit dans la spécification ISO/IEC 23009-1:2022 et est supporté dans dash.js 4.5+ et ExoPlayer 2.18+.
Foire aux questions
DASH est une norme internationale ouverte MPEG, non liée à un fournisseur. Contrairement à HLS (protocole propriétaire d'Apple), DASH supporte n'importe quel codec, utilise une description de flux XML (MPD) au lieu de M3U8 et fournit un système DRM unifié via CENC. HLS a un support natif sur iOS, tandis que DASH est plus flexible pour les solutions multiplateformes.
Sur Android, le lecteur principal pour DASH est ExoPlayer de Google avec le module exoplayer-dash. Sur iOS, des solutions tierces comme libdash avec intégration via AVFoundation ou des lecteurs commerciaux (THEOplayer, Bitmovin) sont utilisées. Dans les navigateurs web, DASH est lu via dash.js en utilisant MediaSource Extensions.
MPD (Media Presentation Description) est un fichier XML qui décrit la structure du flux DASH : durée du contenu, débits binaires disponibles, résolutions, codecs, formats de segments et leur emplacement. Le MPD sert de point d'entrée pour le lecteur, remplaçant la liste de lecture maître dans HLS. Sans fichier MPD, la lecture de contenu DASH est impossible.
Oui, DASH supporte à la fois le VOD et la diffusion en direct. Pour le live, le type MPD dynamic avec mise à jour automatique est utilisé. Le serveur met périodiquement à jour le MPD, ajoutant de nouveaux segments et supprimant les obsolètes. Le Low-Latency DASH (LL-DASH) avec encodage fragmenté permet d'atteindre une latence de 3 à 8 secondes, comparable au LL-HLS.
DASH utilise Common Encryption (CENC, ISO/IEC 23001-7), qui permet de chiffrer le contenu multimédia une fois et de le déchiffrer avec n'importe quel système DRM. Le MPD contient des éléments XML ContentProtection indiquant les DRM supportés (Widevine, PlayReady, FairPlay). Le lecteur sélectionne le DRM approprié en fonction de la plateforme et demande une licence via l'URL spécifiée.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi