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