Snapback

Jako wydawca filmów możesz chcieć zapobiec wyświetlaniu reklam w trakcie filmu. Gdy użytkownik przechodzi do wyników wyszukiwania poza przerwą na reklamę, możesz cofnąć się do początku przerwy na reklamę i wrócić do miejsca, w którym znajdował się wyszukiwane hasło po zakończeniu przerwy na reklamę. Funkcja ta nosi nazwę „snapback”.

Przykład znajduje się na diagramie poniżej. Widz ogląda film i postanawia przewinąć od znacznika 5 minut do 15 minut. Po 10 minutach filmu pojawia się przerwa na reklamę, którą użytkownik chce obejrzeć, zanim będzie mógł obejrzeć kolejną:

Aby wyświetlać tę przerwę na reklamę, wykonaj te czynności:

  1. Sprawdź, czy użytkownik uruchomił wyszukiwanie, które przekroczyło nieobejrzaną przerwę na reklamę, a jeśli tak, wróć do przerwy na reklamę.
  2. Po zakończeniu przerwy na reklamę wróć do pierwotnego wyszukiwania.

W formie diagramu wygląda to tak:

Oto jak wdrożyć ten przepływ pracy w pakiecie IMA DAI SDK w sposób podany w AdvancedExample.

Zapobieganie wyświetlaniu przerwy na reklamę przez wyszukiwanie

Sprawdź, czy użytkownik uruchomił wyszukiwanie, które przekroczyło nieobejrzaną przerwę na reklamę, a jeśli tak, przywróć mu przerwę na reklamę. Aby wykryć przewijanie, w pakiecie SDK Androida użyj obiektu PlayerControl. Gdy użytkownik wykonuje wyszukiwanie, aktywuj metodę onSeek() obiektu SampleHlsVideoPlayerCallback zaimplementowanego przez SampleAdsWrapper. Ta metoda (pokazana poniżej) sprawdza punkt wstawienia reklamy przed czasem wyszukiwania użytkownika. Jeśli reklama nie jest odtworzona, przejdź do początku przerwy na reklamę zamiast początkowego żądanego punktu wyszukiwania i zapisz ten punkt w polu 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));
}

Przywróć użytkownika do pierwotnego wyszukiwania.

Teraz po otrzymaniu zdarzenia onAdBreakEnded sprawdź, czy jest ustawione snapBackTime. Jeśli tak, skieruj użytkownika do tego momentu, ponieważ przerwa na reklamę, którą właśnie obejrzał, była wynikiem przywrócenia:

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