এই নির্দেশিকা দেখায় যে চাহিদা অনুসার ভিডিও (VOD) স্ট্রিমের জন্য ডায়নামিক অ্যাড ইনসার্শন (DAI) ব্যবহার করার সময় IMA DAI SDK ব্যবহার করে কীভাবে বুকমার্কিং প্রয়োগ করতে হয়। এটি ধরে নেয় যে IMA DAI ইমপ্লিমেন্টেশন কাজ করছে, যেমনটি শুরু করুন-এ দেখানো হয়েছে।
বুকমার্কিং কী?
বুকমার্কিং হল কন্টেন্ট স্ট্রিমের একটি নির্দিষ্ট পয়েন্ট সেভ করে সেখানে ফিরে আসার সুবিধা। ধরুন, কোনও ব্যবহারকারী পাঁচ মিনিট কন্টেন্ট দেখার পরে ভিডিও স্ট্রিম থেকে বেরিয়ে গেলেন এবং পরে আবার ফিরে এলেন। বুকমার্কিং স্ট্রিমের মধ্যে ব্যবহারকারীর অবস্থান সেভ করে যাতে স্ট্রিমটি যেখান থেকে বন্ধ করা হয়েছিল সেখান থেকে আবার শুরু করা যায়, যা দর্শককে একটি নিরবচ্ছিন্ন অভিজ্ঞতা প্রদান করে।
DAI বুকমার্কিং ব্যাকগ্রাউন্ডে কাজ করে
DAI স্ট্রিম বুকমার্ক করার সময়, ব্যবহারকারী ভিডিও ছেড়ে চলে গেলে আপনাকে অবশ্যই স্ট্রিম আইডি ও সময় রেকর্ড করতে হবে। ব্যবহারকারী ফিরে এলে, স্ট্রিমের জন্য আবার অনুরোধ করুন এবং সেভ করা সময়ে যান। অনুরোধ করা স্ট্রিমের প্রতিটি ইনস্ট্যান্সে আলাদা আলাদা সময়সীমার বিজ্ঞাপন বিরতি থাকতে পারে, তাই শুধু স্ট্রিমের সময় সেভ করলে কাজ হবে না। আপনি আসলে একই কন্টেন্ট টাইম থেকে চালিয়ে যেতে চান।
কনভার্সন পদ্ধতি ব্যবহার করে সমস্যার সমাধান
IMA DAI SDK, প্রদত্ত স্ট্রিম টাইম-এর জন্য কন্টেন্ট টাইম এবং প্রদত্ত কন্টেন্ট টাইম-এর জন্য স্ট্রিম টাইম অনুরোধ করার জন্য এক জোড়া পদ্ধতি প্রদান করে। এইসব কনভার্সন পদ্ধতি ব্যবহার করে আপনি বুকমার্ক করা কন্টেন্ট টাইম স্টোর করতে পারবেন এবং তারপর স্ট্রিমের নতুন ইনস্ট্যান্সে সংশ্লিষ্ট স্ট্রিম টাইম খুঁজতে পারবেন। এখানে পদ্ধতিটি দেওয়া হল, যার মধ্যে একটি স্যাম্পেল অ্যাপের লিঙ্ক রয়েছে যা বুকমার্কিংয়ের কাজ দেখায়।
বুকমার্ক সেভ করা হচ্ছে
অ্যাক্টিভিটি পজ করা থাকলে বুকমার্ক সেভ করুন।
Objective-C
- (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];
}
Swift
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 ইন্টারফেস
প্রয়োগ করার অংশ।
Objective-C
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;
}
}
Swift
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
}
}