स्किप किए गए विज्ञापन के ब्रेक पर वापस जाना

प्लैटफ़ॉर्म चुनें: HTML5 Android iOS tvOS Roku

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

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

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

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

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

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