Powrót do pominiętej przerwy na reklamę

Wybierz platformę: HTML5 Android iOS tvOS Roku

Jako wydawca filmów możesz chcieć uniemożliwić widzom przewijanie reklam w trakcie filmu. Gdy użytkownik przewinie przerwę na reklamę, możesz cofnąć odtwarzanie do początku tej przerwy, a następnie po jej zakończeniu wrócić do miejsca przewinięcia. Ta funkcja nazywa się „snapback”.

Przykład znajdziesz na diagramie poniżej. Widz ogląda film i postanawia przewinąć go z 5 minuty do 15 minuty. W 10 minucie filmu znajduje się jednak przerwa na reklamę, którą chcesz wyświetlić użytkownikom przed odtworzeniem dalszej części filmu:

Aby wyświetlić tę przerwę na reklamy, wykonaj te czynności:

  1. Sprawdź, czy użytkownik przewinął nieobejrzaną przerwę na reklamę, a jeśli tak, cofnij go do tej przerwy.
  2. Po zakończeniu przerwy na reklamę odtwarzanie jest wznawiane od miejsca przewinięcia.

Na diagramie wygląda to tak:

Poniżej znajdziesz opis implementacji tego przepływu pracy w pakiecie IMA DAI SDK, tak jak w przypadku AdvancedExample.

Zapobieganie pomijaniu przerw na reklamy

Sprawdź, czy użytkownik przewinął film poza nieobejrzaną przerwę na reklamę, a jeśli tak, cofnij go do tej przerwy. W pakiecie Android SDK użyj obiektu PlayerControl, aby wykrywać przewijanie. Gdy użytkownik przewija, wywołaj metodę onSeek() interfejsu SampleHlsVideoPlayerCallback zaimplementowanego przez SampleAdsWrapper. Ta metoda (przedstawiona poniżej) sprawdza punkt wskazujący przed czasem wyszukiwania użytkownika. Jeśli nie została odtworzona, przejdź na początek tej przerwy na reklamę zamiast do początkowego żądanego punktu odtwarzania i zapisz ten żądany punkt odtwarzania w 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żytkownikowi pierwotne miejsce odtwarzania

Teraz, gdy otrzymasz zdarzenie onAdBreakEnded, sprawdź, czy ustawiona jest wartość snapBackTime. Jeśli tak, przenieś użytkownika do tego miejsca w strumieniu, ponieważ blok reklamowy, który właśnie obejrzał, był wynikiem powrotu do poprzedniego stanu:

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