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:
- Sprawdź, czy użytkownik przewinął nieobejrzaną przerwę na reklamę, a jeśli tak, cofnij go do tej przerwy.
- 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;
}