In qualità di editore di video, potresti voler impedire ai tuoi spettatori di andare avanti oltre gli annunci mid-roll. Quando un utente avanza oltre un'interruzione pubblicitaria, puoi riportarlo all'inizio dell'interruzione pubblicitaria e poi alla posizione che aveva raggiunto dopo che l'interruzione pubblicitaria è terminata. Questa funzionalità si chiama "ritorno".
Ad esempio, vedi il diagramma riportato di seguito. Lo spettatore sta guardando un video e decide di passare dal minuto 5 al minuto 15. Tuttavia, c'è un'interruzione pubblicitaria al minuto 10 che vuoi che guardino prima di poter guardare i contenuti successivi:
Per mostrare questa interruzione pubblicitaria, segui questi passaggi:
- Controlla se l'utente ha eseguito un avanzamento che ha saltato un'interruzione pubblicitaria non guardata e, in caso affermativo, riportalo all'interruzione pubblicitaria.
- Al termine dell'interruzione pubblicitaria, riporta l'utente alla posizione di avanzamento originale.
In forma di diagramma, la formula è la seguente:
Ecco come implementare questo flusso di lavoro nell'SDK IMA DAI, come fatto in AdvancedExample.
Impedire che una ricerca lasci un'interruzione pubblicitaria non visualizzata
Controlla se l'utente ha eseguito una ricerca che ha superato un'interruzione pubblicitaria non visualizzata e, in caso affermativo, riportalo all'interruzione pubblicitaria. Per l'esempio avanzato di iOS, utilizza l'interazione dell'utente con la tua UI per rilevare quando ha eseguito una ricerca. Conserva l'ora di inizio della ricerca per verificare se è stata superata un'interruzione pubblicitaria non riprodotta durante la ricerca. Quando l'utente rilascia i controlli del video, confronta l'ora corrente con l'ora dell'interruzione pubblicitaria più recente. Se l'interruzione pubblicitaria si verifica dopo l'ora di inizio dell'avanzamento (ovvero l'utente l'ha saltata) e non è ancora stata riprodotta, riporta l'utente all'inizio dell'interruzione pubblicitaria. Inoltre, imposta un flag di ripristino da controllare in un secondo momento nel gestore di completamento della pausa 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)];
}
}
Riportare l'utente alla posizione di riproduzione originale
Nel gestore ad-break-ended, verifica se la pausa precedente è stata riprodotta a seguito di un'interruzione. In questo caso, riporta l'utente alla posizione che stava cercando inizialmente (a condizione che non fosse la 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;
}
}
}