মিডিয়া প্রিলোড করা

প্ল্যাটফর্ম বেছে নিন: 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() কল করার পরে অতিরিক্ত পরিবর্তন করতে হবে। ভিডিও প্লেয়ারে বিজ্ঞাপন প্রিলোড করার সুবিধা চালু করতে, loadAd() ও playAd() থেকে কলে পাস করা AdMediaInfo অবজেক্ট ট্র্যাক করতে হবে এবং AdPlayerCallback কলে সঠিক AdMediaInfo অন্তর্ভুক্ত করতে হবে। এর জন্য AdMediaInfo অবজেক্ট ম্যানেজ করার জন্য ডেটা-স্ট্রাকচার প্রয়োজন হতে পারে, কারণ loadAd() পরবর্তী AdMediaInfo-এর জন্য হতে পারে, যখন আগের 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.
}

কাস্টম প্রিলোডিং ইমপ্লিমেন্টেশন পরীক্ষা করা হচ্ছে

কাস্টম প্রিলোডিং প্রয়োগের জন্য, সঠিক প্রিলোডিং সেট-আপ যাচাই করতে নিম্নলিখিত এজ-কেসগুলি পরীক্ষা করার সাজেস্ট করা হয়:

  • সিঙ্গেল বিজ্ঞাপন প্রিরোল
  • ৩টি বিজ্ঞাপন পড প্রিরোল
  • ৩টি বিজ্ঞাপন পড মিডরোল
  • প্রথম মিডরোল প্রিলোড করা শুরু হওয়ার পরে কিন্তু সেটি চালানোর আগে দ্বিতীয় মিডরোলে যাওয়া
  • পোস্ট-রোল প্লেব্যাক

টাইমিং

প্রিলোড করার সুবিধা চালু থাকলে বিজ্ঞাপন লোড হওয়ার সময়ে কী পরিবর্তন হয় তা নিম্নলিখিত সারণীতে সংক্ষেপে দেখানো হয়েছে:

ইভেন্ট প্রিলোড সহ প্রিলোড ছাড়া
বিজ্ঞাপন VAST-এর অনুরোধ করা হয়েছে AdsLoader.requestAds() AdsLoader.requestAds()
প্রি-রোল লোড হয়েছে (একটি বিজ্ঞাপন) AdsManager.init() AdsManager.start()
প্রি-রোল লোড হয়েছে (VMAP/বিজ্ঞাপনের নিয়ম) AdsManager.init() AdsManager.init()
মিড-রোল বা পোস্ট-রোল লোড করা হয়েছে বিজ্ঞাপন বিরতিতে প্রথম বিজ্ঞাপনের জন্য, বিজ্ঞাপন শুরুর সময়ের ৮ সেকেন্ড আগে। পরপর দেখানো বিজ্ঞাপনের ক্ষেত্রে, আগের বিজ্ঞাপনটি শুরু হওয়ার সময়। বিজ্ঞাপন শুরু হওয়ার সময়।

প্রায়শই জিজ্ঞাসিত প্রশ্ন

মিডিয়া প্রিলোড করার সময় কি সম্পূর্ণ ক্রিয়েটিভ লোড হয়?
না, বিজ্ঞাপন প্লেব্যাক শুরু হওয়ার সময় ক্রিয়েটিভ সাধারণত সম্পূর্ণ লোড হয় না। প্রিলোড করার উদ্দেশ্য হল বিজ্ঞাপন লোড হতে যে সময় লাগে তা কমিয়ে ব্যবহারকারীর অভিজ্ঞতা উন্নত করা। এটি অফলাইনে বিজ্ঞাপন দেখানোর জন্য উপযুক্ত নয়।
বিজ্ঞাপনের VAST এবং মিডিয়ার জন্য কি মিডিয়া প্রিলোড করার সুবিধা চালু করতে হবে?
না, এই প্রিলোড সেটিং যাই হোক না কেন, SDK সবসময় বিজ্ঞাপনের VAST প্রিলোড করে।