Khoá cài

Là nhà xuất bản video, bạn nên ngăn người xem tìm kiếm quảng cáo trong video. Khi người dùng tìm kiếm một điểm chèn quảng cáo, bạn có thể đưa họ trở lại điểm bắt đầu điểm chèn quảng cáo đó và đưa họ về vị trí tìm kiếm sau khi điểm chèn quảng cáo đó hoàn tất. Tính năng này được gọi là "quay lại".

Ví dụ: hãy xem sơ đồ dưới đây. Khán giả của bạn đang xem video và quyết định tua từ mốc 5 phút đến mốc 15 phút. Tuy nhiên, sẽ có một điểm chèn quảng cáo ở 10 phút mà bạn muốn họ xem trước khi có thể xem nội dung sau quảng cáo đó:

Để hiển thị điểm chèn quảng cáo này, hãy làm theo các bước sau:

  1. Kiểm tra xem người dùng có chạy một cụm từ tìm kiếm đã vượt qua một điểm chèn quảng cáo chưa xem hay không. Nếu có, hãy đưa họ trở lại điểm chèn quảng cáo đó.
  2. Sau khi kết thúc điểm chèn quảng cáo, hãy đưa chúng trở về cấu trúc tìm kiếm ban đầu.

Ở dạng sơ đồ, giao diện sẽ có dạng như sau:

Sau đây là cách triển khai quy trình công việc này trong SDK IMA DAI, như đã thực hiện trong AdvancedExample.

Ngăn video tìm kiếm để lại điểm chèn quảng cáo mà chưa xem

Kiểm tra xem người dùng có chạy một cụm từ tìm kiếm đã vượt qua một điểm chèn quảng cáo chưa xem hay không. Nếu có, hãy đưa họ trở lại điểm chèn quảng cáo đó. Đối với ví dụ nâng cao về iOS, hãy sử dụng hoạt động tương tác của người dùng với giao diện người dùng của bạn để phát hiện thời điểm họ đã thực hiện một thao tác tua. Duy trì thời gian bắt đầu tìm kiếm để kiểm tra xem liệu chúng có vượt qua điểm chèn quảng cáo chưa phát trong lệnh tìm kiếm hay không. Khi người dùng thả các nút điều khiển video, hãy so sánh thời gian hiện tại của họ với thời điểm xuất hiện điểm chèn quảng cáo gần đây nhất. Nếu điểm chèn quảng cáo rơi sau thời điểm bắt đầu tìm kiếm (nghĩa là người dùng đã vượt qua nó) và quảng cáo vẫn chưa được phát, hãy tìm cách quay lại điểm bắt đầu của điểm chèn quảng cáo đó. Ngoài ra, hãy đặt cờ quay lại để kiểm tra sau trong trình xử lý điểm chèn quảng cáo hoàn chỉnh:

- (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)];
  }
}

Đưa người dùng trở lại nút tua ban đầu

Trong trình xử lý điểm chèn quảng cáo đã kết thúc, hãy kiểm tra xem điểm chèn quảng cáo trước đó có được phát là kết quả của ảnh chụp nhanh hay không. Nếu có, hãy đưa người dùng về vị trí mà họ cố gắng tìm kiếm ban đầu (miễn là đó không phải là giữa điểm chèn quảng cáo vừa phát):

- (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;
    }
  }
}