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

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

AdvancedExample- এ প্রদর্শিত পদ্ধতি অনুযায়ী IMA DAI SDK ব্যবহার করে কীভাবে স্ন্যাপব্যাক প্রয়োগ করতে হয়, তা এখানে দেওয়া হলো।
বিজ্ঞাপনের বিরতি দেখার আগে কোনো অনুসন্ধান বন্ধ করুন।
ব্যবহারকারী এমন কোনো 'seek' চালিয়েছেন কিনা যা কোনো না দেখা বিজ্ঞাপন বিরতি পার করে গেছে, তা পরীক্ষা করুন এবং যদি তাই হয়, তবে তাকে সেই বিজ্ঞাপন বিরতিতে ফিরিয়ে নিয়ে যান। tvOS-এর অ্যাডভান্সড উদাহরণটি AVPlayerViewController এর সুবিধা নেয়, যেটিতে একটি ডেলিগেট মেথড রয়েছে যা আপনাকে জানিয়ে দেয় যে ব্যবহারকারী একটি 'seek' চালিয়েছেন। যদি 'seek'-এর শুরুর সময়টি আগের বিজ্ঞাপন বিরতির আগে আসে (অর্থাৎ ব্যবহারকারী সেটি পার করে গেছেন) এবং সেই বিরতিটি এখনও প্লে না হয়ে থাকে, তবে তাকে বিজ্ঞাপন বিরতির শুরুতে ফিরিয়ে নিয়ে যান। এছাড়াও, আপনার ad-break-did-end হ্যান্ডলারে পরে পরীক্ষা করার জন্য প্রাথমিকভাবে অনুরোধ করা 'seek'-এর শুরুর সময়টি রেকর্ড করে রাখুন:
- (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]; } } }
ব্যবহারকারীকে তাদের মূল অনুসন্ধানে ফিরিয়ে দিন
আপনার ইভেন্ট ডেলিগেটে, AD_BREAK_ENDED কেসটি পরিবর্তন করে পরীক্ষা করুন যে স্ন্যাপব্যাকের ফলে আগের বিজ্ঞাপন বিরতিটি প্লে হয়েছিল কিনা।
- (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; } }