DASH — qu'est-ce que c'est, protocole et principe de fonctionnement du streaming dynamique

Auteur : IT Sectr Publié le : 2026-05-23 Temps de lecture : 9 min

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

  • DASH est une norme internationale ouverte MPEG pour le streaming adaptatif sur HTTP.
  • Fichier MPD (Media Presentation Description) gère le flux via une structure XML décrivant les périodes et les ensembles d'adaptation.
  • Codecs ne sont pas limités par la spécification — DASH prend en charge H.264, HEVC, AV1, VP9, AAC et autres.
  • DRM est implémenté via Common Encryption (CENC), prenant en charge Widevine, PlayReady et FairPlay dans un seul flux.
  • Multiplateforme DASH est activé via ExoPlayer (Android), dash.js (navigateurs) et libdash.

Qu'est-ce que DASH ?

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.

Histoire et normalisation de DASH

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é.

Comment fonctionne DASH ?

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.

Récupération et analyse du MPD

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
<?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>

Chargement des segments et adaptation

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).

Structure de DASH : MPD, Period, Adaptation Set

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 (Media Presentation Description)

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, AdaptationSet et Representation

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.

Segmentation et conditionnement

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 :

python
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"
])

DASH vs HLS : comparaison des protocoles

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ètreDASHHLS
NormeInternationale (ISO/IEC 23009-1)Propriétaire (RFC 8216, Apple)
Description du fluxXML (MPD)Liste de lecture M3U8
CodecsTout (H.264, HEVC, AV1, VP9)Limité (H.264, HEVC, AV1 depuis 2023)
Format des segmentsfMP4 (principal), MPEG-2 TSMPEG-2 TS, fMP4
DRMCENC (unifié pour tous les DRM)FairPlay, Widevine (séparés)
Support iOSVia des lecteurs tiersNatif (AVPlayer, Safari)
NavigateursChrome, 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.

Utilisation de DASH dans le développement mobile

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.

DASH sur Android via ExoPlayer

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.

kotlin
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

DASH avec DRM sur les deux plateformes

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.

kotlin
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()

Optimisation de DASH pour les appareils mobiles

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

En quoi DASH diffère-t-il de HLS ?

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.

Quels lecteurs supportent DASH sur les appareils mobiles ?

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.

Qu'est-ce que MPD dans le contexte de DASH ?

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.

DASH supporte-t-il les diffusions en direct ?

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.

Comment fonctionne le DRM dans DASH ?

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é

  • MPEG-DASH est une norme internationale ouverte pour le streaming adaptatif sur HTTP avec description de flux XML au format MPD.
  • Indépendance des codecs — DASH supporte H.264, HEVC, AV1, VP9 et tout autre codec disponible sur le lecteur.
  • CENC fournit un chiffrement unifié du contenu pour tous les systèmes DRM, simplifiant les licences.
  • Algorithmes ABR (BOLA, Pensieve) minimisent les changements de débit binaire et garantissent une lecture stable.
  • Android — DASH est supporté nativement dans ExoPlayer ; iOS nécessite des bibliothèques tierces.
  • LL-DASH réduit la latence des diffusions en direct à 3-8 secondes.
  • Recommandé d'utiliser DASH pour les projets multiplateformes où la flexibilité des codecs et du DRM est importante.

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.

Discuter du projet

Lisez aussi