Como editor de vídeo, talvez você queira impedir que os espectadores conquistem os anúncios intermediários. Quando um usuário procura um intervalo de anúncio, é possível retornar ao início do intervalo e retorná-lo ao local de busca depois que o intervalo de anúncio terminar. Esse recurso é chamado de "ajuste".
Como exemplo, confira o diagrama abaixo. O espectador está assistindo um vídeo e decide passar da marca de 5 a 15 minutos. No entanto, há um intervalo de anúncio na marca de 10 minutos que você quer que eles assistam antes que possam assistir ao conteúdo depois:
Para mostrar esse intervalo de anúncio, siga estas etapas:
- Verifique se o usuário fez uma busca que ultrapassou um intervalo de anúncio não assistido e, em caso afirmativo, leve-o de volta ao intervalo de anúncio.
- Após a conclusão do intervalo de anúncio, retorne-os à busca original.
Em forma de diagrama, o resultado é parecido com este:
Veja como implementar esse fluxo de trabalho no SDK de DAI do IMA, conforme feito em AdvancedExample.
Impedir que uma busca deixe um intervalo de anúncio sem exibição
Verifique se o usuário executou uma busca que passou por um intervalo de anúncio não assistido
e, 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 procurar, acione o método onSeek()
da
SampleHlsVideoPlayerCallback
implementado por SampleAdsWrapper
.
Esse método (apresentado abaixo) verifica o ponto de inserção antes do momento de busca
do usuário. Se ele não for reproduzido, vá até o início desse intervalo de anúncio
em vez do ponto de busca inicial desejado e salve esse 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 à busca original
Agora, quando você receber um evento onAdBreakEnded
, verifique se snapBackTime
está definido. Nesse caso, leve o usuário a esse ponto no stream, já que o intervalo
de anúncio que ele acabou de assistir foi 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;
}