वीडियो पब्लिशर के तौर पर, आपके पास यह विकल्प होता है कि दर्शक, वीडियो के बीच में दिखाए जाने वाले विज्ञापनों को स्किप न कर पाएं. जब कोई उपयोगकर्ता विज्ञापन ब्रेक को स्किप करने की कोशिश करता है, तो उसे विज्ञापन ब्रेक की शुरुआत पर वापस ले जाया जा सकता है. इसके बाद, विज्ञापन ब्रेक खत्म होने पर, उसे उस जगह पर वापस ले जाया जा सकता है जहां उसने स्किप करने की कोशिश की थी. इस सुविधा को "स्नैपबैक" कहा जाता है.
उदाहरण के लिए, यहां दिया गया डायग्राम देखें. दर्शक कोई वीडियो देख रहा है और वह उसे पांच मिनट से 15 मिनट के बीच देखना चाहता है. हालांकि, 10 मिनट के बाद एक विज्ञापन ब्रेक है. आपको यह विज्ञापन ब्रेक, वीडियो के उस हिस्से से पहले दिखाना है:
इस विज्ञापन ब्रेक को दिखाने के लिए, यह तरीका अपनाएं:
- देखें कि क्या उपयोगकर्ता ने ऐसे विज्ञापन ब्रेक को स्किप किया है जिसे उसने नहीं देखा है. अगर ऐसा है, तो उसे वापस विज्ञापन ब्रेक पर ले जाएं.
- विज्ञापन ब्रेक खत्म होने के बाद, उन्हें उनकी मूल जगह पर वापस ले जाएं.
डायग्राम के तौर पर, यह ऐसा दिखता है:
यहां बताया गया है कि IMA DAI SDK में इस वर्कफ़्लो को कैसे लागू किया जाता है. इसे AdvancedExample में लागू किया गया है.
सीख करने पर, विज्ञापन ब्रेक को बिना देखे छोड़े जाने से रोकना है
देखें कि क्या उपयोगकर्ता ने ऐसे विज्ञापन ब्रेक को स्किप किया है जिसे उसने नहीं देखा है. अगर ऐसा है, तो उसे वापस विज्ञापन ब्रेक पर ले जाएं.
Android SDK में, सीकिंग का पता लगाने के लिए PlayerControl
ऑब्जेक्ट का इस्तेमाल करें.
जब उपयोगकर्ता खोज करता है, तब SampleAdsWrapper
की मदद से लागू किए गए SampleHlsVideoPlayerCallback
के onSeek()
तरीके को ट्रिगर करें.
नीचे दिए गए तरीके से, उपयोगकर्ता के सीक टाइम से पहले क्यू पॉइंट की जांच की जाती है. अगर विज्ञापन नहीं चलाया गया है, तो उसे शुरू करने के लिए, विज्ञापन ब्रेक की शुरुआत में जाएं. इसके बजाय, वीडियो को उस जगह से शुरू करें जहां से उपयोगकर्ता ने उसे शुरू करने का अनुरोध किया था. साथ ही, वीडियो को शुरू करने के लिए उपयोगकर्ता की चुनी गई जगह को snapBackTime
में सेव करें.
@Override
public void onSeek(int timeMillis) {
double timeToSeek = timeMillis;
if (streamManager != null) {
CuePoint cuePoint =
streamManager.getPreviousCuePointForStreamTime(timeMillis / 1000);
if (cuePoint != null && !cuePoint.isPlayed()) {
snapBackTime = timeToSeek / 1000.0; // Update snapback time.
// Missed cue point, so snap back to the beginning of cue point.
timeToSeek = cuePoint.getStartTime() * 1000;
videoPlayer.seek(Math.round(timeToSeek));
videoPlayer.setCanSeek(false);
return;
}
}
videoPlayer.seek(Math.round(timeToSeek));
}
उपयोगकर्ता को उसकी मूल जगह पर वापस ले जाना
अब जब आपको onAdBreakEnded
इवेंट मिले, तो देखें कि snapBackTime
सेट है या नहीं. अगर ऐसा है, तो उपयोगकर्ता को स्ट्रीम में उस पॉइंट पर ले जाएं, क्योंकि अभी-अभी देखा गया विज्ञापन स्नैपबैक का नतीजा था:
@Override
public void onAdBreakEnded() {
// Re-enable player controls.
videoPlayer.setCanSeek(true);
videoPlayer.enableControls(true);
if (snapBackTime > 0) {
videoPlayer.seek(Math.round(snapBackTime * 1000));
}
snapBackTime = 0;
}