스냅백

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

아래 다이어그램에서 예시를 참조하세요. 시청자가 동영상을 시청하다가 5분부터 15분까지 동영상을 탐색합니다. 그러나 10분 표시에 광고 시점이 주어지면 시청자가 그 이후에 콘텐츠를 볼 수 있습니다.

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

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

다이어그램 형식은 다음과 같습니다.

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

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

사용자가 시청하지 않은 광고 시점을 지나 탐색을 실행했는지 확인하고, 탐색되었다면 광고 시점으로 돌아갑니다. iOS Advanced 예의 경우 사용자의 UI와의 상호작용을 사용하여 사용자가 탐색을 실행한 시점을 감지합니다. 탐색 시 재생되지 않은 광고 시간을 전달했는지 확인하려면 탐색 시작 시간을 보존합니다. 사용자가 동영상 컨트롤을 놓으면 현재 시간을 최근 광고 시점 시간과 비교합니다. 광고 시점이 탐색 시작 시간 이후에 떨어져서 (사용자가 그 시간을 건너뛰었음) 아직 재생되지 않은 경우 광고 시점의 시작 부분으로 다시 탐색합니다. 또한 나중에 광고 시점 완료 핸들러에서 확인할 수 있도록 스냅백 플래그를 설정합니다.

- (IBAction)videoControlsTouchStarted:(id)sender {
  self.seekStartTime = self.contentPlayer.currentTime;
}

- (IBAction)videoControlsTouchEnded:(id)sender {
  self.seekEndTime = CMTimeMake(self.progressBar.value, 1);
  IMACuepoint *lastCuepoint =
      [self.streamManager previousCuepointForStreamTime:CMTimeGetSeconds(self.seekEndTime)];
  if (!lastCuepoint.played && (lastCuepoint.startTime > CMTimeGetSeconds(self.seekStartTime))) {
    self.snapbackMode = YES
    // Add 1 to the seek time to get the keyframe at the start of the ad to be your landing place.
    [self.contentPlayer seekToTime:CMTimeMakeWithSeconds(lastCuepoint.startTime + 1, NSEC_PER_SEC)];
  }
}

사용자를 원래 탐색으로 되돌리기

광고 시점 종료 핸들러에서 스냅백의 결과로 이전 광고 시점이 재생되었는지 확인합니다. 이 경우 사용자가 방금 재생된 광고 시간의 중간이 아닌 한 사용자가 처음에 하려고 했던 위치로 돌아갑니다.

- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event {
  switch (event.type) {
    case kIMAAdEvent_AD_BREAK_ENDED: {
      if (self.snapbackMode) {
        self.snapbackMode = NO;
        if (CMTimeCompare(self.seekEndTime, self.contentPlayer.currentTime)) {
          [self.contentPlayer seekToTime:self.seekEndTime];
        }
      }
      break;
    }
  }
}