En tant qu'éditeur de vidéos, vous pouvez empêcher vos spectateurs de passer les annonces mid-roll. Lorsqu'un utilisateur passe une coupure publicitaire en sélectionnant un point précis de la vidéo, vous pouvez le ramener au début de cette coupure, puis le renvoyer à cet emplacement, une fois la coupure publicitaire terminée. Cette fonctionnalité est appelée "retour rapide".
Par exemple, consultez le diagramme ci-dessous. Votre spectateur regarde une vidéo et décide de passer de la 5e à la 15e minute. Toutefois, il y a une coupure publicitaire à 10 minutes que vous souhaitez qu'ils regardent avant de pouvoir regarder le contenu qui suit :
Pour afficher cet emplacement publicitaire, procédez comme suit :
- Vérifiez si l'utilisateur a effectué une recherche qui a sauté une coupure publicitaire non regardée et, le cas échéant, ramenez-le à la coupure publicitaire.
- Une fois la coupure publicitaire terminée, renvoyez-le à l'emplacement de la vidéo qu'il avait sélectionné.
Sous forme de diagramme, cela se présente comme suit :
Voici comment implémenter ce workflow dans le SDK IMA DAI, comme dans AdvancedExample.
Empêcher une avance rapide de laisser une coupure publicitaire non regardée
Vérifiez si l'utilisateur a effectué une recherche qui a dépassé une coupure publicitaire non regardée et, le cas échéant, ramenez-le à la coupure publicitaire. Pour l'exemple avancé iOS, utilisez l'interaction de l'utilisateur avec votre UI pour détecter quand il a effectué une recherche. Conservez l'heure de début de la recherche pour vérifier si l'utilisateur a passé une coupure publicitaire non lue lors de sa recherche. Lorsque l'utilisateur relâche les commandes vidéo, comparez le temps actuel à celui de la dernière pause publicitaire. Si la coupure publicitaire se trouve après l'heure de début de la recherche (ce qui signifie que l'utilisateur l'a ignorée) et qu'elle n'a pas encore été diffusée, ramenez-le au début de la coupure publicitaire. Définissez également un indicateur de retour en arrière pour vérifier plus tard dans votre gestionnaire de fin d'insertion publicitaire :
- (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)];
}
}
Ramener l'utilisateur à la position de recherche d'origine
Dans votre gestionnaire d'événement "ad-break-ended", vérifiez si l'insertion précédente a été lue à la suite d'un retour en arrière. Si c'est le cas, renvoyez l'utilisateur à l'endroit où il essayait de se rendre initialement (à condition qu'il ne s'agisse pas du milieu de la coupure publicitaire qui vient d'être diffusée) :
- (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;
}
}
}