स्नैपबैक

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

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

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

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

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

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