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 em 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 SDK do Android, use o objeto PlayerControl para detectar a busca. Quando o usuário busca, acione o método onSeek() do SampleHlsVideoPlayerCallback implementado por SampleAdsWrapper. Esse método (apresentado abaixo) verifica o ponto de sinalização antes do tempo de busca do usuário. Se não tiver sido reproduzido, avance para o início do intervalo comercial em vez do ponto de busca inicial desejado e salve esse ponto de busca em snapBackTime.

@Override
public void onSeek(int timeMillis) {
  double timeToSeek = timeMillis;
  if (streamManager != null) {
    CuePoint cuePoint =
        streamManager.getPreviousCuePointForStreamTime(timeMillis / 1000);
    if (cuePoint != null && !cuePoint.isPlayed()) {
      snapBackTime = timeToSeek / 1000.0; // Update snapback time.
      // Missed cue point, so snap back to the beginning of cue point.
      timeToSeek = cuePoint.getStartTime() * 1000;
      videoPlayer.seek(Math.round(timeToSeek));
      videoPlayer.setCanSeek(false);
      return;
    }
  }
  videoPlayer.seek(Math.round(timeToSeek));
}

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

Agora, quando você receber um evento onAdBreakEnded, verifique se snapBackTime está definido. Se for o caso, leve o usuário até esse ponto no stream, porque o intervalo de anúncio que ele acabou de assistir foi o resultado do snapback:

@Override
public void onAdBreakEnded() {
  // Re-enable player controls.
  videoPlayer.setCanSeek(true);
  videoPlayer.enableControls(true);
  if (snapBackTime > 0) {
    videoPlayer.seek(Math.round(snapBackTime * 1000));
  }
  snapBackTime = 0;
}