IMA SDK ভিডিও বিজ্ঞাপন অ্যাসেট প্রি-লোড করা সমর্থন করে। বিজ্ঞাপন এবং কন্টেন্টের মধ্যে আরও নির্বিঘ্ন রূপান্তর নিশ্চিত করতে আপনি আপনার SDK ইন্টিগ্রেশনে এই ফিচারটি সক্রিয় করতে পারেন। এই নির্দেশিকায় IMA SDK ব্যবহার করে মিডিয়া প্রি-লোড বাস্তবায়নের প্রযুক্তিগত বিবরণ আলোচনা করা হয়েছে।
পূর্বশর্ত
প্রি-লোডিংয়ের জন্য আইএমএ অ্যান্ড্রয়েড এসডিকে-এর ৩.১৭.০ বা উচ্চতর সংস্করণ প্রয়োজন।
প্রিলোডিং সক্ষম করুন
প্রিলোডিং সক্রিয় করতে,AdsRenderingSettings.setEnablePreloading() ব্যবহার করে প্রিলোডিং-কে 'true' সেট করুন। এটি অবশ্যই onAdsManagerLoaded() কলব্যাকের মধ্যে করতে হবে:@Override
public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) {
...
AdsRenderingSettings adsRenderingSettings =
ImaSdkFactory.getInstance().createAdsRenderingSettings();
adsRenderingSettings.setEnablePreloading(true);
mAdsManager.init(adsRenderingSettings);
}
কাস্টম ভিডিওঅ্যাডপ্লেয়ার দিয়ে প্রি-লোডিং সমর্থন করা
আমরা অ্যান্ড্রয়েড এক্সোপ্লেয়ার উদাহরণ অ্যাপে ব্যবহৃত এক্সোপ্লেয়ার-আইএমএ এক্সটেনশনটি ব্যবহারের পরামর্শ দিই। ইন্টিগ্রেট করা হলে, এক্সোপ্লেয়ার-আইএমএ এক্সটেনশনটিতে ডিফল্টরূপে প্রি-লোডিং সক্রিয় থাকে এবং এতে বিল্ট-ইন প্রি-লোডিং সাপোর্ট অন্তর্ভুক্ত থাকে।
আপনি যদি ExoPlayer-IMA এক্সটেনশন ছাড়া প্রি-লোডিং প্রয়োগ করেন, তাহলে setEnablePreloading() কল করার পর অতিরিক্ত কিছু পরিবর্তন প্রয়োজন হবে। একটি ভিডিও প্লেয়ারকে বিজ্ঞাপন প্রি-লোডিং সমর্থন করার জন্য, এটিকে অবশ্যই loadAd() এবং playAd() কলে পাঠানো AdMediaInfo অবজেক্টগুলোর হিসাব রাখতে হবে এবং 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.
}
কাস্টম প্রিলোডিং বাস্তবায়ন পরীক্ষা করা
কাস্টম প্রিলোডিং বাস্তবায়নের ক্ষেত্রে, সঠিক প্রিলোডিং সেটআপ যাচাই করার জন্য নিম্নলিখিত এজ-কেসগুলো পরীক্ষা করার পরামর্শ দেওয়া হয়:
- একক বিজ্ঞাপন প্রি-রোল
- ৩ অ্যাড পড প্রিরোল
- ৩ অ্যাড পড মিডরোল
- প্রথম মিডরোলটি প্রি-লোডিং শুরু করার পর কিন্তু প্লে হওয়ার আগে দ্বিতীয় মিডরোল খোঁজা।
- পোস্টরোল প্লেব্যাক
সময়
প্রি-লোডিং চালু থাকলে বিজ্ঞাপন লোড হওয়ার সময়ে যে পরিবর্তনগুলো হয়, তা নিচের সারণিতে সংক্ষেপে তুলে ধরা হলো:
| অনুষ্ঠান | প্রিলোড সহ | প্রিলোড ছাড়া |
|---|---|---|
| অ্যাড ভাস্ট অনুরোধ করেছে | AdsLoader.requestAds() | AdsLoader.requestAds() |
| প্রি-রোল লোড করা হয়েছে (একক বিজ্ঞাপন) | AdsManager.init() | AdsManager.start() |
| প্রি-রোল লোড করা হয়েছে (ভিএমএপি/বিজ্ঞাপনের নিয়মাবলী) | AdsManager.init() | AdsManager.init() |
| মিড-রোল বা পোস্ট-রোল লোড করা | বিজ্ঞাপন বিরতির প্রথম বিজ্ঞাপনের ক্ষেত্রে, বিজ্ঞাপন শুরু হওয়ার ৮ সেকেন্ড আগে। পরপর বিজ্ঞাপনগুলোর ক্ষেত্রে, আগের বিজ্ঞাপনটি চলতে শুরু করলে। | বিজ্ঞাপন শুরুর সময়ে। |
প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী
- মিডিয়া প্রি-লোডিং কি সম্পূর্ণ ক্রিয়েটিভটি লোড করে?
- না, বিজ্ঞাপন প্লেব্যাক শুরু হওয়ার সময় সাধারণত ক্রিয়েটিভটি পুরোপুরি লোড হয় না। বিজ্ঞাপন লোড হওয়ার সময় কমিয়ে ব্যবহারকারীর অভিজ্ঞতা উন্নত করার জন্যই প্রি-লোডিং করা হয়। এটি অফলাইন বিজ্ঞাপন পরিবেশন সমর্থন করার জন্য নয়।
- বিজ্ঞাপনের VAST এবং মিডিয়া উভয়ের জন্যই কি মিডিয়া প্রি-লোডিং চালু করতে হবে?
- না, এই প্রিলোড সেটিং নির্বিশেষে SDK সর্বদা বিজ্ঞাপনের VAST প্রি-লোড করে।