HLS et DASH : comment fonctionne le streaming adaptatif
5 min de lecture
Si vous avez déjà vu une vidéo démarrer floue puis devenir nette au bout de quelques secondes, ou perdre en qualité quand le Wi-Fi faiblit, vous avez vu le streaming adaptatif en action. Presque toute la vidéo sur Internet est diffusée ainsi, avec deux systèmes : HLS et DASH. Ils fonctionnent de façon similaire, et les comprendre explique bien des comportements qui ressemblent à des pannes mais n’en sont pas.
Le principe : découper et proposer plusieurs qualités
Au lieu d’un énorme fichier, le serveur conserve la vidéo découpée en segments de quelques secondes. Et pas une seule fois, mais plusieurs : le même film en 1080p, en 720p, en 480p, chaque version avec son débit, ou bitrate. Le lecteur télécharge d’abord un index, le manifeste, qui lui indique les versions disponibles et l’emplacement de chaque morceau. Il demande ensuite les segments un par un et, à chaque instant, choisit la qualité que votre connexion peut tenir selon lui.
Les avantages sont clairs : la vidéo démarre vite parce qu’elle commence par des morceaux légers, elle s’adapte au réseau sans se couper et permet de sauter à n’importe quel endroit en ne téléchargeant que le nécessaire. Les diffusions en direct fonctionnent de la même façon : le manifeste se met à jour au fil des nouveaux segments.
HLS
HLS (HTTP Live Streaming) a été créé par Apple et c’est le plus répandu. Son manifeste est un fichier texte portant l’extension .m3u8, et il en existe deux types.
La liste maîtresse énumère les qualités disponibles. Chacune indique sa bande passante, sa résolution et ses codecs :
#EXTM3U#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.640028,mp4a.40.2"1080p/index.m3u8#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,CODECS="avc1.64001f,mp4a.40.2"720p/index.m3u8
La liste de médias de chaque qualité énumère ses segments et la durée de chacun :
#EXTM3U#EXT-X-TARGETDURATION:6#EXTINF:6.0,segmento-001.ts#EXTINF:6.0,segmento-002.ts#EXT-X-ENDLIST
La balise #EXT-X-ENDLIST indique que la vidéo est complète, c’est-à-dire à la demande. Si elle n’apparaît pas, il s’agit d’une diffusion en direct et le lecteur redemande la liste toutes les quelques secondes. Les segments peuvent être en TS ou en fMP4 (MP4 fragmenté, reconnaissable à la balise #EXT-X-MAP). L’audio dans d’autres langues et les sous-titres peuvent être des pistes séparées, déclarées avec #EXT-X-MEDIA.
Au passage, le fait que le manifeste HLS ait la même extension que beaucoup de listes de vidéos prête à confusion ; nous faisons le point dans M3U, M3U8 et W3U.
DASH
DASH (Dynamic Adaptive Streaming over HTTP, ou MPEG-DASH) est une norme internationale ouverte. Son manifeste est un fichier XML portant l’extension .mpd. Il organise le contenu en ensembles d’adaptation (la vidéo, l’audio de chaque langue, les sous-titres) et, dans chacun d’eux, en représentations, qui sont les qualités. De nombreuses plateformes et de nombreux sites l’utilisent. Pour le spectateur, la différence avec HLS est quasi nulle : c’est le format de l’index qui change, pas le principe.
Pourquoi la qualité change-t-elle ?
Le lecteur mesure la vitesse à laquelle les segments lui parviennent et le nombre de secondes qu’il a en réserve, la mémoire tampon. Si le téléchargement a de la marge, il monte en qualité ; s’il est juste, il baisse avant de se retrouver à court de vidéo. C’est pourquoi :
- Le démarrage est souvent flou : le lecteur ne sait pas encore ce que vaut votre connexion et commence prudemment.
- La qualité baisse quand un autre appareil de la maison télécharge quelque chose ou quand vous vous éloignez du routeur.
- Elle met quelques secondes à remonter même si le réseau s’améliore, car le changement se fait au segment suivant, pas instantanément.
- Une vidéo peut plafonner à 720p même avec la fibre, si le serveur ne propose pas mieux ou si l’appareil ne peut pas décoder la version supérieure.
Une baisse de qualité passagère n’est pas une panne : c’est le système qui évite une coupure. Si les coupures sont fréquentes, consultez coupures, saccades et chargement lent.
Direct, retard et fenêtre
Dans une diffusion en direct, le lecteur ne se place pas sur la toute dernière seconde diffusée, mais quelques segments en arrière, pour garder de la marge. C’est pourquoi un direct sur Internet a souvent du retard sur la télévision traditionnelle, et deux appareils peuvent être décalés. Certaines diffusions permettent de revenir un peu en arrière, sur la durée de la fenêtre du manifeste ; d’autres ne proposent que les derniers segments.
Chiffrement et DRM
HLS permet de chiffrer les segments en AES-128 avec une clé téléchargée depuis une adresse. Ce n’est pas du DRM : n’importe quel lecteur HLS l’ouvre s’il peut télécharger la clé, Whatplay compris. Le DRM (Widevine, PlayReady, FairPlay), c’est autre chose : un système de licences lié à l’appareil, utilisé par les plateformes payantes, qui se déclare en HLS avec des méthodes comme SAMPLE-AES et en DASH avec la balise ContentProtection. Whatplay ne lit pas les contenus protégés par DRM ; nous l’expliquons dans le navigateur de Whatplay et le DRM.
HLS et DASH dans Whatplay
- Vous pouvez mettre l’adresse d’un .m3u8 ou d’un .mpd dans une liste, ou l’ouvrir une seule fois avec « Ajouter une liste » et « Lire sans enregistrer ».
- La qualité se choisit toute seule. Dans les « Options » du lecteur, vous voyez la résolution et les Mb/s de ce qui est en lecture.
- Dans le navigateur, quand un site utilise HLS ou DASH, le volet « Vidéos de cette page » indique la résolution maximale (« jusqu’à 1080p ») et le nombre de qualités disponibles.
- Quand vous diffusez sur un Chromecast, le téléviseur télécharge généralement les segments lui-même. Si le serveur exige des informations d’accès que le téléviseur ne peut pas envoyer, le téléphone sert de relais et doit rester connecté au Wi-Fi.