Snapback

Se você é editor de vídeo, talvez queira impedir que os espectadores escondam seus anúncios intermediários. Quando um usuário passa por um intervalo de anúncio, é possível voltar ao início dele e retornar ao local de busca depois que o intervalo for concluído. Esse recurso é chamado de "snapback".

Como exemplo, veja o diagrama abaixo. Seu 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 dele:

Para mostrar esse intervalo de anúncio, siga estas etapas:

  1. Confira se o usuário fez uma busca que ultrapassou um intervalo de anúncio não assistido e, em caso afirmativo, retorne a ele.
  2. Quando o intervalo de anúncio terminar, retorne à busca original.

Em forma de diagrama, o código fica assim:

Veja como implementar esse fluxo de trabalho no SDK do IMA para Android, conforme feito em AdvancedExample.

Evitar uma busca de deixar um intervalo de anúncio sem visualização

Confira se o usuário executou uma busca que ultrapassou um intervalo de anúncio não assistido. Caso tenha feito isso, leve-o de volta a ele. 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));
}

Levar o usuário de volta à busca original

Agora, ao receber um evento onAdBreakEnded, verifique se snapBackTime está definido. Nesse caso, leve o usuário a esse ponto da transmissão, porque 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;
}