پیش بارگیری رسانه

پلتفرم مورد نظر را انتخاب کنید: HTML5 اندروید

کیت توسعه نرم‌افزار IMA از پیش‌بارگذاری محتوای تبلیغاتی ویدیویی پشتیبانی می‌کند. می‌توانید این ویژگی را در ادغام SDK خود فعال کنید تا انتقال یکپارچه‌تری بین تبلیغات و محتوا فراهم شود. این راهنما به جزئیات فنی پیاده‌سازی پیش‌بارگذاری رسانه با IMA SDK می‌پردازد.

پیش‌نیاز

پیش‌بارگذاری به نسخه ۳.۱۷.۰ یا بالاتر از IMA Android SDK نیاز دارد.

فعال کردن پیش‌بارگذاری

برای فعال کردن پیش‌بارگذاری، AdsRenderingSettings.setEnablePreloading() برای تنظیم پیش‌بارگذاری روی true استفاده کنید. این کار باید در داخل تابع onAdsManagerLoaded() انجام شود:

@Override
public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) {
  ...
  AdsRenderingSettings adsRenderingSettings =
      ImaSdkFactory.getInstance().createAdsRenderingSettings();
  adsRenderingSettings.setEnablePreloading(true);
  mAdsManager.init(adsRenderingSettings);
}

پشتیبانی از پیش بارگذاری با VideoAdPlayer سفارشی

ما افزونه ExoPlayer-IMA را که در برنامه نمونه ExoPlayer اندروید استفاده می‌شود، توصیه می‌کنیم. افزونه ExoPlayer-IMA پس از ادغام، به طور پیش‌فرض قابلیت پیش‌بارگذاری را فعال می‌کند و شامل پشتیبانی از پیش‌بارگذاری داخلی است.

اگر پیش‌بارگذاری را بدون افزونه ExoPlayer-IMA پیاده‌سازی می‌کنید، پس از فراخوانی setEnablePreloading() تغییرات اضافی لازم است. برای اینکه یک پخش‌کننده ویدیو از پیش‌بارگذاری تبلیغات پشتیبانی کند، باید اشیاء AdMediaInfo را که در فراخوانی‌های loadAd() و playAd() ارسال می‌شوند، پیگیری کند و AdMediaInfo صحیح را در فراخوانی‌های AdPlayerCallback لحاظ کند. این امر ممکن است به یک ساختار داده برای مدیریت اشیاء 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/Ad) AdsManager.init() AdsManager.init()
بارگذاری شده در اواسط یا پس از رول برای اولین تبلیغ در یک وقفه تبلیغاتی، ۸ ثانیه قبل از زمان شروع تبلیغ. برای تبلیغات متوالی، زمانی که تبلیغ قبلی شروع به پخش می‌کند. در زمان شروع تبلیغ.

سوالات متداول

آیا پیش‌بارگذاری رسانه، کل محتوای خلاقانه را بارگذاری می‌کند؟
خیر، معمولاً هنگام شروع پخش آگهی، تبلیغ به طور کامل بارگذاری نمی‌شود. پیش‌بارگذاری برای بهبود تجربه کاربری با به حداقل رساندن زمان بارگذاری آگهی در نظر گرفته شده است. این قابلیت برای پشتیبانی از نمایش آفلاین آگهی در نظر گرفته نشده است.
آیا لازم است پیش‌بارگذاری رسانه برای VAST تبلیغ و همچنین رسانه فعال باشد؟
خیر، SDK صرف نظر از این تنظیم پیش‌بارگذاری، همیشه VAST مربوط به تبلیغ را از قبل بارگذاری می‌کند.