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 BasicExample ऐप्लिकेशन में किया जाता है. इंटिग्रेट होने पर, ExoPlayer-IMA एक्सटेंशन में डिफ़ॉल्ट रूप से प्रीलोड करने की सुविधा चालू होती है. साथ ही, इसमें प्रीलोड करने की सुविधा पहले से मौजूद होती है.
अगर ExoPlayer-IMA एक्सटेंशन के बिना, पेजों को पहले से लोड करने की प्रोसेस लागू की जा रही है,
तो setEnablePreloading()
को कॉल करने के बाद, कुछ और बदलाव करने होंगे. वीडियो प्लेयर में विज्ञापनों को पहले से लोड करने की सुविधा काम करे, इसके लिए उसे loadAd()
और playAd()
से कॉल में पास किए गए AdMediaInfo
ऑब्जेक्ट का ट्रैक रखना होगा. साथ ही, AdPlayerCallback
कॉल में सही AdMediaInfo
शामिल करना होगा. इसके लिए, AdMediaInfo
ऑब्जेक्ट को मैनेज करने के लिए डेटा-स्ट्रक्चर की ज़रूरत पड़ सकती है. ऐसा इसलिए, क्योंकि किसी अगले AdMediaInfo
के लिए loadAd()
तब हो सकता है, जब कोई मौजूदा AdMediaInfo
चल रहा हो. नीचे दिए गए उदाहरण में कुछ ऐसे बदलाव बताए गए हैं जिनकी ज़रूरत आपको अपने ऐप्लिकेशन पर पहले से लोड करने की सुविधा के लिए पड़ सकती है:
// 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() |
प्री-रोल लोड किया गया (VMAP/विज्ञापन नियम) | AdsManager.init() |
AdsManager.init() |
वीडियो के बीच में या खत्म होने के बाद दिखने वाला विज्ञापन लोड हो गया हो | विज्ञापन के लिए ब्रेक में पहले विज्ञापन के दिखने से आठ सेकंड पहले. लगातार चलने वाले विज्ञापनों के लिए, जब पिछला विज्ञापन चलना शुरू होता है. | विज्ञापन के शुरू होने के समय. |
अक्सर पूछे जाने वाले सवाल
- क्या मीडिया को पहले से लोड करने की सुविधा, पूरा क्रिएटिव लोड करती है?
- नहीं, विज्ञापन चलना शुरू होने पर, क्रिएटिव आम तौर पर पूरी तरह से लोड नहीं होता है. विज्ञापन को लोड होने में लगने वाले समय को कम करके, उपयोगकर्ता अनुभव को बेहतर बनाने के लिए विज्ञापन को पहले से लोड किया जाता है. इसका मकसद, ऑफ़लाइन विज्ञापन दिखाने की सुविधा को बेहतर बनाना नहीं है.
- क्या विज्ञापन के वीएएसटी के साथ-साथ मीडिया के लिए, मीडिया को पहले से लोड करने की सुविधा चालू होनी चाहिए?
- नहीं, SDK टूल हमेशा विज्ञापन के वीएएसटी को पहले से लोड कर देता है. भले ही, पहले से लोड करने की यह सेटिंग कुछ भी हो.