স্ন্যাপব্যাক

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

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

এই বিজ্ঞাপন বিরতি দেখানোর জন্য, নিম্নলিখিত পদক্ষেপগুলি নিন:

  1. ব্যবহারকারী একটি অনুসন্ধান চালাচ্ছেন কিনা তা পরীক্ষা করে দেখুন যেটি একটি অদেখা বিজ্ঞাপন বিরতি অতিক্রম করেছে এবং যদি তাই হয়, তাহলে তাদের বিজ্ঞাপন বিরতিতে নিয়ে যান।
  2. বিজ্ঞাপন বিরতি সম্পূর্ণ হওয়ার পরে, তাদের তাদের আসল সন্ধানে ফিরিয়ে দিন।

ডায়াগ্রাম আকারে, এটি এইরকম দেখায়:

tvOS IMA 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;
  }
}