मीडिया को पहले से लोड करना

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

IMA SDK, वीडियो विज्ञापन के ऐसेट को पहले से लोड करने की सुविधा देता है. इस सुविधा को अपने SDK इंटिग्रेशन में चालू किया जा सकता है, ताकि विज्ञापन और कॉन्टेंट के बीच बेहतर तरीके से ट्रांज़िशन हो सके. इस गाइड में, IMA SDK की मदद से मीडिया को पहले से लोड करने की सुविधा लागू करने के बारे में तकनीकी जानकारी दी गई है.

पूर्वापेक्षा

पहले से लोड करने की सुविधा के लिए, IMA Android SDK का 3.17.0 या इसके बाद का वर्शन ज़रूरी है.

पहले से लोड करने की सुविधा चालू करना

पहले से लोड करने की सुविधा चालू करने के लिए, AdsRenderingSettings.setEnablePreloading() का इस्तेमाल करके, पहले से लोड करने की सुविधा को 'सही' पर सेट करें. यह कार्रवाई, onAdsManagerLoaded() कॉलबैक के अंदर की जानी चाहिए:

@Override
public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) {
  ...
  AdsRenderingSettings adsRenderingSettings =
      ImaSdkFactory.getInstance().createAdsRenderingSettings();
  adsRenderingSettings.setEnablePreloading(true);
  mAdsManager.init(adsRenderingSettings);
}

अपने हिसाब से बनाए गए VideoAdPlayer की मदद से, पहले से लोड करने की सुविधा का इस्तेमाल करना

हम ExoPlayer-IMA एक्सटेंशन का इस्तेमाल करने का सुझाव देते हैं. इसका इस्तेमाल, Android ExoPlayer के उदाहरण वाले ऐप्लिकेशन में किया जाता है. इंटिग्रेट करने पर, ExoPlayer-IMA एक्सटेंशन में पहले से लोड करने की सुविधा डिफ़ॉल्ट रूप से चालू होती है . साथ ही, इसमें पहले से लोड करने की सुविधा पहले से मौजूद होती है.

अगर ExoPlayer-IMA एक्सटेंशन के बिना, पहले से लोड करने की सुविधा लागू की जा रही है, तो setEnablePreloading() को कॉल करने के बाद, अतिरिक्त बदलाव करने की ज़रूरत होती है. किसी वीडियो प्लेयर को पहले से लोड करने की सुविधा के साथ काम करने के लिए, उसे AdMediaInfo ऑब्जेक्ट ट्रैक करने होंगे. ये ऑब्जेक्ट, loadAd() और playAd() से किए गए कॉल में पास किए जाते हैं. साथ ही, AdPlayerCallback कॉल में सही AdMediaInfo शामिल करना होगा. AdMediaInfo ऑब्जेक्ट मैनेज करने के लिए, डेटा-स्ट्रक्चर की ज़रूरत पड़ सकती है. ऐसा इसलिए, क्योंकि हो सकता है कि पहले से लोड किए गए AdMediaInfo के प्लेबैक के दौरान, बाद के AdMediaInfo के लिए loadAd() कॉल किया जाए. यहां एक उदाहरण दिया गया है, जिसमें कुछ ऐसे बदलाव दिखाए गए हैं जो आपको अपने ऐप्लिकेशन में, पहले से लोड करने की सुविधा चालू करने के लिए करने पड़ सकते हैं:

// enum for cases of PlayerState.
static enum PlayerState {
  IDLE,
  LOADED,
  PLAYING,
  PAUSED,
}

...

private final List<VideoAdPlayer.VideoAdPlayerCallback> callbacks;
private final ArrayList<AdMediaInfo> mediaInfos = new ArrayList<>();
private PlayerState playerState;
private boolean adCurrentlyLoaded;

...

@Override
public void playAd(AdMediaInfo adMediaInfo) {
  switch (playerState) {
    case LOADED:
      for (VideoAdPlayerCallback callback : callbacks) {
        callback.onPlay(adMediaInfo);
      }
      break;
    case PAUSED:
      for (VideoAdPlayerCallback callback : callbacks) {
        callback.onResume(adMediaInfo);
      }
      break;
    case PLAYING:
      // Intentionally and silently ignore since it is already playing from a prior media item,
      // note that onPlay is triggered by positionDiscontinuity.
      return;
    case IDLE:
      throw new IllegalStateException("Call to playAd when player state is not LOADED.");
  }
  playerState = PlayerState.PLAYING;
  player.setPlayWhenReady(true);
}

@Override
public void loadAd(AdMediaInfo adMediaInfo, AdPodInfo adPodInfo) {
  if (adCurrentlyLoaded == true) {
    mediaInfos.add(adMediaInfo);
    return;
  }
  player.stop();
  player.seekTo(0);
  mediaInfos.clear();
  mediaInfos.add(adMediaInfo);
  player.setPlayWhenReady(false);
  player.loadMedia(adMediaInfo.getUrl());
  playerState = PlayerState.LOADED;
  adCurrentlyLoaded = true;
}

@Override
public void stopAd(AdMediaInfo adMediaInfo) {
  if (allAdsInBreakHavePlayed()) {
    if (isFinalAd(adMediaInfo)) {
      // handle clean up after all ads have played.
    } else {
      seekToNextItem(player);
    }
  } else {
    mediaInfos.remove(adMediaInfo);
  }
}

private boolean allAdsInBreakHavePlayed() {
  // Code to determine if all the ads in the current ad break have completed.
}

private boolean isFinalAd(AdMediaInfo adMediaInfo) {
  // Code to determine if this adMediaInfo is the final ad.
}

private void seekToNextItem(YourPlayerClass player) {
  // Code to seek your player to the next media item.
}

पहले से लोड करने की सुविधा के लिए, अपने हिसाब से किए गए सेटअप की जांच करना

पहले से लोड करने की सुविधा के लिए, अपने हिसाब से किए गए सेटअप की जांच करने के लिए, इन खास स्थितियों की जांच करने का सुझाव दिया जाता है:

  • वीडियो शुरू होने से पहले दिखने वाला एक विज्ञापन
  • वीडियो शुरू होने से पहले दिखने वाले तीन विज्ञापनों का पॉड
  • वीडियो के बीच में दिखने वाले तीन विज्ञापनों का पॉड
  • वीडियो के बीच में दिखने वाले पहले विज्ञापन के पहले से लोड होने के बाद, लेकिन उसके चलने से पहले, वीडियो के बीच में दिखने वाले दूसरे विज्ञापन पर जाना
  • वीडियो खत्म होने के बाद दिखने वाले विज्ञापन का प्लेबैक

समय

नीचे दी गई टेबल में, पहले से लोड करने की सुविधा चालू होने पर, विज्ञापन लोड होने के समय में होने वाले बदलावों के बारे में खास जानकारी दी गई है:

इवेंट पहले से लोड करने की सुविधा चालू होने पर पहले से लोड करने की सुविधा बंद होने पर
विज्ञापन के VAST का अनुरोध किया गया AdsLoader.requestAds() AdsLoader.requestAds()
वीडियो शुरू होने से पहले विज्ञापन लोड हुआ (एक विज्ञापन) AdsManager.init() AdsManager.start()
वीडियो शुरू होने से पहले विज्ञापन लोड हुआ (VMAP/विज्ञापन के नियम) AdsManager.init() AdsManager.init()
वीडियो के बीच में दिखने वाले विज्ञापन या वीडियो खत्म होने के बाद विज्ञापन लोड हुआ विज्ञापन के लिए ब्रेक में दिखने वाले पहले विज्ञापन के लिए, विज्ञापन के शुरू होने के समय से आठ सेकंड पहले. लगातार दिखने वाले विज्ञापनों के लिए, जब पिछला विज्ञापन चलना शुरू होता है. विज्ञापन के शुरू होने के समय.

अक्सर पूछे जाने वाले सवाल

क्या मीडिया को पहले से लोड करने की सुविधा से, पूरा क्रिएटिव लोड होता है?
नहीं, आम तौर पर विज्ञापन का प्लेबैक शुरू होने पर, क्रिएटिव पूरी तरह से लोड नहीं होता. पहले से लोड करने की सुविधा का मकसद, उपयोगकर्ता अनुभव को बेहतर बनाना है. इसके लिए, विज्ञापन लोड होने में लगने वाले समय को कम किया जाता है. इसका मकसद, ऑफ़लाइन विज्ञापन दिखाने की सुविधा देना नहीं है.
क्या विज्ञापन के VAST के साथ-साथ मीडिया के लिए भी, पहले से लोड करने की सुविधा चालू करनी होती है?
नहीं, SDK टूल हमेशा विज्ञापन के VAST को पहले से लोड करता है. भले ही, पहले से लोड करने की यह सेटिंग चालू हो या नहीं.