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:
- 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.
- 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;
}