Snapback

Als Video-Publisher möchten Sie vielleicht verhindern, dass Nutzer Ihre Mid-Roll-Anzeigen überspringen. Wenn ein Nutzer nach einer Werbeunterbrechung springt, kannst du ihn an den Beginn der Werbeunterbrechung und nach Abschluss der Werbeunterbrechung zurückholen. Diese Funktion wird als „Snapback“ bezeichnet.

Ein Beispiel sehen Sie im Diagramm unten. Der Zuschauer sieht sich ein Video an und stuft zwischen 5 Minuten und 15 Minuten. Nach 10 Minuten gibt es jedoch eine Werbeunterbrechung, die Nutzer sehen sollen, bevor sie sich den Inhalt danach ansehen können:

So kannst du die Werbeunterbrechung schalten:

  1. Prüfe, ob der Nutzer eine Suche ausgeführt hat, die eine nicht gesehene Werbeunterbrechung überspringt hat. Wenn ja, kehre zur Werbeunterbrechung zurück.
  2. Wenn die Werbeunterbrechung abgeschlossen ist, kehre zur ursprünglichen Suche zurück.

In Diagrammform sieht das so aus:

Im folgenden Beispiel wird beschrieben, wie dieser Workflow im Android IMA SDK implementiert wird (siehe AdvancedExample).

Verhindern, dass eine Suche eine Werbeunterbrechung unbeobachtet verlässt

Prüfe, ob der Nutzer eine Suche ausgeführt hat, die über eine nicht angesehene Werbeunterbrechung hinausgeht. 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 onSeek()-Methode der SampleHlsVideoPlayerCallback aus, die durch SampleAdsWrapper implementiert wurde. Mit dieser Methode (siehe unten) wird der Cue-Punkt vor der Suchzeit des Nutzers geprüft. Wenn sie nicht wiedergegeben wird, suche zum Anfang der Werbeunterbrechung statt zum gewünschten anfänglichen 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));
}

Den Nutzer zu seiner ursprünglichen Suche zurückversetzen

Wenn Sie jetzt ein onAdBreakEnded-Ereignis erhalten, prüfen Sie, ob snapBackTime festgelegt ist. Wenn ja, leite den Nutzer zu dieser Stelle im Stream, da die gerade angesehene Werbeunterbrechung 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;
}