Voltar para um intervalo de anúncio ignorado

Selecione a plataforma: HTML5 Android iOS tvOS Roku

Como editor de vídeo, talvez você queira impedir que os espectadores avancem os anúncios intermediários. Quando um usuário pula um intervalo comercial, você pode levá-lo de volta ao início desse intervalo e, em seguida, retornar ao ponto do vídeo buscado pelo usuário após a conclusão do intervalo. Esse recurso é chamado de "snapback".

Por exemplo, confira o diagrama abaixo. O espectador está assistindo um vídeo e decide buscar do minuto 5 ao minuto 15. No entanto, há um intervalo de anúncio aos 10 minutos que você quer que eles assistam antes de poderem assistir o conteúdo depois disso:

Para mostrar esse intervalo, siga estas etapas:

  1. Verifique se o usuário fez uma busca que pulou um intervalo de anúncio não assistido e, em caso afirmativo, retorne ao intervalo de anúncio.
  2. Depois que o intervalo comercial terminar, retorne ao ponto original.

Em um diagrama, isso fica assim:

Confira como implementar esse fluxo de trabalho no SDK do IMA DAI, como feito no AdvancedExample.

Evitar que uma busca deixe um intervalo de anúncio sem ser assistido

Verifique se o usuário fez uma busca que passou por um intervalo de anúncio não assistido e, em caso afirmativo, retorne ao intervalo de anúncio. No exemplo avançado do iOS, use a interação do usuário com a interface para detectar quando ele fez uma busca. Preserve o tempo de início da busca para verificar se o usuário passou por um intervalo comercial não reproduzido durante a busca. Quando o usuário soltar os controles de vídeo, compare o tempo atual com o tempo da pausa para anúncio mais recente. Se o intervalo comercial ocorrer depois do tempo de início da busca (ou seja, o usuário pulou o intervalo) e ainda não tiver sido reproduzido, volte ao início do intervalo. Além disso, defina uma flag de retorno rápido para verificar mais tarde no gerenciador de conclusão do intervalo do 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)];
  }
}

Voltar o usuário para a posição original

No seu manipulador de fim de intervalo de anúncio, verifique se o intervalo anterior foi reproduzido como resultado do snapback. Se for esse o caso, retorne o usuário ao ponto em que ele estava tentando buscar inicialmente (desde que não seja 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;
    }
  }
}