Revenir à une coupure publicitaire ignorée

Sélectionnez une plate-forme : HTML5 Android iOS tvOS Roku

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 :

  1. 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.
  2. 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 le retour rapide à l'aide du SDK IMA pour l'insertion dynamique d'annonces, comme illustré 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. L'exemple avancé tvOS utilise AVPlayerViewController, qui comporte une méthode de délégué pour vous indiquer que l'utilisateur a effectué une recherche. Si l'heure de début de la recherche est antérieure à la coupure publicitaire précédente (ce qui signifie que l'utilisateur l'a ignorée) et que cette coupure n'a pas encore été diffusée, ramenez l'utilisateur au début de la coupure publicitaire. Enregistrez également l'heure de début de la recherche initialement demandée pour la vérifier ultérieurement dans votre gestionnaire 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];
    }
  }
}

Ramener l'utilisateur à la position de recherche d'origine

Dans votre délégué d'événement, modifiez le cas AD_BREAK_ENDED pour vérifier si l'insertion publicitaire précédente a été lue à la suite d'un retour en arrière.


- (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;
  }
}