Utiliser des points de repère en vidéo
Employer des points de repères
Nous aurions pu nous arrêter à l’utilisation de sous-titres, mais nous allons voir que l’usage des <tracks>
peut nous permettre d’aller encore plus loin. Par exemple, en implémentant d’autres fonctionnalités interactives issues de ces données. Encore une fois, à ce jour l’implémentation correcte dans les navigateurs fait défaut. Il faut alors faire appel à des librairies comme popcorn.js, cuepoint.org, et d’autres. Mais nous allons voir (uniquement sous chrome pour ce test), qu’en natif, Javascript et HTML5 peuvent promettre un avenir bien sympathique. Ajoutons un code <video> contenant une piste <track> composée comme les précédentes, mais avec les styles en moins. Ensuite, préparons un petit bout de code HTML près à recevoir une liste ;
<ul id="listecuepoint"> </ul>
… suivi de deux portions de javascript :
L’une au lancement de la page : Elle va avoir pour objectif de globaliser certaines variables comme l’élément <video>
, l’élément de liste <ul>
et l’extraction du tableau textTracks
qui contient l’ensemble des éléments <track>
de la balise (ici nous n’en avons qu’un, on en profite pour l’extraire directement [0]
). Une fois le texte de la piste <track>
chargé, (ne confondons pas le chargement de la balise HTML, et le chargement src de cette balise), nous pouvons parser les divers cuepoints
depuis le tableau cues
, et remplir en conséquence avec des éléments <li>
la liste listecuepoint
mis en mémoire précédemment.
var videoElement = document.getElementById("videocuepoint"); var listecuepoint = document.getElementById("listecuepoint"); var tracks = videoElement.textTracks[0] function loaded() { for (var i=0,nb=tracks.cues.length;i<nb;i++){ var cueText = tracks.cues[i].text var texte = document.createTextNode(cueText) var li = document.createElement('li') li.setAttribute('id',tracks.cues[i].id) li.appendChild(texte) listecuepoint.appendChild(li) } }
Et une autre portion de script qui sera, elle, exécutée sous forme événementielle. C’est-à-dire, qu’une fois que la vidéo sera en lecture, pour chaque changement ou réception de cue point, un événement oncuechange
sera intercepté. La variable memoire
contiendra alors l’élément en cours de lecture. À chaque changement de cuepoints
, l’ancien élément réinitialise son className
à une chaîne vide, alors que le nouvel élément est mémorisé dans la variable memoire
et qu’il est mis en surbrillance au travers de la classe activeCuePoint
qui lui est affectée.
var memoire = null tracks.oncuechange = function(){ var encours = document.getElementById(memoire); if (encours != null) { encours.className= "" } if (this.activeCues[0] !== undefined) { var id = this.activeCues[0].id memoire = id encours = document.getElementById(memoire); encours.className= "activeCuePoint" } }
Il ne reste plus qu’à tester l’animation :