Snapback

In qualità di publisher di video, potresti voler impedire agli spettatori di saltare gli annunci mid-roll. Quando un utente salta un'interruzione pubblicitaria, puoi riportarlo all'inizio dell'interruzione e poi alla posizione di avanzamento al termine dell'interruzione. Questo è chiamata "snapback".

Ad esempio, consulta il diagramma seguente. Lo spettatore sta guardando un video e decide di andare dalla soglia dei 5 minuti fino al limite dei 15 minuti. C'è, tuttavia, un'interruzione pubblicitaria al contrassegno dei 10 minuti che vorresti prima di poter guardare i contenuti successivi:

Per visualizzare questa interruzione pubblicitaria:

  1. Controllare se l'utente ha eseguito una ricerca saltata oltre un'interruzione pubblicitaria non guardata. e, in questo caso, riportali all'interruzione pubblicitaria.
  2. Al termine dell'interruzione pubblicitaria, riportali alla ricerca originale.

Il diagramma ha il seguente aspetto:

Di seguito viene spiegato come implementare questo flusso di lavoro nell'SDK IMA DAI, come illustrato nella AdvancedExample.

Impedire che una ricerca lasci un'interruzione pubblicitaria non guardata

Controlla se l'utente ha eseguito una ricerca successiva a un'interruzione pubblicitaria non guardata e, in questo caso, riportali all'interruzione pubblicitaria. Per l'esempio iOS Advanced, utilizza l'interazione dell'utente con l'interfaccia utente a rilevare quando è stata eseguita una ricerca. Mantieni l'ora di inizio della ricerca da controllare se hanno superato un'interruzione pubblicitaria non riprodotta durante la ricerca. Quando l'utente rilascia i controlli video, confronta l'ora corrente con quella l'interruzione pubblicitaria più recente. Se l'interruzione pubblicitaria cade dopo l'inizio della ricerca volta (ovvero che l'utente l'ha superata) e che il video non sia stato ancora riprodotto, cercalo di nuovo fino all'inizio dell'interruzione pubblicitaria. Imposta anche un flag di snapshot da controllare più avanti nel gestore del completamento dell'interruzione pubblicitaria:

- (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)];
  }
}

Riporta l'utente alla ricerca originale

Nel gestore dell'interruzione pubblicitaria, verifica se la precedente è stata riprodotta come risultato dello snapshot. In questo caso, restituisci l'utente al luogo in cui stavano cercando di cercare inizialmente (purché non era a metà dell'interruzione pubblicitaria appena riprodotta):

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