IMA SDK는 동영상 광고 애셋의 사전 로드를 지원합니다. SDK 통합에서 이 기능을 사용 설정하여 광고와 콘텐츠 간의 전환을 더 원활하게 할 수 있습니다. 이 가이드에서는 IMA SDK로 미디어 미리 로드를 구현하는 기술적 세부정보를 설명합니다.
기본 요건
사전 로드에는 IMA Android SDK 버전 3.17.0 이상이 필요합니다.
미리 로드 사용 설정
미리 로드를 사용 설정하려면AdsRenderingSettings.setEnablePreloading()
를 사용하여 미리 로드를 true로 설정합니다. 이 작업은 onAdsManagerLoaded()
콜백 내에서 실행해야 합니다.
@Override
public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) {
...
AdsRenderingSettings adsRenderingSettings =
ImaSdkFactory.getInstance().createAdsRenderingSettings();
adsRenderingSettings.setEnablePreloading(true);
mAdsManager.init(adsRenderingSettings);
}
맞춤 VideoAdPlayer로 미리 로드 지원
Android ExoPlayer 예시 앱에서 사용되는 ExoPlayer-IMA 확장 프로그램을 사용하는 것이 좋습니다. 통합되면 ExoPlayer-IMA 확장 프로그램에는 기본적으로 미리 로드가 사용 설정되어 있으며 기본 제공 미리 로드 지원이 포함됩니다.
ExoPlayer-IMA 확장 프로그램 없이 미리 로드를 구현하는 경우 setEnablePreloading()
가 호출된 후 추가 변경사항이 필요합니다. 동영상 플레이어가 광고 미리 로드를 지원하려면 loadAd()
및 playAd()
의 호출에서 전달되는 AdMediaInfo
객체를 추적하고 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개 광고 모음 미드롤
- 첫 번째 미드롤이 사전 로드를 시작했지만 재생되기 전에 두 번째 미드롤로 탐색
- 포스트롤 재생
시간
다음 표에는 사전 로드가 사용 설정된 경우 광고 로드 타이밍의 변경사항이 요약되어 있습니다.
이벤트 | 미리 로드 | 미리 로드 없음 |
---|---|---|
광고 VAST 요청됨 | AdsLoader.requestAds() |
AdsLoader.requestAds() |
프리롤 로드됨 (단일 광고) | AdsManager.init() |
AdsManager.start() |
프리롤 로드됨 (VMAP/광고 규칙) | AdsManager.init() |
AdsManager.init() |
미드롤 또는 포스트롤 로드됨 | 광고 시간의 첫 번째 광고의 경우 광고 시작 시간 8초 전 연속 광고의 경우 이전 광고가 재생되기 시작할 때입니다. | 광고 시작 시간 |
FAQ
- 미디어 사전 로딩은 전체 광고 소재를 로드하나요?
- 아니요. 광고 재생이 시작될 때 광고 소재가 완전히 로드되지 않는 경우가 많습니다. 사전 로드는 광고가 로드되는 시간을 최소화하여 사용자 환경을 개선하기 위한 것입니다. 오프라인 광고 게재를 지원하기 위한 것이 아닙니다.
- 광고의 VAST와 미디어 모두에 미디어 미리 로딩을 사용 설정해야 하나요?
- 아니요. SDK는 이 미리 로드 설정과 관계없이 항상 광고의 VAST를 미리 로드합니다.