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 instrukcje 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 przypadku przykładu zaawansowanego dla iOS użyj interakcji użytkownika z interfejsem, aby wykryć, kiedy wykonał on przewijanie. Zachowaj czas rozpoczęcia przewijania, aby sprawdzić, czy użytkownik pominął nieodtwarzaną przerwę na reklamę. Gdy użytkownik zwolni elementy sterujące odtwarzaniem, porównaj bieżący czas z czasem ostatniej przerwy na reklamy. Jeśli przerwa na reklamę przypada po czasie rozpoczęcia przewijania (co oznacza, że użytkownik ją pominął) i nie została jeszcze odtworzona, cofnij odtwarzanie do początku przerwy na reklamę. Ustaw też flagę powrotu do poprzedniego stanu, aby sprawdzić ją później w obsłudze zakończenia bloku reklamowego:

- (IBAction)videoControlsTouchStarted:(id)sender {
  self.seekStartTime = self.contentPlayer.currentTime;
}

- (IBAction)videoControlsTouchEnded:(id)sender {
  self.seekEndTime = CMTimeMake(self.progressBar.value, 1);
  IMACuepoint *lastCuepoint =
      [self.streamManager previousCuepointForStreamTime:CMTimeGetSeconds(self.seekEndTime)];
  if (!lastCuepoint.played && (lastCuepoint.startTime > CMTimeGetSeconds(self.seekStartTime))) {
    self.snapbackMode = YES
    // Add 1 to the seek time to get the keyframe at the start of the ad to be your landing place.
    [self.contentPlayer seekToTime:CMTimeMakeWithSeconds(lastCuepoint.startTime + 1, NSEC_PER_SEC)];
  }
}

Przywróć użytkownikowi pierwotne miejsce odtwarzania

W obsłudze zdarzenia ad-break-ended sprawdź, czy poprzednia przerwa została odtworzona w wyniku powrotu do poprzedniego stanu. Jeśli tak, przywróć użytkownikowi miejsce, do którego chciał przejść (o ile nie było to w trakcie właśnie odtworzonej przerwy na reklamę):

- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event {
  switch (event.type) {
    case kIMAAdEvent_AD_BREAK_ENDED: {
      if (self.snapbackMode) {
        self.snapbackMode = NO;
        if (CMTimeCompare(self.seekEndTime, self.contentPlayer.currentTime)) {
          [self.contentPlayer seekToTime:self.seekEndTime];
        }
      }
      break;
    }
  }
}