Snapback

Als Video-Publisher möchtest du vielleicht verhindern, dass Zuschauer an deinen Mid-Roll-Anzeigen vorbeischauen. Wenn ein Nutzer nach einer Werbeunterbrechung springt, kannst du ihn zum Beginn der Werbeunterbrechung und dann nach Abschluss der Werbeunterbrechung an seine Suchposition zurückbringen. Diese Funktion wird als „Snapback“ bezeichnet.

Ein Beispiel finden Sie im Diagramm unten. Ein Zuschauer sieht sich ein Video an und springt zwischen 5 Minuten und 15 Minuten. Es gibt allerdings eine Werbeunterbrechung nach 10 Minuten, die Zuschauer sehen sollen, bevor sie sich den Inhalt danach ansehen können:

So kannst du diese Werbeunterbrechung präsentieren:

  1. Prüfe, ob der Nutzer eine Suche ausgeführt hat, die eine nicht angesehene Werbeunterbrechung überspringt hat. Wenn ja, fahre mit der Werbeunterbrechung zurück.
  2. Nach Abschluss der Werbeunterbrechung kannst du sie wieder in die ursprüngliche Suche verschieben.

In Diagrammform sieht das so aus:

Im folgenden Beispiel wird beschrieben, wie dieser Workflow im IMA DAI SDK wie unter AdvancedExample implementiert wird.

Verhindern, dass eine Suche eine Werbeunterbrechung ungesehene verlässt

Prüfe, ob der Nutzer eine Suche nach einer nicht angesehenen Werbeunterbrechung ausgeführt hat. Wenn ja, kehre zur Werbeunterbrechung zurück. Verwende im Android SDK das Objekt PlayerControl, um Suchen zu erkennen. Wenn der Nutzer sucht, löst du die Methode onSeek() des von SampleAdsWrapper implementierten SampleHlsVideoPlayerCallback aus. Bei dieser Methode (unten dargestellt) wird der Cue-Punkt vor der Suchzeit des Nutzers geprüft. Wenn sie nicht wiedergegeben wird, suche zum Anfang der Werbeunterbrechung und nicht zum anfänglichen gewünschten Suchpunkt und speichere diesen gewünschten Suchpunkt in 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));
}

Nutzer zurück zu ihrer ursprünglichen Suche versetzen

Wenn Sie jetzt ein onAdBreakEnded-Ereignis erhalten, prüfen Sie, ob snapBackTime festgelegt ist. Wenn ja, leite den Nutzer zu diesem Punkt im Stream, da die Werbeunterbrechung, die er gerade angesehen hat, das Ergebnis eines Snaps ist:

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