Implémentation des points de repère par programme
Aperçu
Des points de repère peuvent être définis pour une vidéo. Pendant la lecture vidéo, un événement est distribué lorsque chaque point de repère est atteint.
Lisez la vidéo suivante pour voir le lecteur afficher les informations de point de repère aux heures de pré-roll, mid-roll (5 secondes, 10 secondes, 12 secondes) et post roll.
******** Informations sur les points de repère ********
****** Informations sur le point de repère final ******
Lisez cette vidéo et vous verrez des informations pour quatre points de repère affichés sous le lecteur.
Concepts clés
Quelques concepts doivent être compris pour utiliser efficacement les points de repère dans Brightcove Player. Ces concepts sont expliqués dans cette section du document.Le concept suivant doit être compris pour utiliser efficacement les points de repère dans Brightcove Player.
Points de repère du catalogue Video Cloud
Le premier concept à comprendre est lié à la terminologie. Dans Brightcove Player, les points de repère sont stockés en tant qu'éléments de piste de texte, conformément à la norme HTML. Cela signifie que lorsqu'une vidéo Video Cloud est utilisée, tous les points de repère de "style Video Cloud" sont convertis en pistes de texte.
Ces points de repère de "style Video Cloud" peuvent également être appelés points de repère "catalogue" car ils sont lus à partir du catalogue Catalogue des joueurs document pour plus d'informations sur le catalogue). Lorsque cette conversion a lieu, certaines des informations du point de repère du catalogue, telles que le type et le temps du point de repère, sont converties dans la piste de texte.
Structure des points de repère du catalogue
Le concept suivant à comprendre est qu'il existe une différence significative entre les points de repère du catalogue et le standard HTML dans la structure. La différence est qu'un point de repère HTML peut avoir une durée. Cela signifie que pour chaque point de repère, deux événements de changement de point de repère seront envoyés: un au début du point de repère et un à la fin du point de repère.
Dans le processus de conversion, chaque point de repère du catalogue est converti en un point de repère avec des heures de début et de fin identiques. Cela signifie que pour chaque point de repère du catalogue, deux événements de point de repère seront envoyés et doivent être pris en compte dans le code.
activecues
tableau
Un autreUn point conceptuel important à comprendre lors du traitement des points de repère HTML est le activeCues
tableau. Tous les points de repère sont définis dans un tableau. Il y a un autre tableau, activeCues
, qui contient les points de repère qui sont "actifs", ce qui signifie que le temps de lecture se situe entre les heures de début et de fin du point de repère.
Lorsque vous utilisez des points de repère de catalogue, les heures de début et de fin sont identiques, elles ne seront donc actives que pour le second défini. De plus, avec les points de repère de catalogue, il est très peu probable que deux points de repère soient actifs en même temps car ils ne se chevaucheront pas.
Types de points de repère
Dans ce document, vous verrez des points de repère avec un type
propriété affectée d'une valeur. Ces valeurs de type sont attribuées lors de la création de points de repère dans l'interface utilisateur de Studio. Il existe deux types de points de repère, mais les deux fournissent simplement une valeur de chaîne au type
propriété. La valeur appropriée n'est utile que si elle est utilisée dans JavaScript personnalisé lors du traitement des informations de point de repère. Les types sont détaillés ici:
- Un d - Attribue la valeur de chaîne de
AD
à latype
propriété - Code - Attribue la valeur de chaîne de
CODE
à latype
propriété
Points de repère de Video Cloud
Dans cette section du document, vous apprendrez à définir des points de repère de catalogue et à écouter les distributions d'événements de point de repère de catalogue.
Définition des points de repère de Video Cloud
Les points de repère Video Cloud peuvent être associés à une vidéo à l'aide de Video Cloud Studio, et de plusieurs autres façons, détaillées dans ce document: Utilisation des points de repère dans le module multimédia.
Agir sur les points de repère de Video Cloud - vidéo liée statiquement au lecteur
Dans cette section du document, vous apprendrez à traiter les points de repère du catalogue lorsque la vidéo a été liée statiquement au lecteur, ce qui signifie que la vidéo a été chargée dans le lecteur soit dans Studio, soit en utilisant directement l'API Player Management.
Pour éviter une situation de concurrence liée à la tentative de traitement des points de repère avant leur chargement, vous devez utiliser le loadedmetadata
événement à envoyer avant de traiter les points de repère. Une fois que la bonne piste de texte a été lue, utilisez le oncuechange
événement pour écouter les événements de points de repère à envoyer.
Le code suivant montre l'écoute des points de repère et l'affichage des données à partir du point de repère. Notez que dans cet exemple, la vidéo est liée statiquement au lecteur.
- Ligne 11 : Créez un élément de paragraphe comme emplacement dans lequel injecter du code HTML créé dynamiquement.
- Lignes 18 et 30 : Utilisez le
one()
méthode pour ajouter un écouteur d'événement pour leloadedmetadata
événement une seule fois. La fonction de gestionnaire d'événements est définie ici de manière anonyme. - Ligne 19 : Récupérez le tableau TextTracks à l'aide de la
textTracks()
méthode, puis attribuez l'élément zéro, qui contient les points de repère, à la variablett
. Notez qu'il peut être possible dans certaines implémentations que les points de repère se trouvent dans un autre élément de tableau. Voir le Trouver la bonne piste section ci-dessous pour plus d'informations. - Lignes 20 et 28 : Définit la fonction de gestionnaire d'événements lorsque l'
oncuechange
événement est distribué. - Ligne 21: Vérifiez que vous obtenez la première distribution de point de repère (élément de tableau zéro). Sans cette condition, vous verriez que chaque point de repère serait agi deux fois. Notez que si vous utilisez des points de repère dont les durées se chevauchent, cette condition doit être différente.
- Lignes 22-26 : Créez dynamiquement du code HTML à l'aide d'informations provenant du point de repère et injectez-en dans la page HTML.
- Ligne 29 : Lisez la vidéo.
<video-js id="myPlayerID"
data-account="1507807800001"
data-player="zN3V18ZPEu"
data-embed="default"
controls=""
data-video-id="1507781667001"
data-playlist-id=""
data-application-id=""
width="960" height="540"></video-js>
<p id="insertionPoint"></p>
<script src="https://players.brightcove.net/1507807800001/zN3V18ZPEu_default/index.min.js"></script>
<script>
videojs.getPlayer('myPlayerID').ready(function() {
var player = this;
player.one("loadedmetadata", function () {
var tt = player.textTracks()[0];
tt.oncuechange = function () {
if (tt.activeCues[0] !== undefined) {
var dynamicHTML = "id: " + tt.activeCues[0].id + ", ";
dynamicHTML += "text: " + tt.activeCues[0].text + ", ";
dynamicHTML += "startTime: " + tt.activeCues[0].startTime + ", ";
dynamicHTML += "endTime: " + tt.activeCues[0].endTime;
document.getElementById("insertionPoint").innerHTML += dynamicHTML + "<br/>";
}
}
player.play();
});
});
</script>
Agir sur les points de repère de Video Cloud - charger dynamiquement la vidéo dans le lecteur
Dans cette section du document, vous apprendrez à traiter les points de repère du catalogue lorsque la vidéo est chargée dynamiquement dans le lecteur à l'aide du catalog.getVideo()
et catalog.load()
méthodes.
Lorsque vous utilisez le catalogue de lecteurs pour obtenir et charger la vidéo, le traitement des points de repère est un peu plus facile que lorsque vous utilisez une vidéo à liaison statique, car vous n'avez pas besoin d'utiliser le loadedmetadata
un événement.
- Ligne 11 : Créez un élément de paragraphe comme emplacement dans lequel injecter du code HTML créé dynamiquement.
- Lignes 17 et 31 : Utilisez le
catalog.getVideo()
méthode pour récupérer une vidéo. La fonction de rappel est définie ici de manière anonyme. - Ligne 19 : Utilisez le
catalog.load()
méthode pour charger la vidéo dans le lecteur. - Ligne 21: Récupérez le tableau TextTracks à l'aide de la
textTracks()
méthode, puis attribuez l'élément zéro, qui contient les points de repère, à la variablett
. Notez qu'il peut être possible dans certaines implémentations que les points de repère se trouvent dans un autre élément de tableau. Voir le Trouver la bonne piste section ci-dessous pour plus d'informations. - Lignes 22-30 : Définit la fonction de gestionnaire d'événements lorsque l'
oncuechange
événement est distribué. - Ligne 23 : Vérifiez que le premier point de repère (élément du tableau zéro) est défini. Sans cette condition, vous verriez que chaque point de repère serait agi deux fois, la deuxième fois sans éléments définis dans le
activecues
array (puisque le deuxième changement de repère concerne la fin du point de repère). Notez que si vous utilisez des points de repère dont les durées se chevauchent, cette condition doit être différente. - Lignes 24-28 : Créez dynamiquement du code HTML à l'aide d'informations provenant du point de repère et injectez-en dans la page HTML.
- Ligne 32: Lisez la vidéo.
<video-js id="myPlayerID"
data-account="1507807800001"
data-player="zN3V18ZPEu"
data-embed="default"
controls=""
data-video-id=""
data-playlist-id=""
data-application-id=""
width="960" height="540"></video-js>
<p id="insertionPoint"></p>
<script src="https://players.brightcove.net/1507807800001/zN3V18ZPEu_default/index.min.js"></script>
<script>
videojs.getPlayer('myPlayerID').ready(function() {
var player = this;
player.catalog.getVideo('1507781667001', function (error, video) {
//deal with error
player.catalog.load(video);
player.one("loadedmetadata", function () {
var tt = player.textTracks()[0];
tt.oncuechange = function () {
if (tt.activeCues[0] !== undefined) {
var dynamicHTML = "id: " + tt.activeCues[0].id + ", ";
dynamicHTML += "text: " + tt.activeCues[0].text + ", ";
dynamicHTML += "startTime: " + tt.activeCues[0].startTime + ", ";
dynamicHTML += "endTime: " + tt.activeCues[0].endTime;
document.getElementById("insertionPoint").innerHTML += dynamicHTML + "<br/>";
}
}
});
player.play();
});
});
</script>
Récupérer toutes les informations sur les points de repère de Video Cloud
Comme vous l'avez peut-être remarqué, toutes les informations relatives aux points de repère de Video Cloud ne vous sont pas directement accessibles depuis le activecues
tableau. Cela est facilement résolu en récupérant les informations souhaitées à partir du mediainfo
propriété.
L'approche de base de cette solution est:
- Attends le
loadstart
événement pour lemediainfo
propriété à peupler. - Attribuez le
cue_points
tableau dumediainfo
propriété à une variable. Cette variable contient des informations complètes sur les points de repère de Video Cloud. - Lors d'un événement de point de repère, récupérez les données de point de repère correspondantes en fonction de
time
valeur de la propriété. Cela sera fait à l'aide d'une fonction d'assistance qui récupère un objet d'un tableau en fonction d'une valeur de propriété dans l'objet. - Utilisez les données du point de repère.
L'image suivante montre l'ensemble du tableau de points de repère (en haut à gauche), la collection de données de point de repère unique (en haut à droite) et une propriété de cette collection de données de point de repère unique (en bas à droite).

Dans l'extrait ci-dessous, seul le code nouveau / modifié des exemples ci-dessus sera expliqué.
- Lignes 452-463: Incluez la fonction qui sera utilisée pour extraire une collection de données de point de repère unique du tableau de tous les points de repère. Notez que vous lui transmettez le tableau de tous les points de repère, la propriété dans laquelle vous recherchez une valeur spécifique et enfin la valeur que vous recherchez.
- Ligne 432: Écoute l'
loadstart
événement. Lorsque votre vidéo commence à se charger, lemediainfo
la propriété est peuplée. - Ligne 434: Attribuez le tableau de tous les points de repère Video Cloud à une variable.
- Ligne 443: Dans le gestionnaire d'événements de répartition des points de repère, affectez la collecte de données du point de repère spécifique à une variable. C'est là que la fonction mentionnée dans la première puce est appelée. Les arguments utilisés sont:
- :
cuePointAra
Toute la collection de points de repère Video Cloud. - :
'time'
Propriété dans laquelle rechercher une valeur. - :
tt.activeCues[0].startTime
Heure de début du point de repère en cours de traitement dans le gestionnaire d'événements de répartition de point de repère.
- :
- Lignes 444-445: Débogage
console.log()
les appels de méthode, qui doivent être supprimés dans le code de production.
<script>
videojs.getPlayer('myPlayerID').ready(function() {
var myPlayer = this,
cuePointAra = [],
allCuePointData;
myPlayer.on('loadstart', function () {
//console.log('mediainfo', myPlayer.mediainfo);
cuePointAra = myPlayer.mediainfo.cue_points;
var tt = myPlayer.textTracks()[0];
tt.oncuechange = function () {
if (tt.activeCues[0] !== undefined) {
var dynamicHTML = "id: " + tt.activeCues[0].id + ", ";
dynamicHTML += "text: " + tt.activeCues[0].text + ", ";
dynamicHTML += "startTime: " + tt.activeCues[0].startTime + ", ";
dynamicHTML += "endTime: " + tt.activeCues[0].endTime;
document.getElementById("insertionPoint").innerHTML += dynamicHTML + "<br/>";
allCuePointData = getSubArray(cuePointAra, 'time', tt.activeCues[0].startTime);
console.log('cue point data:', allCuePointData);
console.log('cue point metadata:', allCuePointData[0].metadata);
}
}
myPlayer.play();
myPlayer.muted(true);
});
function getSubArray(targetArray, objProperty, value) {
var i, totalItems = targetArray.length,
objFound = false,
idxArr = [];
for (i = 0; i < totalItems; i++) {
if (targetArray[i][objProperty] === value) {
objFound = true;
idxArr.push(targetArray[i]);
}
}
return idxArr;
};
});
</script>
Points de repère standard HTML5
Les points de repère standard HTML5 sont stockés en tant qu'éléments de piste dans un format prescrit. Un bon contenu d'introduction peut être trouvé dans le didacticiel HTML5 Rocks suivant: Premiers pas avec l'élément Track. Dans cette section du document, vous apprendrez le format des fichiers de points de repère WebVTT, puis comment traiter ces points de repère.
Format de fichier WebVTT pour les points de repère
Le format de fichier WebVTT est strictement défini. Pour les points de repère, le fichier est composé comme suit:
- La ficelle WebVTT comme première ligne du fichier
- Une seule ligne vide
- L'identifiant d'un point de repère spécifique
- La durée sous la forme 00: 00: 00.000 -> 00: 00: 00.000 ; il s'agit du format heures: minutes: secondes. millisecondes et est strictement analysé; les nombres doivent être remplis de zéro si nécessaire
- Les caractères suivant la durée jusqu'à la ligne vierge suivante sont placés dans un texte valeur; si vous souhaitez stocker plusieurs valeurs disparates ici JSON fonctionne bien car il peut être facilement analysé
- Une seule ligne vide
- Plusieurs points de repère peuvent être ajoutés en utilisant le format identifiant / durée / texte / ligne vierge
Ce qui suit est un document de point de repère WebVTT valide qui définit deux points de repère, l'un d'une durée de 2 à 5 secondes et l'autre d'une durée de 10 à 15 secondes:
WEBVTT
Carry
00:00:03.000 --> 00:00:09.000
{
"id": "First cue point",
"title": "Carry the rim",
"description": "Getting ready to mount a tire on the rim."
}
Balance
00:00:10.000 --> 00:00:15.000
{
"id": "Second cue point",
"title": "Balance the tire and rim",
"description": "Spin the mounted tire to check the balance."
}
Lorsque vous lisez la vidéo suivante, vous verrez le fichier WebVTT de point de repère présenté ci-dessus traité. Au début d'un point de repère, vous voyez du HTML créé dynamiquement injecté dans la page, suivi de quelques JSON analysés à partir du texte champ. À la fin du point de repère, le message Durée du point de repère sur est affiché.
******** Informations sur les points de repère ********
****** Informations sur le point de repère final ******
Vue d'ensemble des points de repère de processus
Les étapes de base pour utiliser les points de repère standard HTML5 sont:
- Lisez le fichier WebVTT contenant les points de repère à l'aide d'un
<track>
balise imbriquée en tant qu'enfant du<video-js>
marque. - Dans un
loadedmetadata
gestionnaire d'événements, récupérez l'élément de piste de texte approprié. - Dans le même gestionnaire d'événements, configurez un deuxième gestionnaire d'événements pour le
oncuechange
événement de point de repère. - dans le
oncuechange
gestionnaire d'événements, vérifiez si leactivecues
L'objet tableau a un élément zéro défini, si oui, agit sur le point de départ du point de repère. - dans le
oncuechange
gestionnaire d'événements, vérifiez si leactivecues
L'objet tableau a un élément zéro défini, si non, agit sur l'arrêt du point de repère.
Code des points de repère de traitement
- Ligne 11 : Créez une piste de texte en lisant le fichier WebVTT à l'aide de la
<track>
balise. - Ligne 15 : Créer un
<pre></pre>
élément comme emplacement dans lequel injecter du code HTML créé dynamiquement. Notez qu'un<pre></pre>
élément est utilisé à la place d'un élément de paragraphe afin que la notation JavaScript 5 puisse être utilisée. - Lignes 22,50 : Utilisez
one()
cette méthode pour écouter l'loadedmetadata
événement une seule fois. La fonction de gestion d'événement est définie ici comme une fonction fléchée. - Ligne 23 : Attribuer à la variable
tt
les pistes de texte définies par le fichier WebVTT. La structure des données se présente comme suit : - Lignes 31 et 49 : Définit la fonction de gestionnaire d'événements lorsque l'
oncuechange
événement est distribué. - Lignes 35 et 38 : S'il n'y a pas de marqueur actif, il s'agit du point d'arrêt du marqueur, ce qui signifie que la durée du marqueur est terminée.
- Lignes 40-48 : Créez dynamiquement du code HTML à l'aide d'informations provenant du point de repère et injectez-en dans la page HTML. Cela inclut l'analyse JSON et l'affichage de divers champs de ce JSON. Notez qu'il s'agit de la notation JavaScript 5 backtick.
<video-js id="myPlayerID"
data-account="1752604059001"
data-player="default"
data-embed="default"
controls=""
data-video-id="4607357817001"
data-playlist-id=""
data-application-id=""
width="640" height="360">
<track kind="metadata" label="external-metadata-vtt" src="https://solutions.brightcove.com/bcls/brightcove-player/cuepoints/cuepoints-2022.vtt" />
</video-js>
<pre id="insertionPoint"></pre>
<script src="https://players.brightcove.net/1752604059001/default_default/index.min.js"></script>
<script type="text/javascript">
const player = videojs.getPlayer('myPlayerID');
player.ready(() => {
player.one("loadedmetadata", () => {
const tt = [].find.call(player.textTracks(), ({ label }) => label === 'external-metadata-vtt');
if (!tt) {
return;
}
tt.mode = 'hidden';
tt.oncuechange = () => {
const outputEl = document.getElementById("insertionPoint");
const activeCue = tt.activeCues[0];
if (!activeCue) {
outputEl.innerHTML += `Cue point duration over\n\n`;
return;
}
const { id, text, startTime, endTime } = activeCue;
outputEl.innerHTML += `id: ${id}\ntext: ${text}\nstartTime: ${startTime}, endTime: ${endTime}\n`;
try {
const { title, description } = JSON.parse(text);
outputEl.innerHTML += `${title}: ${description}\n\n`
} catch (e) {
//ignore
}
}
});
});
</script>
Code des points de repère de traitement
- Ligne 270: Créez une piste de texte en lisant le fichier WebVTT à l'aide de la
<track>
balise. - Ligne 273: Créez un élément de paragraphe comme emplacement dans lequel injecter du code HTML créé dynamiquement.
- Lignes 285,309: Utilisez
one()
cette méthode pour écouter l'loadedmetadata
événement une seule fois. La fonction de gestionnaire d'événements est définie ici de manière anonyme. - Ligne 286: Affectez à une variable l'index de la dernière piste de texte chargée.
- Ligne 287: Récupérez le tableau TextTracks à l'aide de la
textTracks()
méthode, puis attribuez le dernier élément du tableau à une variable à l'aide de l'index déterminé à l'étape précédente. Voir le Trouver la bonne piste section ci-dessous pour les variations de cette logique. - Lignes 289301: Définit la fonction de gestionnaire d'événements lorsque l'
oncuechange
événement est distribué. - Ligne 290: Vérifiez que le premier point de repère (élément de tableau zéro) est défini dans le tableau ActiveCues. Cela vous indique qu'il s'agit d'un événement de point de repère de départ.
- Lignes 291-294: Créez dynamiquement du code HTML à l'aide d'informations provenant du point de repère et injectez-en dans la page HTML. Cela inclut l'analyse JSON et l'affichage de divers champs de ce JSON.
- Lignes 295-297: Affichez une note indiquant que l'extrémité du point de repère a été atteinte.
- Ligne 302 : Lisez la vidéo.
On peut supposer que vous pouvez ajouter le fichier WebVTT par programme en utilisant le addRemoteTextTrack()
méthode. Dans ce cas, ce ne serait pas fiable car vous pouvez rencontrer une condition de concurrence où les points de repère ne seraient pas prêts à être traités avant d'essayer de les utiliser. Vous pouvez ajouter le fichier WebVTT en toute sécurité à l'aide du <track>
étiquette comme indiqué.
Trouver la bonne piste
À plusieurs endroits de ce document, un problème peut survenir si plusieurs pistes de texte sont associées à un lecteur. On a supposé qu'une seule piste de texte était associée au lecteur, donc ce code a été utilisé: var tt = myPlayer.textTracks()[0];
. La sélection de l'élément de tableau zéro suppose une seule piste de texte associée au lecteur.
Les pistes de texte ne sont pas seulement utilisées pour les points de repère, mais également pour d'autres types de données. le gentil L'attribut peut contenir les valeurs suivantes:
- sous-titres
- légendes
- descriptions
- chapitres
- métadonnées
Cela signifie qu'il est très possible que plusieurs pistes de texte soient associées au lecteur et qu'un moyen est nécessaire pour trouver celui qui convient à la logique de votre application. Le code suivant boucle sur les pistes de texte disponibles jusqu'à ce que métadonnées (point de repère) la valeur est trouvée:
<script type="text/javascript">
videojs.getPlayer('myPlayerID').ready(function() {
var myPlayer = this,
allTextTacks,
attLength,
tt;
myPlayer.one("loadedmetadata", function () {
allTextTacks = myPlayer.textTracks();
attLength = allTextTacks.length;
for (var i = 0; i < attLength; i++) {
if (allTextTacks[i].kind === 'metadata') {
tt = allTextTacks[i];
break;
};
};
});
});
</script>
La logique des exemples précédents pourrait ensuite être utilisée pour traiter les points de repère à l'aide du tt
variable, qui contient la piste de texte souhaitée.
Points de repère programmatiques
Il est possible d'ajouter des points de repère par programmation. La méthode clé vient du HTML5 VTTCue
interface. Vous pouvez créer des points de repère en utilisant la syntaxe suivante:
new VTTCue( startTime, endTime, text )
La logique de traitement des points de repère est très similaire aux exemples précédents, donc seul le code différent de celui utilisé ci-dessus sera détaillé.
-
Lignes 43,44: Ajoute un
textTrack
élément au joueur en utilisantaddRemoteTextTrack()
méthode. Spécifie lekind
être métadonnées , et unlabel
, dans ce cas Point de repère chronométré. -
Lignes 45-48: Attendez 10 millisecondes avant de créer deux points de repère à l'aide du lecteur
addCue()
méthode. Les points de repère sont instanciés à l'aide de HTML5VTTCue()
constructeur. - Ligne 22: Écoute l'
addtrack
événement. - Ligne 23 : Récupère toutes les pistes de texte associées au lecteur.
- Ligne 24 : Définit le
attLength
variable selon le nombre de pistes de texte. Cette valeur sera utilisée dans une boucle dans le prochain segment de code. - Lignes 25-30: Faites une boucle sur chaque piste de texte en vérifiant
label
pour être égal à la valeur correcte. Lorsqu'elle est trouvée, assignez la piste de texte actuelle à une variable et sortez de la boucle.
<video-js id="myPlayerID"
data-video-id="4607746980001"
data-account="1507807800001"
data-player="default"
data-embed="default"
width="640" height="360"
controls=""></video-js>
<script src="https://players.brightcove.net/1507807800001/default_default/index.min.js"></script>
<p id="insertionPoint"></p>
<script type="text/javascript">
videojs.getPlayer("myPlayerID").ready(function () {
var myPlayer = this,
textTrack = [],
allTextTacks,
attLength,
tt;
myPlayer.one("loadedmetadata", function () {
myPlayer.textTracks().addEventListener('addtrack', function () {
allTextTacks = myPlayer.textTracks();
attLength = allTextTacks.length;
for (var i = 0; i < attLength; i++) {
if (allTextTacks[i].label === 'Timed Cue Point') {
tt = allTextTacks[i];
break;
}
}
tt.oncuechange = function () {
if (tt.activeCues[0] !== undefined) {
var dynamicHTML = "id: " + tt.activeCues[0].id + ", ";
dynamicHTML += "text: <strong>" + tt.activeCues[0].text + "</strong>, ";
dynamicHTML += "startTime: <strong>" + tt.activeCues[0].startTime + "</strong>, ";
dynamicHTML += "endTime: <strong>" + tt.activeCues[0].endTime + "</strong>";
document.getElementById("insertionPoint").innerHTML += dynamicHTML + "<br/><br/>";
} else {
document.getElementById("insertionPoint").innerHTML += "Cue point duration over" + "<br/><br/>";
}
}; //end oncuechange
}); // end playing
textTrack = myPlayer.addRemoteTextTrack({kind: 'metadata', label: 'Timed Cue Point', mode: 'hidden'}, false);
textTrack.track.mode = 'hidden';
setTimeout(function(){
textTrack.track.addCue(new window.VTTCue(2, 5, 'cue point 1 text'));
textTrack.track.addCue(new window.VTTCue(10, 15, 'cue point 2 text'));
}, 10);
}); //end on loadedmetadata
}); //end ready
</script>
Le code génère une sortie comme indiqué dans la capture d'écran suivante. Noter la id les valeurs ne reçoivent pas de valeur lors de l'utilisation de VTTCue()
méthode constructeur.

ID3 et points de repère média
Si vous avez des points de repère ID3 ou des points de repère média associés à votre média, vous pouvez les traiter en utilisant le id3CuePointsTrack()
et mediaCuePointsTrack()
méthodes. Par exemple, pour écouter les changements de point de repère, vous utiliserez ce qui suit:
videojs.getPlayer('myPlayerID').ready(function () {
var myPlayer = this;
myPlayer.one("canplay", function () {
myPlayer.id3CuePointsTrack().on('cuechange', function () {
// process cue point here
});
});
});
Détails ID3
Les éléments suivants fournissent plus d'informations sur l'utilisation des points de repère ID3:
- Les balises ID3 peuvent être utilisées pour insérer des métadonnées chronométrées dans le flux.
- Vous pouvez avoir plusieurs trames ID3 par segment.
- Brightcove Player analyse les points de repère ID3 et les expose en tant que piste de texte, en utilisant les
id3CuePointsTrack()
méthode. - Il est recommandé d'attendre le
canplay
événement ou il est possible que la piste ne soit pas récupérable en essayant d'y accéder. - Plusieurs cadres par balise sont pris en charge.
Problèmes connus
- Sur Safari, les points de repère ne se déclenchent pas si l'heure de fin est égale à l'heure de début. Donc, si la compatibilité Safari est un problème, les points de repère ont besoin d'une durée supérieure à zéro.