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 la funzionalità di ripristino utilizzando l'SDK IMA DAI, come illustrato 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.
L'esempio avanzato di tvOS utilizza AVPlayerViewController
,
che ha un metodo delegato per comunicare che l'utente ha eseguito una ricerca.
Se l'ora di inizio della ricerca è precedente all'interruzione pubblicitaria precedente (ovvero
l'utente l'ha saltata) e l'interruzione non è ancora stata riprodotta,
riporta l'utente all'inizio dell'interruzione pubblicitaria. Inoltre, registra l'ora di inizio della
ricerca inizialmente richiesta da controllare in un secondo momento nel gestore ad-break-did-end
:
- (void)playerViewController:(AVPlayerViewController *)playerViewController willResumePlaybackAfterUserNavigatedFromTime:(CMTime)oldTime toTime:(CMTime)targetTime { if (self.streamManager) { IMACuepoint *prevCuepoint = [self.streamManager previousCuepointForStreamTime:CMTimeGetSeconds(targetTime)]; if (prevCuepoint && !prevCuepoint.isPlayed && oldTime < prevCuepoint.startTime) { self.userSeekTime = CMTimeGetSeconds(targetTime); [self.playerViewController.player seekToTime:CMTimeMakeWithSeconds( prevCuepoint.startTime, NSEC_PER_SEC) toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; } } }
Riportare l'utente alla posizione di riproduzione originale
Nel delegato dell'evento, modifica il caso AD_BREAK_ENDED
per verificare se la
pausa pubblicitaria precedente è stata riprodotta a seguito dello snapback.
- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event { NSLog(@"StreamManager event (%@).", event.typeString); switch (event.type) { // Your other events go here as normal. case kIMAAdEvent_AD_BREAK_ENDED: { if (self.userSeekTime > 0) { self.playerViewController.player seekToTime:CMTimeMakeWithSeconds(self.userSeekTime, NSEC_PER_SEC) toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; self.userSeekTime = 0; // existing handling for AD_BREAK_ENDED goes here. break; } // And so on for other events. default: break; } }