Memuat media secara otomatis

Pilih platform: HTML5 Android

IMA SDK mendukung pemuatan aset iklan video terlebih dahulu. Anda dapat mengaktifkan fitur ini di integrasi SDK untuk memberikan transisi yang lebih lancar antara iklan dan konten. Panduan ini membahas detail teknis penerapan pemuatan awal media dengan IMA SDK.

Prasyarat

Pramuat memerlukan IMA Android SDK versi 3.17.0 atau yang lebih tinggi.

Mengaktifkan pramuat

Untuk mengaktifkan pramuat, gunakan AdsRenderingSettings.setEnablePreloading() untuk menyetel pramuat ke benar (true). Tindakan ini harus dilakukan dalam callback onAdsManagerLoaded():

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

Mendukung pemuatan awal dengan VideoAdPlayer kustom

Sebaiknya gunakan ekstensi ExoPlayer-IMA yang digunakan dalam aplikasi contoh Android ExoPlayer. Setelah diintegrasikan, ekstensi ExoPlayer-IMA akan mengaktifkan pramuat secara default dan menyertakan dukungan pramuat bawaan.

Jika Anda menerapkan pemuatan awal tanpa ekstensi ExoPlayer-IMA, perubahan tambahan diperlukan setelah setEnablePreloading() dipanggil. Agar pemutar video mendukung pemuatan iklan di awal, pemutar harus melacak objek AdMediaInfo yang diteruskan dalam panggilan dari loadAd() dan playAd(), serta menyertakan AdMediaInfo yang benar pada panggilan AdPlayerCallback. Hal ini mungkin memerlukan struktur data untuk mengelola objek AdMediaInfo, mengingat loadAd() untuk AdMediaInfo berikutnya dapat terjadi saat AdMediaInfo sebelumnya sedang diputar. Contoh berikut menunjukkan beberapa perubahan yang mungkin perlu Anda lakukan agar aplikasi Anda mendukung pemuatan awal:

// 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.
}

Menguji penerapan pra-pemuatan kustom

Untuk penerapan pemuatan awal kustom, pengujian kasus ekstrem berikut direkomendasikan untuk memverifikasi penyiapan pemuatan awal yang benar:

  • Preroll iklan tunggal
  • Preroll pod iklan 3
  • Mid-roll pod iklan 3
  • Mencari midroll kedua setelah midroll pertama mulai memuat sebelumnya, tetapi sebelum diputar
  • Pemutaran post-roll

Waktu

Tabel berikut merangkum perubahan dalam pengaturan waktu pemuatan iklan saat pra-pemuatan diaktifkan:

Acara Dengan Pramuat Tanpa Pramuat
VAST iklan yang diminta AdsLoader.requestAds() AdsLoader.requestAds()
Pre-roll dimuat (iklan tunggal) AdsManager.init() AdsManager.start()
Pre-roll dimuat (VMAP/Aturan iklan) AdsManager.init() AdsManager.init()
Mid-roll atau post-roll dimuat Untuk iklan pertama dalam jeda iklan, 8 detik sebelum waktu mulai iklan. Untuk iklan berurutan, saat iklan sebelumnya mulai diputar. Pada waktu mulai iklan.

FAQ

Apakah pramuat media memuat materi iklan lengkap?
Tidak, materi iklan biasanya belum dimuat sepenuhnya saat pemutaran iklan dimulai. Pramuat ditujukan untuk meningkatkan kualitas pengalaman pengguna dengan meminimalkan waktu yang diperlukan iklan untuk dimuat. Fitur ini tidak dimaksudkan untuk mendukung penayangan iklan offline.
Apakah pramuat media perlu diaktifkan untuk VAST iklan dan media?
Tidak, SDK selalu memuat VAST iklan terlebih dahulu, terlepas dari setelan pemuatan ini.