동영상 게시자는 시청자가 미드롤 광고를 탐색하지 못하도록 방지할 수 있습니다. 사용자가 광고 시점을 탐색하면 사용자를 해당 광고 시점의 시작 지점으로 되돌린 후 광고 시점이 완료되면 탐색 위치로 되돌릴 수 있습니다. 이 기능을 '스냅백'이라고 합니다.
예를 들어 아래 다이어그램을 참고하세요. 시청자가 동영상을 시청하고 5분 지점에서 15분 지점으로 탐색하기로 결정합니다. 그러나 10분 지점에 광고 시점이 있으며 시청자가 이 광고 시점을 시청한 후에 콘텐츠를 시청하도록 하려고 합니다.

이 광고 시점을 표시하려면 다음 단계를 따르세요.
- 사용자가 시청하지 않은 광고 시점을 건너뛰는 탐색을 실행했는지 확인하고, 실행한 경우 사용자를 광고 시점으로 되돌립니다.
- 광고 시점이 완료되면 사용자를 원래 탐색 위치로 되돌립니다.
다이어그램 형식은 다음과 같습니다.

AdvancedExample에서와 같이 IMA DAI SDK에서 이 워크플로를 구현하는 방법은 다음과 같습니다.
탐색으로 인해 광고 시점을 시청하지 않고 건너뛰는 것을 방지
사용자가 시청하지 않은 광고 시점을 건너뛰는 탐색을 실행했는지 확인하고, 실행한 경우 사용자를 광고 시점으로 되돌립니다.
Android SDK에서 PlayerControl 객체를 사용하여 탐색을 감지합니다.
사용자가 탐색하면 SampleAdsWrapper에서 구현한 SampleHlsVideoPlayerCallback의 onSeek() 메서드를 트리거합니다.
이 메서드 (아래에 표시됨)는 사용자의 탐색 시간 이전의 큐 포인트를 확인합니다. 재생되지 않은 경우 초기 원하는 탐색 지점 대신 해당 광고 시점의 시작 지점으로 탐색하고 원하는 탐색 지점을 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이 설정되어 있는지 확인합니다. 설정되어 있는 경우 사용자를 스트림의 해당 지점으로 이동합니다. 사용자가 방금 시청한 광고 시점은 스냅백의 결과이기 때문입니다.
@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;
}