Snapback

En tant qu'éditeur de vidéos, vous voulez peut-être empêcher vos spectateurs après avoir regardé vos annonces mid-roll. Lorsqu'un utilisateur cherche au-delà d'une coupure publicitaire, vous pouvez les rediriger au début de la coupure publicitaire, vers l'emplacement recherché une fois la coupure publicitaire terminée. Ce est appelée « snapback ».

À titre d'exemple, consultez le schéma ci-dessous. votre spectateur regarde une vidéo ; et décide de passer de 5 à 15 minutes. En revanche, il y a une coupure publicitaire au bout de 10 minutes avant de pouvoir regarder le contenu après:

Pour diffuser cette coupure publicitaire, procédez comme suit:

  1. Vérifier si l'utilisateur a lancé une recherche qui dépasse une coupure publicitaire non visionnée Si c'est le cas, redirigez-les vers la coupure publicitaire.
  2. Une fois la coupure publicitaire terminée, faites revenir l'utilisateur à sa recherche initiale.

Sous forme de diagramme, cela se présente comme suit:

Voici comment mettre en œuvre ce processus dans le SDK IMA DAI, comme dans AdvancedExample.

Empêcher une recherche de laisser une coupure publicitaire sans visionnage

Vérifier si l'utilisateur a effectué une recherche après une coupure publicitaire non visionnée Si c'est le cas, redirigez-les vers la coupure publicitaire. Pour l'exemple avancé d'iOS, utilisez l'interaction de l'utilisateur avec votre interface utilisateur. pour détecter quand il a lancé une recherche. Conserver l'heure de début de la recherche pour la vérification s'il dépasse une coupure publicitaire non lue dans sa recherche. Lorsque l'utilisateur les commandes vidéo, de comparer leur heure actuelle à l'heure la coupure publicitaire la plus récente. Si la coupure publicitaire tombe après le début de la recherche (si l'utilisateur l'a dépassé) et qu'elle n'a pas encore été jouée, pour qu'il retourne au début de la coupure publicitaire. Définir également un indicateur de rappel rapide pour vérifier plus tard dans votre gestionnaire de coupure publicitaire complète:

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

Renvoyer l'utilisateur à sa recherche initiale

Dans votre gestionnaire de fin de coupure publicitaire, vérifiez si la coupure 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 d'avancer initialement (à condition qu'il ne s'agisse pas du milieu de la coupure publicitaire qui vient de s'afficher) :

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