Snapback

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

Vous trouverez un exemple dans le schéma ci-dessous. Votre spectateur regarde une vidéo et décide de parcourir la plage de 5 minutes à 15 minutes. Toutefois, vous souhaitez qu'il regarde une coupure publicitaire au bout de 10 minutes avant de pouvoir regarder le contenu suivant:

Pour afficher 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, revenez à la coupure publicitaire.
  2. Une fois la coupure publicitaire terminée, rétablissez leur recherche d'origine.

Sous la forme d'un diagramme, cela ressemble à ceci:

Voici comment implémenter ce workflow dans le SDK IMA pour l'insertion dynamique d'annonce, comme indiqué dans la section AdvancedExample.

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

Vérifiez si l'utilisateur a effectué une recherche qui a dépassé une coupure publicitaire non visionnée et, le cas échéant, retournez-le à la coupure publicitaire. Dans le SDK Android, utilisez l'objet PlayerControl pour détecter la recherche. Lorsque l'utilisateur recherche, déclenche la méthode onSeek() de l'SampleHlsVideoPlayerCallback implémentée par SampleAdsWrapper. Cette méthode (présentée ci-dessous) vérifie le point de repère avant le temps 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 snapBackTime.

@Override
public void onSeek(int timeMillis) {
  double timeToSeek = timeMillis;
  if (streamManager != null) {
    CuePoint cuePoint =
        streamManager.getPreviousCuePointForStreamTime(timeMillis / 1000);
    if (cuePoint != null && !cuePoint.isPlayed()) {
      snapBackTime = timeToSeek / 1000.0; // Update snapback time.
      // Missed cue point, so snap back to the beginning of cue point.
      timeToSeek = cuePoint.getStartTime() * 1000;
      videoPlayer.seek(Math.round(timeToSeek));
      videoPlayer.setCanSeek(false);
      return;
    }
  }
  videoPlayer.seek(Math.round(timeToSeek));
}

Replacer l'utilisateur à sa recherche initiale

À présent, lorsque vous recevez un événement onAdBreakEnded, vérifiez si snapBackTime est défini. Si tel est le cas, dirigez l'utilisateur vers ce point du flux, car la coupure publicitaire qu'il vient de regarder est due à un retour rapide:

@Override
public void onAdBreakEnded() {
  // Re-enable player controls.
  videoPlayer.setCanSeek(true);
  videoPlayer.enableControls(true);
  if (snapBackTime > 0) {
    videoPlayer.seek(Math.round(snapBackTime * 1000));
  }
  snapBackTime = 0;
}