মিডিয়া প্রিলোড হচ্ছে

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

কাস্টম প্রিলোডিং বাস্তবায়ন পরীক্ষা করা হচ্ছে

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

  • একক বিজ্ঞাপন প্রিরোল
  • 3 বিজ্ঞাপন পড প্রিরোল
  • 3 বিজ্ঞাপন পড midroll
  • প্রথম মিডরোলটি প্রিলোডিং শুরু হওয়ার পরে কিন্তু এটি প্লে হওয়ার আগেই একটি দ্বিতীয় মিডরোলের সন্ধান করা হচ্ছে৷
  • পোস্টরোল প্লেব্যাক

টাইমিং

নিম্নোক্ত সারণীটি প্রিলোডিং সক্ষম করার সময় বিজ্ঞাপন-লোডের সময় পরিবর্তনের সংক্ষিপ্ত বিবরণ দেয়:

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

FAQ

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