Là nhà xuất bản video, bạn có thể muốn ngăn người xem tìm kiếm 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 gọi là "quay lại quảng cáo".
Để xem ví dụ, hãy tham khảo sơ đồ bên dưới. Người xem đang xem một video và quyết định tìm kiếm từ phút thứ 5 đến phút thứ 15. Tuy nhiên, có một điểm ngắt quảng cáo ở phút thứ 10 mà bạn muốn họ xem trước khi có thể xem nội dung sau đó:

Để hiển thị (điểm) 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 bỏ qua một điểm ngắt quảng cáo chưa xem hay không. Nếu có, hãy đưa họ trở lại điểm ngắt quảng cáo đó.
- Sau khi điểm chèn quảng cáo hiển thị xong, hãy đưa họ quay về vị trí tìm kiếm ban đầu.
Ở dạng sơ đồ, thao tác này sẽ có dạng như sau:

Sau đây là cách triển khai tính năng quay lại quảng cáo bằng SDK IMA DAI, như minh hoạ trong AdvancedExample.
Ngăn thao tác tìm kiếm bỏ qua một điểm ngắt quảng cáo chưa xem
Kiểm tra xem người dùng có thực hiện thao tác tìm kiếm bỏ qua một điểm ngắt quảng cáo chưa xem hay không. Nếu có, hãy đưa họ trở lại điểm ngắt quảng cáo đó.
Ví dụ nâng cao về tvOS tận dụng AVPlayerViewController, có một phương thức uỷ quyền để cho bạn biết rằng người dùng đã thực hiện thao tác tìm kiếm.
Nếu thời gian bắt đầu tìm kiếm đến trước điểm ngắt quảng cáo trước đó (nghĩa là người dùng đã bỏ qua điểm ngắt quảng cáo đó) và điểm ngắt quảng cáo đó chưa được phát, hãy đưa họ trở lại điểm bắt đầu của điểm ngắt quảng cáo. Ngoài ra, hãy ghi lại thời gian bắt đầu của
thao tác tìm kiếm được yêu cầu ban đầu để kiểm tra sau này trong trình xử lý ad-break-did-end của bạn:
- (void)playerViewController:(AVPlayerViewController *)playerViewController willResumePlaybackAfterUserNavigatedFromTime:(CMTime)oldTime toTime:(CMTime)targetTime { if (self.streamManager) { IMACuepoint *prevCuepoint = [self.streamManager previousCuepointForStreamTime:CMTimeGetSeconds(targetTime)]; if (prevCuepoint && !prevCuepoint.isPlayed && oldTime < prevCuepoint.startTime) { self.userSeekTime = CMTimeGetSeconds(targetTime); [self.playerViewController.player seekToTime:CMTimeMakeWithSeconds( prevCuepoint.startTime, NSEC_PER_SEC) toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; } } }
Đưa người dùng trở lại vị trí tìm kiếm ban đầu
Trong đại diện sự kiện, hãy sửa đổi trường hợp AD_BREAK_ENDED để kiểm tra xem điểm chèn quảng cáo trước đó có được phát do tính năng quay lại quảng cáo hay không.
- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event { NSLog(@"StreamManager event (%@).", event.typeString); switch (event.type) { // Your other events go here as normal. case kIMAAdEvent_AD_BREAK_ENDED: { if (self.userSeekTime > 0) { self.playerViewController.player seekToTime:CMTimeMakeWithSeconds(self.userSeekTime, NSEC_PER_SEC) toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; self.userSeekTime = 0; // existing handling for AD_BREAK_ENDED goes here. break; } // And so on for other events. default: break; } }