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

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

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