स्नैपबैक

वीडियो पब्लिशर के तौर पर, हो सकता है कि आप चाहें, तो दर्शक वीडियो के बीच में दिखने वाले विज्ञापनों से विज्ञापन न देखें. जब कोई उपयोगकर्ता विज्ञापन के लिए ब्रेक की जगह देखता है, तो उसे विज्ञापन के लिए ब्रेक की शुरुआत में ले जाया जा सकता है. साथ ही, विज्ञापन के लिए ब्रेक की प्रोसेस पूरी होने के बाद, उसे खोजने की जगह पर वापस लाया जा सकता है. इस सुविधा को "स्नैपबैक" कहते हैं.

उदाहरण के तौर पर, नीचे दिया गया डायग्राम देखें. दर्शक कोई वीडियो देख रहा होता है और वह 5-मिनट से लेकर 15-मिनट के निशान तक वीडियो देखना चाहता है. हालांकि, 10 मिनट के अंदर एक विज्ञापन ब्रेक होता है, जिसे आप वीडियो के बाद देखने से पहले देखना चाहते हैं:

विज्ञापन के लिए यह ब्रेक दिखाने के लिए, यह तरीका अपनाएं:

  1. देखें कि क्या उपयोगकर्ता ने कोई ऐसी सीक चलाई है जो देखे गए विज्ञापन के लिए ब्रेक से आगे बढ़ गई है और अगर ऐसा है, तो उसे विज्ञापन के लिए ब्रेक पर वापस ले जाएं.
  2. विज्ञापन के लिए ब्रेक खत्म होने के बाद, वीडियो को उसके मूल वीडियो पर वापस ले जाएं.

डायग्राम के तौर पर, यह कुछ ऐसा दिखेगा:

जैसा कि AdvancedExample में बताया गया है, जैसा कि tvOS IMA SDK में इस वर्कफ़्लो को लागू करने का तरीका बताया गया है.

वीडियो में आगे/पीछे जाने की सुविधा को वीडियो के बीच में दिखने वाले विज्ञापन के लिए ब्रेक लेने से रोकें

देखें कि क्या उपयोगकर्ता ने कोई ऐसी खोज की है जो न देखे गए विज्ञापन ब्रेक के बाद भी हुई है. अगर ऐसा है, तो उन्हें विज्ञापन के लिए बने ब्रेक पर वापस ले जाएं. 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;
  }
}