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

प्लैटफ़ॉर्म चुनें: 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 के लिए 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.
}

कस्टम प्रीलोडिंग लागू करने की जांच करना

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

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

समय

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

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

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

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