CGJU
CGJU
5 juillet 2026 · Temps de lecture 3 minutes
Qu'est-ce que HLS.js
HLS.js est une bibliothèque JavaScript open source qui implémente un client HLS (HTTP Live Streaming), permettant de lire des flux HLS dans les navigateurs prenant en charge MSE (Media Source Extensions). Développé et maintenu par Dailymotion, c'est l'une des solutions de lecture HLS web les plus populaires actuellement.
Contrairement au navigateur Safari qui prend en charge HLS nativement, Chrome, Firefox, Edge et d'autres navigateurs ne prennent pas en charge le format HLS nativement et nécessitent l'utilisation de bibliothèques JavaScript comme HLS.js pour implémenter la fonction de lecture.
Caractéristiques principales d'HLS.js
- Lecture à débit adaptatif : bascule automatiquement entre différents flux vidéo de qualité en fonction de la bande passante réseau
- Prise en charge VOD et direct : prend en charge à la fois la vidéo à la demande et le streaming en direct
- Prise en charge du chiffrement AES-128 : peut lire du contenu HLS chiffré avec AES-128
- Prise en charge des sous-titres : prend en charge les formats de sous-titres WebVTT et CEA-608/708
- Pistes audio multilingues : permet de basculer entre les pistes audio de différentes langues
- Mécanisme de tolérance aux pannes : réessaie et reprend automatiquement la lecture en cas d'instabilité du réseau
Principe de fonctionnement d'HLS.js
Le principe de fonctionnement d'HLS.js peut être divisé en plusieurs étapes clés :
1. Chargement et analyse de la playlist M3U8
HLS.js récupère d'abord le fichier de playlist M3U8 via une requête HTTP, puis analyse son contenu, notamment :
- Playlist principale (Master Playlist) : contient plusieurs sous-playlists de différents débits
- Playlist média (Media Playlist) : contient les adresses et durées des segments TS spécifiques
- Informations de chiffrement : si le contenu est chiffré, analyse la méthode de chiffrement et l'adresse de la clé
2. Chargement des segments et gestion de la mémoire tampon
Après avoir analysé la playlist, HLS.js télécharge les segments TS un par un dans l'ordre de lecture et ajoute les données au SourceBuffer de MediaSource. En même temps, il maintient une file d'attente de mémoire tampon pour assurer la continuité de la lecture.
3. Basculement adaptatif de débit
HLS.js surveille en temps réel la bande passante réseau et l'état de la mémoire tampon, et bascule automatiquement vers un flux vidéo de débit approprié selon un algorithme prédéfini, afin de garantir un équilibre entre la fluidité de la lecture et la qualité de l'image.
Démarrage rapide : exemple de code de base
Voici un exemple d'utilisation le plus simple d'HLS.js, qui ne nécessite que quelques lignes de code pour lire un flux vidéo HLS dans une page web.
Importer HLS.js
Vous pouvez importer HLS.js directement via CDN, c'est le moyen le plus simple :
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
Structure HTML
Ajoutez un élément vidéo dans la page :
<video id="video" controls playsinline></video>
Initialisation JavaScript
Utilisez le code suivant pour initialiser HLS.js et charger la vidéo :
const video = document.getElementById('video');
const videoUrl = 'https://example.com/stream.m3u8';
if (Hls.isSupported()) {
const hls = new Hls();
hls.loadSource(videoUrl);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED, function() {
video.play();
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
video.src = videoUrl;
video.addEventListener('loadedmetadata', function() {
video.play();
});
}
Options de configuration courantes
HLS.js offre de nombreuses options de configuration qui peuvent être ajustées selon les besoins réels :
1. Activer le mode faible latence
Convient aux scènes de diffusion en direct, peut réduire efficacement la latence de lecture :
const hls = new Hls({
lowLatencyMode: true,
liveSyncDurationCount: 3
});
2. Définir la qualité initiale
Spécifiez le niveau de qualité par défaut pour la lecture :
const hls = new Hls({
startLevel: 2, // Commencer au 3e niveau de qualité
autoStartLoad: true
});
3. Configurer la longueur maximale de la mémoire tampon
Ajustez la taille de la mémoire tampon pour équilibrer l'occupation de la mémoire et la stabilité de la lecture :
const hls = new Hls({
maxBufferLength: 30, // Mémoire tampon maximale de 30 secondes
maxMaxBufferLength: 60 // Mémoire tampon maximale absolue de 60 secondes
});
Écoute d'événements et gestion des erreurs
HLS.js fournit un système d'événements complet pour écouter divers changements d'état et erreurs :
Événements courants
- MANIFEST_PARSED : l'analyse de la playlist M3U8 est terminée
- LEVEL_SWITCHED : le niveau de qualité a changé
- BUFFER_APPENDED : les données ont été ajoutées à la mémoire tampon
- ERROR : une erreur s'est produite
- FRAG_LOADED : le chargement du segment est terminé
Exemple de gestion des erreurs
hls.on(Hls.Events.ERROR, function(event, data) {
if (data.fatal) {
switch (data.type) {
case Hls.ErrorTypes.NETWORK_ERROR:
console.log('Erreur réseau, tentative de récupération...');
hls.startLoad();
break;
case Hls.ErrorTypes.MEDIA_ERROR:
console.log('Erreur média, tentative de récupération...');
hls.recoverMediaError();
break;
default:
console.log('Erreur irrécupérable');
hls.destroy();
break;
}
}
});
Avantages et inconvénients d'HLS.js
Avantages
- Open source et gratuit : open source sous licence Apache-2.0, utilisation commerciale gratuite
- Communauté active : maintenu par Dailymotion, avec de nombreux contributeurs sur GitHub
- Fonctionnalités complètes : prend en charge la plupart des caractéristiques d'HLS, y compris le débit adaptatif, le chiffrement, les sous-titres, etc.
- Excellentes performances : utilise Web Worker pour le traitement de l'analyse des données, ne bloque pas le thread principal
- Bonne compatibilité : prend en charge tous les navigateurs modernes prenant en charge MSE
Inconvénients
- Ne prend pas en charge les navigateurs HLS natifs : les navigateurs comme Safari qui prennent en charge HLS nativement n'ont pas besoin d'utiliser HLS.js
- Nécessite la prise en charge MSE : certains navigateurs anciens ou navigateurs mobiles peuvent ne pas prendre en charge MSE
- Coût d'apprentissage : maîtriser toutes les configurations et API nécessite un certain coût d'apprentissage
Bonnes pratiques recommandées
1. Moment approprié pour la destruction
Lors du déchargement de la page ou du changement de vidéo, n'oubliez pas d'appeler la méthode destroy pour libérer les ressources :
window.addEventListener('beforeunload', function() {
if (hls) {
hls.destroy();
}
});
2. Gérer les problèmes CORS d'origine croisée
Assurez-vous que le serveur des fichiers M3U8 et TS est configuré avec les en-têtes CORS corrects, sinon HLS.js ne pourra pas charger les ressources. Les en-têtes de réponse suivants doivent être autorisés :
Access-Control-Allow-Origin
Access-Control-Allow-Credentials
3. Définir raisonnablement la qualité initiale
Pour améliorer l'expérience utilisateur, il est recommandé de définir une qualité initiale raisonnable en fonction de l'environnement réseau de l'utilisateur, ou de laisser l'utilisateur choisir manuellement.
4. Écouter les erreurs et dégrader élégamment
En environnement de production, il est indispensable d'écouter l'événement ERROR et d'effectuer une récupération d'erreur ou un traitement de dégradation si nécessaire, pour offrir une indication conviviale à l'utilisateur.
Conclusion
HLS.js est une bibliothèque de lecture HLS open source puissante et à communauté active, c'est la solution de choix pour implémenter la lecture de flux HLS dans les pages web. Grâce à la présentation de cet article, nous espérons que vous avez une compréhension complète de l'utilisation de base d'HLS.js.
Si vous souhaitez expérimenter rapidement la fonction de lecture HLS, vous pouvez utiliser directement notre lecteur M3U8 en ligne, sans avoir à écrire de code pour lire des flux vidéo HLS dans le navigateur.