این راهنما نحوهی پیادهسازی بوکمارک با استفاده از IMA DAI SDK را هنگام استفاده از درج پویای تبلیغات (DAI) برای پخشهای ویدیویی درخواستی (VOD) نشان میدهد. این امر مستلزم پیادهسازی IMA DAI کارآمد، مانند آنچه در «شروع به کار» ارائه شده است، میباشد.
بوکمارک کردن چیست؟
نشانهگذاری (Bookmarking) قابلیتی است که به کاربر اجازه میدهد محتوای مورد نظر خود را ذخیره کند و سپس به نقطهای خاص در جریان محتوا بازگردد. فرض کنید کاربری پنج دقیقه از یک محتوا را تماشا میکند، از جریان ویدیو خارج میشود و سپس به آن بازمیگردد. نشانهگذاری، موقعیت کاربر را در جریان ذخیره میکند تا جریان بتواند از جایی که متوقف شده است، ادامه یابد و تجربهای بینقص را برای بیننده فراهم کند.
نشانهگذاری DAI در پسزمینه
هنگام نشانهگذاری یک استریم DAI، باید شناسه استریم و زمان خروج کاربر از ویدیو را ثبت کنید. وقتی کاربر برمیگردد، دوباره درخواست استریم دهید و به زمان ذخیرهشده مراجعه کنید. از آنجایی که هر نمونه از استریم درخواستی میتواند دارای وقفههای تبلیغاتی با مدت زمانهای مختلف باشد، صرفاً ذخیره زمان استریم کارساز نخواهد بود. کاری که واقعاً میخواهید انجام دهید این است که از همان زمان محتوا ادامه دهید.
روشهای تبدیل به نجات
کیت توسعه نرمافزار IMA DAI دو روش برای درخواست زمان محتوا برای یک زمان پخش مشخص و زمان پخش برای یک زمان محتوای مشخص ارائه میدهد. با استفاده از این روشهای تبدیل، میتوانید زمان محتوای نشانهگذاری شده را ذخیره کنید و سپس در نمونه جدید پخش، زمان پخش مربوطه را جستجو کنید. در اینجا روش کار، به همراه لینکی به یک برنامه نمونه که پیادهسازی نشانهگذاری را نشان میدهد، آورده شده است.
ذخیره بوکمارکها
وقتی فعالیت متوقف میشود، یک نشانک ذخیره میشود.
هدف-سی
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.contentPlayer pause];
// Ignore this if we're presenting a modal view (e.g. in-app clickthrough).
if ([self.navigationController.viewControllers indexOfObject:self] == NSNotFound) {
// Don't save bookmark if we're playing a live stream.
if (self.video.streamType != StreamTypeLive) {
NSTimeInterval contentTime = [self.streamManager
contentTimeForStreamTime:CMTimeGetSeconds(self.contentPlayer.currentTime)];
[self.delegate videoViewController:self didReportSavedTime:contentTime forVideo:self.video];
}
سویفت
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
contentPlayer.pause()
if isMovingFromParent {
// Only save bookmark if we're playing a VOD stream.
if let vodStream = stream as? VODStream, let streamManager = streamManager {
let contentTime = streamManager.contentTime(
forStreamTime: contentPlayer.currentTime().seconds)
if contentTime.isFinite, contentTime > 0 {
delegate?.videoViewController(self, didReportBookmarkedTime: contentTime, for: vodStream)
}
}
if trackingContent {
removeContentPlayerObservers()
}
streamManager?.destroy()
adsLoader?.contentComplete()
streamManager = nil
adsLoader = nil
}
}
بارگیری نشانکها
هنگام درخواست مجدد پخش، نشانک را بارگذاری کنید. این بخشی از پیادهسازی رابط VideoStreamPlayer است.
هدف-سی
case kIMAAdEvent_STREAM_LOADED: {
if (self.video.streamType == StreamTypeVOD) {
[self addContentPlayerObservers];
if (self.video.savedTime > 0) {
NSTimeInterval streamTime =
[self.streamManager streamTimeForContentTime:self.video.savedTime];
[self.IMAVideoDisplay seekStreamToTime:streamTime];
self.video.savedTime = 0;
}
}
سویفت
case .STREAM_LOADED:
guard let stream else { return }
addContentPlayerObservers()
if let vodStream = stream as? VODStream, vodStream.bookmarkTime > 0 {
bookmarkStreamTime = streamManager.streamTime(forContentTime: vodStream.bookmarkTime)
if let time = bookmarkStreamTime {
pendingBookmarkSeek = true
logMessage(
"STREAM_LOADED: Bookmark pending for contentTime: \(String(format: "%.2f", vodStream.bookmarkTime)) (streamTime: \(String(format: "%.2f", time)))"
)
vodStream.bookmarkTime = 0
}
}