একজন ভিডিও প্রকাশক হিসেবে, আপনি হয়তো আপনার দর্শকদের মিড-রোল বিজ্ঞাপনগুলো এড়িয়ে যাওয়া থেকে আটকাতে চাইতে পারেন। যখন কোনো ব্যবহারকারী একটি বিজ্ঞাপন বিরতি এড়িয়ে যান, তখন আপনি তাকে সেই বিরতির শুরুতে ফিরিয়ে নিয়ে যেতে পারেন এবং বিরতিটি শেষ হওয়ার পর তাকে তার আগের অবস্থানে ফিরিয়ে আনতে পারেন। এই বৈশিষ্ট্যটিকে "স্ন্যাপব্যাক" বলা হয়।
উদাহরণস্বরূপ, নিচের ডায়াগ্রামটি দেখুন। আপনার দর্শক একটি ভিডিও দেখছেন এবং তিনি ৫ মিনিটের পর থেকে ১৫ মিনিটের পর যেতে চান। কিন্তু, ১০ মিনিটের মাথায় একটি বিজ্ঞাপন বিরতি আছে, যার পরের কন্টেন্ট দেখার আগে আপনি চান যে দর্শক সেটি দেখুক।

এই বিজ্ঞাপন বিরতিটি দেখানোর জন্য, নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করুন:
- যাচাই করুন ব্যবহারকারী এমন কোনো অনুসন্ধান চালিয়েছেন কিনা যা কোনো না দেখা বিজ্ঞাপন বিরতি এড়িয়ে গেছে, এবং যদি তাই হয়, তবে তাকে বিজ্ঞাপন বিরতিতে ফিরিয়ে নিয়ে যান।
- বিজ্ঞাপন বিরতি শেষ হলে, তাদেরকে তাদের আগের অবস্থানে ফিরিয়ে দিন।
ডায়াগ্রাম আকারে, এটি দেখতে এইরকম:

AdvancedExample- এ যেমন করা হয়েছে, সেই অনুযায়ী IMA DAI SDK-তে এই ওয়ার্কফ্লোটি কীভাবে প্রয়োগ করতে হয় তা এখানে দেখানো হলো।
না দেখা বিজ্ঞাপন এড়িয়ে যাওয়া প্রতিরোধ করুন
যদি কোনো ব্যবহারকারী বিজ্ঞাপনের বিরতি এড়িয়ে যাওয়ার চেষ্টা করেন, তবে প্লেয়ারকে অবশ্যই সেই লাফটি শনাক্ত করতে হবে এবং প্লেব্যাককে সেই নির্দিষ্ট বিজ্ঞাপনের বিরতির শুরু থেকে ফিরিয়ে আনতে হবে। না দেখা বিজ্ঞাপন এড়িয়ে যাওয়া রোধ করতে, নিম্নলিখিতগুলি করুন:
- যখন ব্যবহারকারী সিক বার ব্যবহার করা শুরু করেন, তখন তার বর্তমান প্লেব্যাকের সময় রেকর্ড করুন।
- ব্যবহারকারী স্ট্রিমে অন্য কোনো সময়ে যাওয়ার প্রক্রিয়া শেষ করার পর, সেই সময়ের আগে অবস্থিত সর্বশেষ বিজ্ঞাপন বিরতিটি শনাক্ত করুন।
- যদি বিজ্ঞাপন বিরতিটি রেকর্ড করা শুরুর সময়ের পরে শুরু হয় (যা স্কিপ করার ইঙ্গিত দেয়) এবং সেটি এখনও প্লে না হয়ে থাকে, তাহলে প্লেয়ারটিকে বিজ্ঞাপন বিরতির শুরুতে নিয়ে যান।
- এই বিজ্ঞাপন বিরতিটি যে জোরপূর্বক ঘটানো হয়েছে, তা ট্র্যাক করতে একটি
snapbackModeফ্ল্যাগ সক্রিয় করুন।
উদ্দেশ্য-সি
- (IBAction)videoControlsTouchStarted:(id)sender {
[NSObject cancelPreviousPerformRequestsWithTarget:self
selector:@selector(hideFullscreenControls)
object:self];
self.currentlySeeking = YES;
self.seekStartTime = self.contentPlayer.currentTime;
}
- (IBAction)videoControlsTouchEnded:(id)sender {
if (self.fullscreen) {
[self startHideControlsTimer];
}
self.currentlySeeking = NO;
if (!self.adPlaying) {
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 our landing
// place.
[self.contentPlayer
seekToTime:CMTimeMakeWithSeconds(lastCuepoint.startTime + 1, NSEC_PER_SEC)];
}
}
}
সুইফট
@IBAction func progressBarTouchStarted(_ sender: UISlider) {
guard !isAdPlaying else { return }
currentlySeeking = true
seekStartTime = contentPlayer.currentTime().seconds
}
// MARK: Snapback Logic
@IBAction func progressBarTouchEnded(_ sender: UISlider) {
guard !isAdPlaying else { return }
if isFullScreen {
startHideControlsTimer()
}
currentlySeeking = false
seekEndTime = Float64(sender.value)
guard let streamManager else { return }
if let lastCuepoint = streamManager.previousCuepoint(forStreamTime: seekEndTime) {
if !lastCuepoint.isPlayed, lastCuepoint.startTime > seekStartTime {
logMessage(
"Snapback to \(String(format: "%.2f", lastCuepoint.startTime)) from \(String(format: "%.2f", seekEndTime))"
)
snapbackMode = true
contentPlayer.seek(
to: CMTime(seconds: Double(sender.value), preferredTimescale: 1000))
}
}
}
মূল অনুসন্ধান পুনরায় শুরু করুন
বাধ্যতামূলক বিজ্ঞাপন বিরতিটি শেষ হওয়ার পর, প্লেয়ারটি ব্যবহারকারীকে উদ্দিষ্ট বিষয়বস্তুতে নিয়ে আসে।
ব্যবহারকারীর মূল অনুসন্ধান পুনরায় শুরু করতে, নিম্নলিখিতগুলি করুন:
আপনার স্ট্রিম ম্যানেজারে
AD_BREAK_ENDEDইভেন্টটির জন্য নজর রাখুন।এই পরিবর্তনটি যেন একটি বাধ্যতামূলক বিজ্ঞাপন দেখানোর পরেই ঘটে, তা নিশ্চিত করতে
snapbackModeফ্ল্যাগটি সক্রিয় আছে কিনা তা পরীক্ষা করুন।সক্রিয় থাকলে, ব্যবহারকারীকে উদ্দিষ্ট টাইমস্ট্যাম্পে ফিরিয়ে আনার জন্য প্লেয়ারটিকে সংরক্ষিত গন্তব্য সময়ে নিয়ে যাওয়া হবে।
নিম্নলিখিত উদাহরণটি একটি বিজ্ঞাপন বিরতি শেষ হওয়ার জন্য শোনে এবং ব্যবহারকারীকে মূল অনুসন্ধানে ফিরিয়ে দেয়:
উদ্দেশ্য-সি
case kIMAAdEvent_AD_BREAK_ENDED: {
[self logMessage:@"Ad break ended"];
self.adPlaying = NO;
if (self.snapbackMode) {
self.snapbackMode = NO;
if (CMTimeCompare(self.seekEndTime, self.contentPlayer.currentTime)) {
[self.contentPlayer seekToTime:self.seekEndTime];
}
}
break;
}
সুইফট
case .AD_BREAK_ENDED:
logMessage("Ad break ended")
isAdPlaying = false
progressBar.isUserInteractionEnabled = true
if snapbackMode {
snapbackMode = false
if contentPlayer.currentTime().seconds < seekEndTime {
contentPlayer.seek(to: CMTime(seconds: Double(seekEndTime), preferredTimescale: 1000))
}
} else if pendingBookmarkSeek, let time = bookmarkStreamTime {
logMessage(String(format: "AD_BREAK_ENDED: Seeking to bookmark streamTime: %.2f", time))
imaVideoDisplay.seekStream(toTime: time)
pendingBookmarkSeek = false
bookmarkStreamTime = nil
}
updatePlayHeadState(isPlaying: self.isContentPlaying)