Auto-hébergement de vidéos avec HLS : sous-titres

Vincent Bernat

Dans un article précédent, j’ai décrit une solution pour héberger soi-même des vidéos tout en adaptant la bande passante de chaque utilisateur à l’aide de HLS et hls.js. Le résultat faisait l’impasse sur les sous-titres. Bien que ceux-ci puissent être déclarés dans le manifeste HLS ou intégrés directement dans la vidéo, il est plus simple de les inclure dans l’élément <video> en utilisant le format WebVTT:

<video poster="poster.jpg"
       controls preload="none">
  <source src="index.m3u8"
          type="application/vnd.apple.mpegurl">
  <source src="progressive.mp4"
          type='video/mp4; codecs="avc1.4d401f, mp4a.40.2"'>
  <track src="de.vtt"
         kind="subtitles" srclang="de" label="Deutsch">
  <track src="en.vtt"
         kind="subtitles" srclang="en" label="English">
</video>

Voici un exemple présentant Agent 327: Operation Barbershop, une video créée par Blender Animation Studio et actuellement publiée sous la licence Creative Commons Attribution No Derivatives 2.0 :

Le premier sous-titre se trouve à 0:12. La plupart des navigateurs proposent un menu pour choisir les sous-titres. Cela fonctionne avec Chromium mais Firefox n’affiche pas ce menu avant de jouer la vidéo, à moins d’autoriser le préchargement. Autre inconvénient, il n’y a pas de moyen simple de spécifier une marge de sécurité et les sous-titres restent coincés contre le bas de la vidéo. Ces deux problèmes restent suffisamment mineurs pour ne pas justifier le téléchargement de plusieurs centaines de kibioctets de JavaScript pour un lecteur tiers.

Mise à jour (12.2019)

Si les sous-titres sont servis depuis un autre domain, la balise <video> doit contenir l’attribut crossorigin="anonymous" et les sous-titres doivent gérer les entêtes CORS. Sur certains navigateurs, cela nécessite également d’activer CORS pour la vidéo et le poster.

Mise à jour (09.2020)

Le problème avec Firefox concernant le menu pour les sous-titres est corrigé dans Firefox 76. Sous Android, les sous-titres fonctionnent à partir de Firefox 80.