स्नैपबैक

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

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

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

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

डायग्राम फ़ॉर्मैट में, यह ऐसा दिखता है:

जैसा कि AdvancedExample में, 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;
}