Snapback

Как издатель видео, вы, возможно, захотите, чтобы ваши зрители не просматривали вашу рекламу в середине ролика. Когда пользователь выполняет поиск после рекламной паузы, вы можете вернуть его к началу этой рекламной паузы, а затем вернуть его в место поиска после завершения рекламной паузы. Эта функция называется «мгновенный возврат».

В качестве примера смотрите диаграмму ниже. Ваш зритель смотрит видео и решает перейти от 5-минутной отметки к 15-минутной отметке. Однако на 10-минутной отметке есть рекламная пауза, которую вы хотите, чтобы они посмотрели, прежде чем они смогут просмотреть контент после нее:

Чтобы показать эту рекламную паузу, выполните следующие действия:

  1. Проверьте, выполнил ли пользователь поиск, который перешел за непросмотренную рекламную паузу, и если да, верните его обратно к рекламной паузе.
  2. После завершения рекламной паузы верните их в исходное положение.

В виде диаграммы это выглядит так:

Ниже описано, как реализовать этот рабочий процесс в IMA DAI SDK, как это сделано в AdvancedExample .

Запретить поиску оставлять рекламную паузу непросмотренной

Проверьте, выполнил ли пользователь поиск после непросмотренной рекламной паузы, и если да, верните его к рекламной паузе. В Android SDK используйте объект PlayerControl для обнаружения поиска. Когда пользователь выполняет поиск, активируйте метод onSeek() метода SampleHlsVideoPlayerCallback , реализованного SampleAdsWrapper . Этот метод (представленный ниже) проверяет точку разметки до времени поиска пользователя. Если он не воспроизведен, перейдите к началу этой рекламной паузы вместо первоначальной желаемой точки поиска и сохраните эту желаемую точку поиска в 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));
}

Верните пользователя к исходному поиску

Теперь, когда вы получаете событие onAdBreakEnded , проверьте, установлен ли snapBackTime . Если да, переведите пользователя к этой точке потока, потому что рекламная пауза, которую он только что посмотрел, была результатом 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;
}