Как видеоредактор, вы можете захотеть запретить зрителям перематывать видео после вставки рекламы. Когда пользователь перематывает видео после рекламной паузы, вы можете вернуть его к началу этой паузы, а затем снова вернуть к месту перемотки после её завершения. Эта функция называется «возврат к исходному положению».
В качестве примера рассмотрим диаграмму ниже. Зритель смотрит видео и решает перемотать его с 5-й минуты на 15-ю. Однако на 10-й минуте есть рекламная пауза, которую вы хотите, чтобы он посмотрел перед тем, как перейти к следующему контенту:

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

Вот как реализовать этот рабочий процесс в SDK IMA DAI, как это сделано в 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 . Если да, переведите пользователя к этому моменту в потоке, поскольку только что просмотренная им рекламная пауза была результатом события snapbackTime:
@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;
}