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 de anúncio, você pode levá-lo de volta ao início desse intervalo de anúncio e, em seguida, retornar ao ponto do vídeo buscado pelo usuário após a conclusão do intervalo de anúncio. 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 de anúncio, 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 de anúncio 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 inserção antes do tempo de busca do usuário. Se ele não tiver sido reproduzido, avance para o início desse intervalo de anúncio 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));
}

Colocar o usuário de volta na 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 a pausa para anúncio que ele acabou de assistir foi 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;
}