Como publicador del video, recomendamos que evites que tus usuarios que buscan más allá de los anuncios durante el video. Cuando un usuario busca más allá de una pausa publicitaria puedes regresar al inicio de la pausa y luego regresar a su ubicación de búsqueda después de que se complete la pausa publicitaria. Esta se llama "restablecimiento automático".
Como ejemplo, consulta el siguiente diagrama. Si el usuario está mirando un video y decide saltar de la marca de 5 a la de 15 minutos. Sin embargo, hay una pausa publicitaria a los 10 minutos que quieres que lo vean antes de poder ver el contenido después:
Para mostrar esta pausa publicitaria, sigue estos pasos:
- Verifica si el usuario realizó un salto que pasó una pausa publicitaria sin mirar. y, si es así, lleva al usuario a la pausa publicitaria.
- Una vez finalizada la pausa publicitaria, regresa a su búsqueda original.
En forma de diagrama, se vería así:
A continuación, se muestra cómo implementar Snapback con el SDK de IMA de DAI, como se muestra en AdvancedExample.
Cómo evitar que una búsqueda deje una pausa publicitaria sin mirar
Verificar si el usuario realizó un salto que pasó una pausa publicitaria sin mirar
y, si es así, lleva al usuario
a la pausa publicitaria.
El ejemplo avanzado de tvOS aprovecha AVPlayerViewController
,
que tiene un método delegado para indicarte que el usuario ejecutó un salto.
Si la hora de inicio de la búsqueda se produce antes de la pausa publicitaria anterior (es decir, el usuario la omitió) y esa pausa aún no se reproduce, vuelve a buscar el inicio de la pausa publicitaria. Además, registra la hora de inicio del
primero solicitó buscar la función para verificarla más tarde en tu controlador 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]; } } }
Cómo regresar al usuario a su salto original
En el delegado del evento, modifica el caso AD_BREAK_ENDED
para verificar si el
Se reprodujo la pausa publicitaria anterior como resultado del restablecimiento automático.
- (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; } }