Как издатель видео, вы можете захотеть запретить зрителям искать видео после рекламы в середине ролика. Когда пользователь ищет видео после рекламной паузы, вы можете вернуть его к началу этой паузы, а затем вернуть его в исходное положение после её завершения. Эта функция называется «обратным переходом».
В качестве примера см. диаграмму ниже. Ваш зритель смотрит видео и решает просмотреть его с 5-й по 15-ю минуту. Однако на 10-й минуте есть рекламная пауза, которую вы хотите, чтобы зритель посмотрел, прежде чем он сможет посмотреть следующий контент:
Чтобы показать эту рекламную паузу, выполните следующие действия:
- Проверьте, выполнил ли пользователь поиск, который переместился за пределы непросмотренной рекламной паузы, и если да, верните его к рекламной паузе.
- После завершения рекламной паузы верните их в исходное положение.
В виде диаграммы это выглядит так:
Вот как реализовать этот рабочий процесс в 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;
}