Snapback

En tant qu'éditeur de vidéos, vous souhaitez peut-être empêcher les internautes de rechercher vos annonces mid-roll. Lorsqu'un utilisateur recherche après une coupure publicitaire, vous pouvez le ramener au début de celle-ci, puis le renvoyer à son emplacement de recherche une fois la coupure publicitaire terminée. Cette fonctionnalité s'appelle "snapback".

À titre d'exemple, consultez le schéma ci-dessous. Lorsqu'un spectateur regarde une vidéo, il décide de s'étendre sur une période allant de 5 minutes à 15 minutes. En revanche, vous souhaitez qu'ils regardent une coupure publicitaire au bout de 10 minutes avant de pouvoir regarder le contenu suivant:

Pour diffuser cette coupure publicitaire, procédez comme suit:

  1. Vérifiez si l'utilisateur a exécuté une recherche qui a dépassé une coupure publicitaire non visionnée et, le cas échéant, renvoyez-le à la coupure.
  2. Une fois la coupure publicitaire terminée, rétablissez la recherche d'origine.

Sous forme de diagramme, cela ressemble à ceci:

Voici comment implémenter ce workflow dans le SDK IMA HTML5, comme indiqué dans l'exemple avancé.

Empêcher une recherche de laisser une coupure publicitaire non visionnée

Vérifiez si l'utilisateur a effectué une recherche après une coupure publicitaire non visionnée et, le cas échéant, redirigez-le vers la coupure. Dans le SDK HTML5, définissez un écouteur d'événements sur l'événement seeked du lecteur de contenu pour déclencher onSeekEnd(). Cette méthode (présentée ci-dessous) vérifie le point de repère avant l'heure de recherche de l'utilisateur. S'il n'est pas lu, recherchez le début de cette coupure publicitaire au lieu du point de recherche initial souhaité, puis enregistrez ce point de recherche souhaité dans snapForwardTime.

function onSeekEnd() {
  if (isLiveStream) { return; }
  if (isSnapback) {
    isSnapback = false;
    return;
  }
  var currentTime = videoElement.currentTime;
  var previousCuePoint =
      streamManager.previousCuePointForStreamTime(currentTime);
  if (previousCuePoint && !previousCuePoint.played) {
    isSnapback = true;
    snapForwardTime = currentTime;
    videoElement.currentTime = previousCuePoint.start;
}

Revenir à la recherche initiale de l'utilisateur

À présent, lorsque vous obtenez un événement AD_BREAK_ENDED, vérifiez si snapForwardTime est défini. Si tel est le cas, redirigez l'utilisateur vers ce point du flux, car la coupure publicitaire qu'il vient de regarder est le résultat d'un retour rapide:

function onAdBreakEnded(e) {
  videoElement.controls = true;
  clickElement.style.display = 'none';
  adUiDiv.style.display = 'none';
  if (snapForwardTime && snapForwardTime > videoElement.currentTime) {
    videoElement.currentTime = snapForwardTime;
    snapForwardTime = null;
  }
}