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 decyduje się 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 reklamę, wykonaj te czynności:
- Sprawdź, czy użytkownik przewinął nieobejrzaną przerwę na reklamę, i w takim przypadku cofnij odtwarzanie do tej przerwy.
- Po zakończeniu przerwy na reklamę odtwarzanie jest wznawiane od miejsca przewinięcia.
W formie diagramu wygląda to tak:

Oto jak zaimplementować ten przepływ pracy w pakiecie IMA DAI SDK, tak jak w przypadku AdvancedExample.
Zapobieganie pomijaniu przerw na reklamę
Sprawdź, czy użytkownik przewinął film poza nieobejrzaną przerwę na reklamy, i w takim przypadku 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 wstawienia przed czasem wyszukiwania użytkownika. Jeśli nie została odtworzona, przejdź na początek tej przerwy na reklamę zamiast do początkowego punktu, do którego użytkownik chciał przejść, i zapisz ten punkt 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 pierwotną pozycję
Gdy otrzymasz zdarzenie onAdBreakEnded, sprawdź, czy ustawiona jest wartość snapBackTime. Jeśli tak, przenieś użytkownika do tego miejsca w strumieniu, ponieważ przerwa na reklamę, którą właśnie obejrzał, była wynikiem cofnięcia do przerwy na reklamę:
@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;
}