Là một nhà xuất bản video, bạn có thể muốn ngăn người xem tua qua quảng cáo trong video. Khi người dùng tìm kiếm qua một điểm chèn quảng cáo, bạn có thể đưa họ trở lại điểm bắt đầu của điểm chèn quảng cáo đó, rồi đưa họ quay về vị trí tìm kiếm sau khi điểm chèn quảng cáo đã hiển thị xong. Tính năng này có tên là "quay lại nhanh".
Ví dụ: xem sơ đồ bên dưới. Người xem đang xem một video và quyết định tua từ mốc 5 phút đến mốc 15 phút. Tuy nhiên, có một điểm chèn quảng cáo ở mốc 10 phút mà bạn muốn họ xem trước khi có thể xem nội dung sau đó:
Để hiển thị khoảng chèn quảng cáo này, hãy làm theo các bước sau:
- Kiểm tra xem người dùng có thực hiện thao tác tìm kiếm để chuyển qua một điểm chèn quảng cáo chưa xem hay không. Nếu có, hãy đưa họ quay lại điểm chèn quảng cáo đó.
- Sau khi điểm chèn quảng cáo kết thúc, hãy đưa người dùng trở lại vị trí tìm kiếm ban đầu.
Dưới dạng sơ đồ, điều đó có dạng như sau:
Sau đây là cách triển khai quy trình này trong SDK IMA DAI, như trong AdvancedExample.
Ngăn người dùng tua qua điểm chèn quảng cáo mà không xem
Kiểm tra xem người dùng có thực hiện thao tác tua qua một điểm chèn quảng cáo chưa xem hay không. Nếu có, hãy đưa họ quay lại điểm chèn quảng cáo đó. Đối với ví dụ Nâng cao trên 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 để phát hiện thời điểm họ thực hiện thao tác tìm kiếm. Lưu giữ thời gian bắt đầu tua để kiểm tra xem người dùng có bỏ qua một điểm chèn quảng cáo chưa phát trong thao tác tua 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 gian của điểm chèn quảng cáo gần đây nhất. Nếu điểm chèn quảng cáo xuất hiện sau thời gian bắt đầu tìm kiếm (nghĩa là người dùng đã chuyển qua điểm chèn quảng cáo đó) và điểm chèn quảng cáo đó chưa được phát, hãy chuyển người dùng trở lại điểm bắt đầu của điểm chèn quảng cáo. Ngoài ra, hãy đặt một cờ snapback để kiểm tra sau trong trình xử lý hoàn tất khoảng thời gian quảng cáo:
- (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 điểm tua ban đầu
Trong trình xử lý ad-break-ended, hãy kiểm tra xem khoảng thời gian nghỉ trước đó có được phát do tính năng quay lại hay không. Nếu có, hãy đưa người dùng trở lại vị trí mà họ đang cố gắng tìm kiếm ban đầu (miễn là vị trí đó 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;
}
}
}