स्नैपबैक

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

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

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

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

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

जैसा कि AdvancedExample में बताया गया है, Android IMA SDK में इस वर्कफ़्लो को लागू करने का तरीका यहां बताया गया है.

वीडियो में आगे/पीछे जाने की सुविधा को वीडियो के बीच में दिखने वाले विज्ञापन के लिए ब्रेक लेने से रोकें

देखें कि क्या उपयोगकर्ता ने कोई ऐसी खोज की है जो न देखे गए विज्ञापन ब्रेक के बाद भी हुई है. अगर ऐसा है, तो उन्हें विज्ञापन के लिए बने ब्रेक पर वापस ले जाएं. वीडियो के किसी भी हिस्से पर जाने का पता लगाने के लिए, 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;
}