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

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

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

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

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

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

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

यहां IMA डीएआई एसडीके में इस वर्कफ़्लो को लागू करने का तरीका बताया गया है. इसे 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;
}