Tutoriel · HLS · AES-128

Télécharger une vidéo M3U8 chiffrée (AES-128) en 2026

Un guide concret pour sauvegarder les flux HLS chiffrés AES-128. Trois méthodes testées, classées de la plus simple à la plus technique, avec le contexte légal que la plupart des articles oublient.

Par l'équipe Vidora 10 min de lecture

La plupart des téléchargeurs M3U8 fonctionnent très bien... jusqu'à tomber sur un flux chiffré. La barre de progression bloque à 0 pour cent, ffmpeg crache une erreur "Cannot load X-Key", le convertisseur en ligne sort un fichier corrompu. Le truc frustrant, c'est que le chiffrement utilisé par 90 pour cent de ces flux n'est pas vraiment conçu pour verrouiller le contenu sur un appareil. C'est une couche de transport que tout outil compatible peut lire, à condition de savoir comment.

Ce guide couvre les trois méthodes qui marchent vraiment en 2026, dans l'ordre exact où je les recommande. On se concentre sur les usages légitimes : télécharger votre propre contenu, archiver des formations achetées légalement, sauvegarder des vidéos pour lesquelles vous avez une autorisation explicite. On ne couvre pas le contournement de DRM, et on ne fait pas semblant. La distinction compte, et la plupart des articles qui l'occultent sont trompeurs.

1. Ce que veut vraiment dire M3U8 chiffré

Un fichier M3U8 est une playlist en texte brut utilisée par HTTP Live Streaming (HLS), le protocole créé par Apple en 2009 et qui fait tourner la majorité du streaming vidéo adaptatif. Un flux HLS standard liste des segments vidéo (typiquement .ts ou .m4s), un par ligne, et le lecteur les télécharge dans l'ordre pour reconstruire la vidéo. Si vous n'en avez jamais ouvert un, notre explainer M3U8 (en anglais) fait le tour du format.

Un M3U8 chiffré ressemble presque à un standard, mais inclut une balise qui dit au lecteur comment déchiffrer les segments :

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-KEY:METHOD=AES-128,URI="https://cdn.example.com/keys/abc.key",IV=0x1a2b...
#EXTINF:9.96,
segment-001.ts
#EXTINF:9.92,
segment-002.ts
...

La ligne #EXT-X-KEY est le coeur du sujet. Elle dit à n'importe quel lecteur HLS trois choses : la méthode de chiffrement (presque toujours AES-128 en mode CBC), l'URL du fichier clé (un blob binaire de 16 octets), et un vecteur d'initialisation optionnel. Avec ces trois éléments, le lecteur déchiffre chaque segment en mémoire et envoie les octets décodés au codec vidéo.

Le détail crucial : l'URL de la clé est livrée avec la vidéo. Elle est récupérée en HTTPS, souvent sans authentification spéciale au-delà de la session qui a chargé la page. Donc tout téléchargeur compatible peut récupérer la clé de la même manière. C'est par design. AES-128 dans HLS sert à empêcher le hotlinking et le scraping de segments, pas à verrouiller la vidéo sur un appareil. Ce deuxième boulot est celui du DRM, un système totalement différent qu'on couvre plus bas.

2. Pourquoi la plupart des outils échouent

Quand les outils standards plantent sur un M3U8 chiffré, c'est pour une de ces trois raisons, chacune avec un fix :

L'outil ignore la balise EXT-X-KEY

Beaucoup de téléchargeurs gratuits, surtout les extensions navigateur pas mises à jour depuis deux ans, traitent chaque M3U8 comme s'il n'était pas chiffré. Ils concatènent les segments en bytes bruts et produisent un MP4 que le codec ne peut pas décoder. La sortie ressemble à un fichier vidéo mais joue en static. C'est la cause numéro un de "j'ai téléchargé le M3U8 mais ça lit pas".

L'outil ne peut pas récupérer la clé

L'URL de la clé est souvent derrière le même mur d'authentification que la vidéo. Si l'outil tourne hors de votre session navigateur (script CLI sans cookies, convertisseur en ligne distant), la requête de clé renvoie 403 Forbidden et le téléchargement échoue immédiatement. Les extensions navigateur contournent ça parce qu'elles tournent dans la session qui a déjà chargé le lecteur.

L'outil ignore le header Referer

Certains CDN exigent un Referer spécifique sur les requêtes de segments, même quand les URLs sont pré-signées. Sans lui, vous obtenez des 403 aléatoires en milieu de téléchargement, autour de 30 à 50 pour cent. Le fix : forger le header, ce que les extensions font automatiquement via declarativeNetRequest et que les outils CLI exigent de configurer explicitement.

3. Méthode 1 : extension navigateur (recommandé)

Une extension navigateur dans votre session active, c'est le chemin de moindre résistance. Elle hérite des cookies, des headers et de la clé AES automatiquement. Vous cliquez une fois, l'extension fait le job, vous récupérez un MP4 unique à la fin. Pas de ligne de commande, pas d'extraction manuelle de clé, pas de header à forger.

Étape par étape avec Vidora

  1. Installez Vidora depuis le Chrome Web Store. Compatible Chrome, Edge, Brave, Opera, Vivaldi et tout navigateur Chromium.
  2. Ouvrez la page qui héberge la vidéo chiffrée. Cliquez Play une fois pour que le navigateur récupère le manifeste M3U8 et la clé AES. Sans Play, le lecteur n'a encore rien tiré.
  3. Cliquez sur l'icône Vidora dans la barre d'outils. Le flux chiffré apparaît dans le popup avec les qualités détectées automatiquement.
  4. Choisissez une qualité et cliquez Télécharger. Vidora récupère chaque segment, le déchiffre avec la bonne clé AES, muxe audio et vidéo, et écrit un MP4 unique dans votre dossier Téléchargements.

Pour un flux 1080p chiffré de 30 minutes, le process prend généralement 2 à 4 minutes sur une connexion normale. Vidora télécharge jusqu'à six segments en parallèle, plus rapide que ffmpeg en mode séquentiel par défaut mais plus lent que la concurrence tunée de yt-dlp.

Pourquoi cette méthode gagne

4. Méthode 2 : ffmpeg avec la clé extraite

Si vous ne voulez pas installer d'extension, ffmpeg sait télécharger et déchiffrer un flux HLS nativement, à condition de lui fournir l'URL de la clé ou le fichier clé directement. Le hic : ffmpeg ne peut pas extraire la clé de votre session authentifiée tout seul. Il faut le lui donner.

Extraction manuelle, étape par étape

  1. Ouvrez la page dans Chrome et lancez la lecture pour que le navigateur récupère la playlist.
  2. Ouvrez DevTools (F12), Network tab, filtre m3u8. Notre tutoriel DevTools détaille cette partie si elle ne vous est pas familière.
  3. Clic droit sur la requête de la playlist, Copy as cURL. Ça capture l'URL plus tous les headers, dont les cookies et le Referer.
  4. Collez la commande cURL dans votre terminal, mais remplacez curl par ffmpeg -headers formaté avec chaque header capturé. La commande complète ressemble à ça :
ffmpeg \
  -headers $'Referer: https://source.example.com/\r\nCookie: session=abc123\r\n' \
  -i "https://cdn.example.com/playlist.m3u8" \
  -c copy \
  output.mp4

Le flag -c copy dit à ffmpeg de muxer les segments sans réencoder. Ça garde le bitrate d'origine et c'est rapide. ffmpeg récupère lui-même l'URL EXT-X-KEY, déchiffre chaque segment en mémoire, et écrit un MP4 propre. La doc des flags est sur le site officiel ffmpeg.

Quand ffmpeg est le bon choix

Quand ffmpeg casse

5. Méthode 3 : yt-dlp pour les avancés

yt-dlp est le successeur spirituel de youtube-dl et supporte AES-128 HLS d'office. C'est la plus flexible des trois options et la seule qui gère certains cas tordus comme les clés rotatives (où chaque segment utilise une clé différente).

yt-dlp \
  --add-header "Referer: https://source.example.com/" \
  --cookies-from-browser chrome \
  -o "%(title)s.%(ext)s" \
  "https://source.example.com/video-page"

Le flag --cookies-from-browser chrome est la killer feature : yt-dlp tire les cookies directement de votre profil Chrome, ce qui veut dire que les flux privés derrière login marchent sans extraction manuelle de cURL. Le template du nom de fichier utilise le titre réel de la vidéo plutôt qu'un nom générique.

Les défauts principaux : la syntaxe a une courbe d'apprentissage, les releases sont parfois en retard d'une semaine ou deux sur les changements de site, et les utilisateurs Windows tombent sur des faux positifs antivirus parce que l'exécutable n'est pas signé par défaut.

6. Erreurs courantes et corrections

Erreur : "Cannot load X-Key file" ou "Failed to fetch key"

L'URL de la clé veut le même Referer ou cookie que la requête playlist d'origine. Ouvrez DevTools, trouvez la requête .key, copiez ses headers complets. Passez-les à ffmpeg avec -headers ou à yt-dlp avec --add-header.

Erreur : "Le fichier de sortie est corrompu" ou "ça lit en static"

Vous avez utilisé un outil qui a ignoré la balise EXT-X-KEY et écrit les segments chiffrés tels quels sur disque. Passez à un outil qui déchiffre (Vidora, ffmpeg, yt-dlp) et re-téléchargez. Pas de récupération possible : les bytes chiffrés sur disque ne peuvent pas être convertis en vidéo sans la clé appliquée au moment du fetch.

Erreur : "Le téléchargement bloque entre 80 et 95 pour cent"

Quelques segments ont renvoyé 403 Forbidden parce que le token d'auth a expiré en cours de route. Relancez la lecture sur la page source pour rafraîchir le cookie, puis redémarrez. Certaines plateformes font tourner le token toutes les 10 minutes peu importe l'activité. Le téléchargement doit terminer dans cette fenêtre.

Erreur : "L'audio est muet dans le MP4 de sortie"

Le téléchargeur a récupéré uniquement le flux vidéo et ignoré la playlist audio séparée. Les playlists master chiffrées ont presque toujours des renditions audio et vidéo distinctes. Vérifiez que votre outil muxe les deux : ffmpeg avec -c copy le fait nativement, Vidora le fait de façon transparente. yt-dlp users : ajoutez --merge-output-format mp4.

Erreur : "Le fichier est bien plus gros que la source"

Le téléchargeur a réencodé la vidéo au lieu de muxer les flux d'origine. Utilisez -c copy avec ffmpeg, le flag --no-recode avec yt-dlp, ou tout outil qui skip le réencodage (Vidora muxe les flux tels quels).

La plupart des articles sur ce sujet zappent cette section parce qu'elle est inconfortable. Pas nous. La distinction la plus importante dans HLS chiffré, c'est la différence entre chiffrement de transport AES-128 et DRM de contenu, et cette distinction a des implications légales directes.

AES-128 dans HLS fait partie du standard HLS ouvert (RFC 8216). La clé voyage avec la vidéo et tout lecteur HLS compatible peut la lire : VLC, mpv, Safari, hls.js, ffmpeg, yt-dlp. En soi, AES-128 n'est pas une mesure de protection contre la copie au sens du DMCA américain ou de la directive copyright européenne. La lire ne constitue pas un "contournement de mesure technique de protection" parce que la clé est livrée avec le contenu. De nombreux juristes, dont l'EFF, ont défendu ce point à plusieurs reprises.

Le DRM (Widevine, FairPlay, PlayReady) est fondamentalement différent. La clé est scellée dans un Content Decryption Module hardware sur l'appareil de lecture et n'est jamais exposée au code utilisateur. Contourner le DRM implique presque toujours de contourner une mesure technique de protection, et c'est illégal dans la plupart des juridictions. Vidora ne contourne pas le DRM. ffmpeg ne contourne pas le DRM. yt-dlp ne contourne pas le DRM. Aucune des méthodes de cet article ne marche sur Netflix, Disney Plus, Prime Video.

Le guide pratique :

Vidora est une technologie, pas un conseil juridique. La responsabilité légale de tout téléchargement repose sur vous et dépend de votre juridiction, de la licence du contenu, et de votre usage prévu. En cas de doute, demandez au détenteur des droits.

8. Questions fréquentes

Que veut dire M3U8 chiffré ?

C'est une playlist HLS dont les segments vidéo sont chiffrés en AES-128 (ou AES-SAMPLE-AES). La playlist contient une balise EXT-X-KEY qui pointe vers une clé. Tout lecteur compatible télécharge la clé, déchiffre chaque segment en mémoire, et lit la vidéo. Ce chiffrement fait partie du standard HLS ouvert et n'est pas la même chose que le DRM.

Est-il légal de télécharger un M3U8 chiffré ?

Cela dépend du contenu. AES-128 est une couche de transport, pas un signal de copyright. Télécharger votre propre vidéo, une formation achetée légalement ou un contenu autorisé est généralement légal. Télécharger du contenu protégé sans droit de redistribution ne l'est pas. La responsabilité repose sur vous.

Quelle est la différence entre AES-128 et DRM ?

AES-128 dans HLS livre la clé avec la vidéo, souvent en HTTPS, et tout lecteur compatible peut la lire. Le DRM (Widevine, FairPlay, PlayReady) scelle la clé dans un Content Decryption Module hardware que le code utilisateur ne peut pas atteindre. Vidora, ffmpeg et yt-dlp gèrent tous AES-128. Aucun ne contourne le DRM, par design.

Pourquoi mon téléchargement échoue avec "Cannot load X-Key" ?

L'URL de la clé veut une auth, un Referer, ou les deux. Les extensions navigateur gèrent ça automatiquement parce qu'elles tournent dans votre session authentifiée. Avec ffmpeg ou yt-dlp, capturez les headers depuis DevTools (clic droit, Copy as cURL) et passez-les avec -headers ou --add-header.

Puis-je lire un M3U8 chiffré sans le télécharger ?

Oui. Tout lecteur HLS compatible récupère la clé de manière transparente et lit le flux : VLC, mpv, hls.js, Safari natif, ou le lecteur de la page source. AES-128 dans HLS est conçu pour empêcher le scraping occasionnel, pas pour verrouiller la lecture.

Vidora contourne-t-il les flux DRM comme Netflix ?

Non. Vidora gère AES-128 HLS, qui fait partie du standard HLS ouvert. Il ne contourne jamais le DRM. Netflix, Disney Plus, Prime Video et autres services premium utilisent Widevine ou FairPlay, et aucune extension Chrome ne peut télécharger ces flux légitimement.

À propos

RGC Digital LLC développe Vidora, une extension Chrome Pro de téléchargement vidéo pour Vimeo, Bunny.net, flux HLS et MP4. Basée à Albuquerque, NM. Nous écrivons sur l'outillage vidéo, les protocoles de streaming et le développement d'extensions Chrome.

Lectures associées