Se você é editor de vídeo, talvez queira impedir que os espectadores escondam seus anúncios intermediários. Quando um usuário passa por um intervalo de anúncio, é possível voltar ao início dele e retornar ao local de busca depois que o intervalo for concluído. Esse recurso é chamado de "snapback".
Como exemplo, veja o diagrama abaixo. Seu espectador está assistindo um vídeo e decide passar da marca de 5 a 15 minutos. No entanto, há um intervalo de anúncio na marca de 10 minutos que você quer que eles assistam antes que possam assistir ao conteúdo depois dele:
Para mostrar esse intervalo de anúncio, siga estas etapas:
- Confira se o usuário fez uma busca que ultrapassou um intervalo de anúncio não assistido e, em caso afirmativo, retorne a ele.
- Quando o intervalo de anúncio terminar, retorne à busca original.
Em forma de diagrama, o código fica assim:
Veja como implementar esse fluxo de trabalho no SDK do IMA para tvOS, conforme feito em AdvancedExample.
Evitar uma busca de deixar um intervalo de anúncio sem visualização
Confira se o usuário executou uma busca que ultrapassou um intervalo de anúncio não assistido.
Caso tenha feito isso, leve-o de volta a ele.
O exemplo avançado do tvOS usa AVPlayerViewController
,
que tem um método delegado para informar que o usuário executou uma busca.
Se o tempo de início da busca vier antes do intervalo de anúncio anterior (ou seja,
o usuário ultrapassou-o) e esse intervalo ainda não tiver sido reproduzido,
volte ao início do intervalo. Além disso, registre o horário de início da
busca solicitada inicialmente para verificar mais tarde no gerenciador 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]; } } }
Levar o usuário de volta à busca original
No delegado do evento, modifique o caso AD_BREAK_ENDED
para verificar se o
intervalo de anúncio anterior foi reproduzido como resultado do ajuste.
- (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; } }