वीडियो पब्लिशर के तौर पर, आपके पास यह विकल्प होता है कि दर्शक, वीडियो के बीच में दिखाए जाने वाले विज्ञापनों को स्किप न कर पाएं. जब कोई उपयोगकर्ता विज्ञापन ब्रेक को स्किप करने की कोशिश करता है, तो उसे विज्ञापन ब्रेक की शुरुआत पर वापस ले जाया जा सकता है. इसके बाद, विज्ञापन ब्रेक खत्म होने पर, उसे उस जगह पर वापस ले जाया जा सकता है जहां उसने स्किप करने की कोशिश की थी. इस सुविधा को "स्नैपबैक" कहा जाता है.
उदाहरण के लिए, यहां दिया गया डायग्राम देखें. दर्शक कोई वीडियो देख रहा है और वह उसे पांच मिनट से 15 मिनट के बीच देखना चाहता है. हालांकि, 10 मिनट के बाद एक विज्ञापन ब्रेक है. आपको यह विज्ञापन ब्रेक, वीडियो के उस हिस्से से पहले दिखाना है:
इस विज्ञापन ब्रेक को दिखाने के लिए, यह तरीका अपनाएं:
- देखें कि क्या उपयोगकर्ता ने ऐसे विज्ञापन ब्रेक को स्किप किया है जिसे उसने नहीं देखा है. अगर ऐसा है, तो उसे वापस विज्ञापन ब्रेक पर ले जाएं.
- विज्ञापन ब्रेक खत्म होने के बाद, उन्हें उनकी मूल जगह पर वापस ले जाएं.
डायग्राम के तौर पर, यह ऐसा दिखता है:
यहां बताया गया है कि IMA DAI SDK में इस वर्कफ़्लो को कैसे लागू किया जाता है. इसे AdvancedExample में भी लागू किया गया है.
सीख करने पर, विज्ञापन ब्रेक को बिना देखे छोड़े जाने से रोकना है
देखें कि क्या उपयोगकर्ता ने ऐसे विज्ञापन ब्रेक को स्किप किया है जिसे उसने नहीं देखा है. अगर ऐसा है, तो उसे वापस विज्ञापन ब्रेक पर ले जाएं. iOS Advanced के उदाहरण के लिए, यूज़र इंटरफ़ेस (यूआई) के साथ उपयोगकर्ता के इंटरैक्शन का इस्तेमाल करके यह पता लगाएं कि उन्होंने कब सीक किया है. सीख स्टार्ट टाइम को सेव करता है, ताकि यह पता लगाया जा सके कि वीडियो को आगे बढ़ाने के दौरान, उन्होंने बिना चलाए विज्ञापन ब्रेक को छोड़ दिया है या नहीं. जब उपयोगकर्ता वीडियो कंट्रोल छोड़ता है, तो उसके मौजूदा समय की तुलना, हाल ही के विज्ञापन ब्रेक के समय से करें. अगर विज्ञापन के लिए ब्रेक, सीक करने की शुरुआत के समय के बाद आता है (इसका मतलब है कि उपयोगकर्ता ने उसे छोड़ दिया है) और उसे अब तक नहीं चलाया गया है, तो उन्हें विज्ञापन के लिए ब्रेक की शुरुआत पर वापस ले जाएं. इसके अलावा, स्नैपबैक फ़्लैग सेट करें, ताकि बाद में विज्ञापन ब्रेक पूरा होने वाले हैंडलर में इसकी जांच की जा सके:
- (IBAction)videoControlsTouchStarted:(id)sender {
self.seekStartTime = self.contentPlayer.currentTime;
}
- (IBAction)videoControlsTouchEnded:(id)sender {
self.seekEndTime = CMTimeMake(self.progressBar.value, 1);
IMACuepoint *lastCuepoint =
[self.streamManager previousCuepointForStreamTime:CMTimeGetSeconds(self.seekEndTime)];
if (!lastCuepoint.played && (lastCuepoint.startTime > CMTimeGetSeconds(self.seekStartTime))) {
self.snapbackMode = YES
// Add 1 to the seek time to get the keyframe at the start of the ad to be your landing place.
[self.contentPlayer seekToTime:CMTimeMakeWithSeconds(lastCuepoint.startTime + 1, NSEC_PER_SEC)];
}
}
उपयोगकर्ता को उसकी मूल जगह पर वापस ले जाना
विज्ञापन-ब्रेक खत्म होने वाले हैंडलर में, यह देखें कि क्या पिछला ब्रेक स्नैपबैक की वजह से चलाया गया था. अगर ऐसा होता है, तो उपयोगकर्ता को उस जगह पर वापस ले जाएं जहां वह पहले जाना चाहता था. हालांकि, ऐसा तब तक किया जा सकता है, जब तक कि वह विज्ञापन ब्रेक के बीच में न हो:
- (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event {
switch (event.type) {
case kIMAAdEvent_AD_BREAK_ENDED: {
if (self.snapbackMode) {
self.snapbackMode = NO;
if (CMTimeCompare(self.seekEndTime, self.contentPlayer.currentTime)) {
[self.contentPlayer seekToTime:self.seekEndTime];
}
}
break;
}
}
}