Snapback

Como editor de vídeo, talvez você queira evitar que seus espectadores além dos anúncios intermediários. Quando um usuário passa por um intervalo de anúncio, você pode levá-los de volta ao início do intervalo de anúncio e, então, retornar ao local de busca após a conclusão do intervalo comercial. 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 comercial na marca de 10 minutos que você deseja que eles assistam antes de poderem assistir ao 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 em 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. No SDK do Android, use o objeto PlayerControl para detectar a busca. Quando o usuário fizer a busca, acione o método onSeek() do SampleHlsVideoPlayerCallback implementado por SampleAdsWrapper. Esse método (apresentado abaixo) verifica o ponto de inserção antes do momento o tempo de busca. Caso não seja reproduzido, vá para o início do intervalo de anúncio em vez do ponto de busca inicial desejado, e salvar essa busca ponto 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 busca original

Agora, quando você receber um evento onAdBreakEnded, confira se snapBackTime está definido. Se for o caso, leve o usuário a esse ponto do stream, porque o anúncio que acabaram de assistir foi o resultado do ajuste:

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