Snapback

Como editor de vídeo, talvez você queira evitar que seus espectadores além dos anúncios intermediários. Quando um usuário pula um intervalo de anúncio, é possível levá-lo de volta ao início desse intervalo e, em seguida, retornar ao ponto do vídeo procurado pelo usuário. Isso é chamado de "Snapback".

Como exemplo, veja o diagrama abaixo. O espectador estiver assistindo um vídeo, e decide procurar da marca de 5 para a de 15 minutos. No entanto, há um intervalo de anúncio de 10 minutos que você quer que eles assistam antes de poderem assistir o conteúdo depois dele:

Para mostrar esse intervalo de anúncio, siga estas etapas:

  1. Verifique se o usuário executou uma busca que ultrapassou um intervalo de anúncio não assistido. Em caso afirmativo, leve-o de volta ao intervalo de anúncio.
  2. Após a conclusão do intervalo comercial, volte à busca original.

No formato de diagrama, o código fica assim:

Veja como implementar esse fluxo de trabalho no SDK de DAI do IMA, conforme feito nas AdvancedExample.

Evite que um usuário tente deixar um intervalo de anúncio sem assistir.

Verifique se o usuário fez uma busca que passou de um intervalo de anúncio não assistido. Em caso afirmativo, leve-o de volta ao intervalo de anúncio. Para o exemplo do iOS Advanced, use a interação do usuário com a interface para detectar quando executar uma busca. Preserve o horário de início da busca para verificar se o usuário passou por um intervalo de anúncio não reproduzido na busca. Quando o usuário libera os controles de vídeo, compara o horário atual com o horário ao intervalo comercial mais recente. Se o intervalo comercial for após o início da busca tempo (ou seja, o usuário ultrapassou) e ainda não tiver sido jogado, volte ao início do intervalo comercial. Além disso, defina uma flag de ajuste verificar mais tarde no gerenciador de conclusão do intervalo de anúncio:

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

Colocar o usuário de volta na busca original

Em seu gerenciador de fim de anúncio, verifique se a sequência pausa foi reproduzido como resultado do Snapback. Em caso afirmativo, retorne o nome do usuário para o lugar que estavam tentando ir inicialmente (contanto que não foi o meio do intervalo comercial que acabou de ser reproduzido):

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