Lorsqu'un client demande un fichier M3U8, cette fonctionnalité ajoute automatiquement les paramètres d'authentification de la requête à l'URI de la clé dans la balise #EXT-X-KEY. Cela sécurise l'accès à vos clés de chiffrement sans modifier votre serveur d'origine et empêche la lecture non autorisée des vidéos.
Cas d'utilisation
Dans un flux de travail de chiffrement HLS standard, la balise #EXT-X-KEY spécifie l'URI permettant de récupérer la clé de déchiffrement. Si cette URI est une adresse publique fixe et non protégée, toute personne ayant obtenu le fichier M3U8 peut télécharger la clé et déchiffrer le contenu vidéo, ce qui rend le chiffrement inefficace.
Cette fonctionnalité résout le problème en associant un jeton d'authentification dynamique et vérifiable à chaque demande de clé. Elle est idéale pour les scénarios nécessitant un contrôle d'accès aux clés de chiffrement HLS, tels que :
Vidéos payantes et formation en ligne : Pour empêcher les utilisateurs de partager les URL M3U8 avec des personnes non abonnées, générez un paramètre d'authentification unique pour chaque utilisateur connecté. Cela garantit que seuls les utilisateurs autorisés peuvent récupérer la clé de déchiffrement pendant sa période de validité.
Protection des droits d'auteur des diffusions en direct : Pour les grands événements sportifs ou les diffusions en direct, combinez des paramètres d'authentification générés dynamiquement avec l'authentification d'URL CDN. Cela permet un contrôle d'accès granulaire au flux en direct et empêche efficacement le hotlinking.
Fonctionnement
Un client envoie une requête à votre serveur d'application. En fonction de votre logique métier (par exemple, la connexion de l'utilisateur), le serveur d'application génère un paramètre d'authentification avec une période de validité et une signature (par exemple,
token=xxxx) et le renvoie au client.Le client ajoute ce paramètre d'authentification à la fin de l'URL de la requête du fichier M3U8 et envoie une requête M3U8 à un point de présence (PoP) CDN.
Avant de renvoyer le fichier M3U8, le PoP CDN analyse son contenu, repère la balise
#EXT-X-KEYet ajoute le paramètre d'authentification de l'URL de requête du client à la fin de l'attributURIde la balise.Le client reçoit le fichier M3U8 réécrit depuis le CDN et envoie une requête au serveur de clés en utilisant la nouvelle URI de clé, qui inclut désormais le paramètre d'authentification.
Le serveur de clés reçoit la demande de clé, extrait le paramètre d'authentification de l'URL et le valide. Si la validation réussit, il renvoie la clé de déchiffrement. Sinon, il rejette la demande.
Après avoir obtenu la clé, le client déchiffre le flux vidéo TS et lance la lecture.
Cette fonctionnalité ne chiffre pas le contenu vidéo. Avant d'utiliser cette fonctionnalité, assurez-vous que les segments vidéo (fichiers TS) sur votre serveur d'origine sont chiffrés selon une norme HLS, telle qu'AES-128. Le fichier M3U8 d'origine doit également contenir la balise #EXT-X-KEY correcte. Pour plus d'informations sur le chiffrement vidéo, consultez Comment générer et chiffrer un fichier M3U8.
Le serveur d'application et le serveur de clés sont présentés ici pour illustrer le flux global. Vous devez les implémenter vous-même pour compléter le processus d'authentification des clés HLS.
La balise
#EXT-X-KEYspécifie si le contenu est chiffré. Pour plus d'informations sur les balises des fichiers M3U8, consultez Contenu d'un fichier HLS M3U8.
Procédure
Connectez-vous à la console CDN.
Dans le volet de navigation de gauche, cliquez sur Domain Names.
Sur la page Domain Names, recherchez le nom de domaine cible et cliquez sur Manage dans la colonne Actions.
Dans le volet de navigation du domaine, cliquez sur Video.
-
Dans la section M3U8 Encryption and Rewrite, activez l'interrupteur M3U8 Encryption and Rewrite.
RemarqueAprès avoir activé M3U8 Encryption and Rewrite, le nom de paramètre par défaut est
MtsHlsUriToken. -
Facultatif : Pour modifier le nom du paramètre afin qu'il corresponde à votre client, effectuez les étapes suivantes :
Cliquez sur Modify à côté de Custom Parameter Name.
-
Dans la boîte de dialogue Custom Parameter Name, définissez Parameter Name.
Si vous ne spécifiez pas de valeur, le nom du paramètre prend par défaut la valeur
MtsHlsUriToken.RemarqueLes noms de paramètres sont sensibles à la casse. Assurez-vous que le nom de paramètre que vous définissez correspond exactement au nom de paramètre dans les requêtes du client. Par exemple, si la requête du client inclut le paramètre
MtsHlsUriTokenet que vous définissez le nom de paramètre personnalisé dans la console CDN surmtshlsuritoken, la configuration ne prend pas effet. Cliquez sur OK pour terminer la configuration.
Exemple
-
Accédez au fichier M3U8 accéléré par CDN dans votre navigateur et ajoutez MtsHlsUriToken=tokenxxxxx à la fin de la requête. Exemple : http://<nom de domaine accéléré par CDN>/video.m3u8?MtsHlsUriToken=tokenxxxxx
Dans les outils de développement de votre navigateur, le panneau Network montre que la requête pour le fichier M3U8 inclut le paramètre personnalisé, mais la requête de clé suivante ne l'inclut pas.
Dans la console CDN, activez M3U8 Encryption and Rewrite. Si nécessaire, vous pouvez définir un nom de paramètre personnalisé (cette démonstration utilise le paramètre par défaut
MtsHlsUriToken). Dans la console CDN, activez la fonctionnalité M3U8 encryption and rewrite et définissez Custom Parameter Name surMtsHlsUriToken.-
Répétez l'étape 1. Accédez au fichier M3U8 accéléré par CDN dans un navigateur et ajoutez MtsHlsUriToken=tokenxxxxx à la fin de la requête.
Dans les outils de développement de votre navigateur, sur le panneau Network, vous pouvez voir que la requête pour l'adresse de la clé inclut désormais le paramètre personnalisé.
L'URL de requête pour le fichier de clé
encryption_key.keyinclut le paramètreMtsHlsUriToken=tokenxxxxxet la réponse a un code d'état 206 et une Content-Length de 16 octets.
FAQ
Qu'est-ce que le protocole HLS ?
HTTP Live Streaming (HLS) est un protocole de streaming multimédia basé sur HTTP développé par Apple. Il divise un flux vidéo en petits segments Transport Stream (TS) et utilise un fichier texte avec l'extension M3U8 comme liste de lecture. Pour démarrer la lecture, un client télécharge d'abord la liste de lecture M3U8, puis télécharge chaque segment média séquentiellement en utilisant les URL qu'elle contient.
Que contient un fichier HLS M3U8 ?
Balises M3U8 de base :
#EXTM3U: L'en-tête du fichier. Doit être la première ligne de la liste de lecture.EXT-X-MEDIA-SEQUENCE: Le numéro de séquence du premier segment TS. Généralement 0. Dans le streaming en direct, il identifie le point de départ. Par exemple,#EXT-X-MEDIA-SEQUENCE:0.#EXT-X-TARGETDURATION: La durée maximale d'un segment média. Par exemple,#EXT-X-TARGETDURATION:10définit le maximum à 10 secondes.#EXT-X-ALLOW-CACHE: Indique si le client peut mettre en cache les segments média. Valeurs valides :#EXT-X-ALLOW-CACHE:YESet#EXT-X-ALLOW-CACHE:NO. Par défaut : YES.#EXT-X-ENDLIST: Marque la fin de la liste de lecture.#EXTINF: Informations supplémentaires sur un segment média, telles que la durée et la bande passante. Format :#EXTINF:<duration>,[<title>]. La valeur avant la virgule est la durée du segment, qui ne doit pas dépasser la valeur#EXT-X-TARGETDURATION.#EXT-X-VERSION: Le numéro de version de la liste de lecture M3U8.#EXT-X-DISCONTINUITY: Signale une rupture entre les segments média précédents et suivants.#EXT-X-PLAYLIST-TYPE: Indique le type du flux.#EXT-X-KEY: Spécifie la méthode de déchiffrement pour les segments média chiffrés. Par exemple :#EXT-X-KEY:METHOD=AES-128,URI="https://example.com/video.key?token=xxx"utilise le chiffrement AES-128. La clé est récupérée depuishttps://example.com/video.key?token=xxx, stockée localement et utilisée pour déchiffrer les fichiers TS suivants.
Comment générer et chiffrer un fichier M3U8 ?
-
Générez une clé de chiffrement.
Cette clé est généralement une chaîne aléatoire de 16 octets pour le chiffrement AES-128. Générez un fichier de clé avec OpenSSL :
openssl rand 16 > encryption_key.key -
Préparez le fichier
key_info.txt. L'outil de chiffrement utilise ce fichier pour chiffrer les fichiers vidéo HLS.https://example.com/encryption_key.key /path/to/local/encryption_key.keyLa première ligne est l'URL de la clé de chiffrement générée à l'étape 1. Nous recommandons d'héberger le fichier sur un serveur d'origine OSS accéléré par CDN.
La deuxième ligne est le chemin absolu du fichier de clé local.
-
Utilisez
FFmpegpour générer et chiffrer les fichiers vidéo HLS.ffmpeg -i input_video.mp4 -c:v copy -c:a copy -hls_time 10 -hls_key_info_file key_info.txt -hls_list_size 0 output_playlist.m3u8-i input_video.mp4: Spécifie le fichier vidéo à convertir, tel qu'une vidéo au formatMP4.-c:v copy: Copie le flux vidéo directement sans réencodage.-c:a copy: Copie le flux audio directement sans réencodage.-hls_time 10: Définit la durée de chaque fichierTSà 10 secondes. Vous pouvez modifier ce paramètre en fonction de la durée de la vidéo d'origine.-hls_key_info_file key_info.txt: Spécifie le fichier contenant les informations de la clé de chiffrement.-hls_list_size 0: Définit le nombre d'index de fichiersTSà conserver dans le fichierM3U8. Une valeur de0indique que tous les index de fichiers.tssont conservés.output_playlist.m3u8: Le nom du fichier de liste de lecture HLS de sortie (c'est-à-dire le nom du fichierM3U8).
Enregistrez les fichiers chiffrés
TSet les fichiersM3U8sur un serveur, tel qu'un serveur d'origine OSS accéléré par CDN. Ensuite, utilisez un nom de domaine accéléré par CDN dans un navigateur pour accéder au fichierM3U8afin d'activer la lecture chiffrée des vidéos utilisant le protocoleHLS.