스냅백

동영상 게시자는 시청자가 미드롤 광고를 끝까지 시청하지 못하도록 하고 싶을 수 있습니다. 사용자가 광고 시점을 지나 탐색하면 해당 광고 시점의 시작 부분으로 다시 이동했다가 광고 시간이 끝나면 탐색 위치로 돌아갈 수 있습니다. 이 기능을 '스냅백'이라고 합니다.

아래 다이어그램에서 예시를 참조하세요. 시청자가 동영상을 시청하다가 5분부터 15분까지 동영상을 검색하기로 결정합니다. 그러나 10분 지점에 사용자가 시청해야 하는 광고 시점이 있으며, 그 후에 콘텐츠를 볼 수 있습니다.

이 광고 시점을 표시하려면 다음 단계를 따르세요.

  1. 사용자가 시청하지 않은 광고 시점을 뛰어넘는 탐색을 실행했는지 확인하고, 탐색한 경우 광고 시점으로 돌아옵니다.
  2. 광고 시간이 끝나면 사용자를 원래 탐색으로 되돌립니다.

이를 다이어그램 형식으로 보면 다음과 같습니다.

AdvancedExample에서 실행하는 것처럼 IMA DAI SDK에서 이 워크플로를 구현하는 방법은 다음과 같습니다.

탐색이 광고 시간을 시청하지 않은 상태로 남겨두지 않도록 방지

사용자가 시청하지 않은 광고 시점을 지나 탐색을 실행했는지 확인하고, 탐색한 경우 광고 시점으로 돌아갑니다. Android SDK에서는 PlayerControl 객체를 사용하여 탐색을 감지합니다. 사용자가 탐색하면 SampleAdsWrapper로 구현된 SampleHlsVideoPlayerCallbackonSeek() 메서드를 트리거합니다. 이 메서드 (아래 참조)는 사용자의 탐색 시간 전에 큐 포인트를 확인합니다. 재생되지 않는 경우 원하는 초기 탐색 지점 대신 광고 시점의 시작 부분을 탐색하고 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;
}