Snapback

En tant qu'éditeur de vidéos, vous voulez peut-être empêcher vos spectateurs après avoir regardé vos annonces mid-roll. Lorsqu'un utilisateur cherche au-delà d'une coupure publicitaire, vous pouvez les rediriger au début de la coupure publicitaire, vers l'emplacement recherché une fois la coupure publicitaire terminée. Ce est appelée « snapback ».

À titre d'exemple, consultez le schéma ci-dessous. votre spectateur regarde une vidéo ; et décide de passer de 5 à 15 minutes. En revanche, il y a une coupure publicitaire au bout de 10 minutes avant de pouvoir regarder le contenu après:

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

  1. Vérifier si l'utilisateur a lancé une recherche qui dépasse une coupure publicitaire non visionnée Si c'est le cas, redirigez-les vers la coupure publicitaire.
  2. Une fois la coupure publicitaire terminée, faites revenir l'utilisateur à sa recherche initiale.

Sous forme de diagramme, cela se présente comme suit:

Voici comment implémenter ce processus dans le SDK IMA DAI AdvancedExample.

Empêcher une recherche de laisser une coupure publicitaire sans visionnage

Vérifier si l'utilisateur a effectué une recherche après une coupure publicitaire non visionnée Si c'est le cas, redirigez-les vers la coupure publicitaire. Dans le SDK Android, utilisez l'objet PlayerControl pour détecter la recherche. Lorsque l'utilisateur effectue une recherche, déclenchez la méthode onSeek() de SampleHlsVideoPlayerCallback implémenté par SampleAdsWrapper. Cette méthode (présentée ci-dessous) vérifie le point de repère avant l'appel rechercher une heure. Si elle n'est pas lue, rechercher le début de la coupure publicitaire au lieu du point de recherche initial souhaité et enregistrer cette recherche point 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));
}

Renvoyer l'utilisateur à sa recherche initiale

Lorsque vous recevez un événement onAdBreakEnded, vérifiez si snapBackTime est définie. Si c'est le cas, dirigez l'utilisateur vers ce point du flux, car l'annonce une pause qu'ils viennent de regarder est le résultat d'un Snapback:

@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;
}