라이브 스트림에 프리롤 광고 로드
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
IMA SDK는 실시간 스트림 및 VOD로 수익을 창출하는 데 사용할 수 있습니다.
라이브 스트림의 경우 각 광고 시점에 대해 새로운 광고 요청을 해야 합니다.
모든 시청자가 요청하지 않도록 시차를 두고 요청을 보내세요.
광고를 동시에 게재하며 광고 서버를 지연시킬 수 있습니다.
이를 위해 IMA SDK에는 AdsRequest.liveStreamPrefetchSeconds
속성 이 속성은 SDK의 최대 시간(초)을 지정합니다.
호출한 후 광고 서버에 연결하기 전에 대기해야 합니다.
AdsLoader.requestAds()
실제 요청 시간은 무작위로 지정됩니다. 대상
예를 들어 AdsRequest.liveStreamPrefetchSeconds
를 30으로 설정하면 SDK는
실제로 사용자가 실제로 실행하기 위해 AdsLoader.requestAds()
를 호출한 후 0~30초 동안
서버에 요청할 수 있습니다
라이브 스트림 프리패치의 실제 사용 사례
광고 시점이 완료되는 즉시 다음 광고 시점을 미리 가져오는 것이 좋습니다.
이렇게 하면 프리패치 기간에 사용할 수 있는 최대 시간이 보장됩니다.
다음 광고 시점 사이에 5분의 간격이 있다고 가정해 보겠습니다. 광고 시점이 완료되면
프리패치 기간 290초로 다음 광고 시점을 요청할 수 있습니다
(5분에서 10초를 뺀 값,
프리페치 창에서 해결할 수 있는 충분한 시간이 있습니다.
Objective-C
- (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdEvent:(IMAAdEvent *)event {
...
switch (event.type) {
...
case kIMAAdEvent_ALL_ADS_COMPLETED:
IMAAdsRequest *request = [[IMAAdsRequest alloc]
initWithAdTagUrl: self.adTagUrl
adDisplayContainer: self.adDisplayContainer
avPlayerVideoDisplay: self.avPlayerVideoDisplay
pictureInPictureProxy: self.pictureInPictureProxy
userContext: nil];
// set a delay between the end of the last ad
// in the last request, and the first ad from
// the new request
Float64 adGap = 30;
// make sure the request occurs at least five
// seconds before starting the new set of ads
request.liveStreamPrefetchSeconds = adGap - 5;
[self.adsLoader requestAdsWithRequest:request];
// start new ads after adGap seconds have elapsed
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, adGap * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[adsManager start];
});
break;
...
}
...
}
Swift
func adsManager(_ adsManager: IMAAdsManager!, didReceive event: IMAAdEvent!) {
switch event.type {
...
case IMAAdEventType.ALL_ADS_COMPLETED:
let request = IMAAdsRequest(
adTagUrl: AdTagUrl,
adDisplayContainer: adDisplayContainer,
contentPlayhead: contentPlayhead,
userContext: nil)
// set a delay between the end of the last ad
// in the last request, and the first ad from
// the new request
let adGap = 30
// make sure the request occurs at least five
// seconds before starting the new set of ads
request.liveStreamPrefetchSeconds = adGap - 5
adsLoader.requestAds(with: request)
// start new ads after adGap seconds have elapsed
DispatchQueue.main.asyncAfter(deadline: .now() + adGap) {
adsManager.start()
}
break
...
}
}
달리 명시되지 않는 한 이 페이지의 콘텐츠에는 Creative Commons Attribution 4.0 라이선스에 따라 라이선스가 부여되며, 코드 샘플에는 Apache 2.0 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 Google Developers 사이트 정책을 참조하세요. 자바는 Oracle 및/또는 Oracle 계열사의 등록 상표입니다.
최종 업데이트: 2025-08-01(UTC)
[null,null,["최종 업데이트: 2025-08-01(UTC)"],[[["\u003cp\u003eThe IMA SDK allows for monetization of both live streams and video-on-demand content through ad integration.\u003c/p\u003e\n"],["\u003cp\u003eFor live streams, stagger ad requests using the \u003ccode\u003eAdsRequest.liveStreamPrefetchSeconds\u003c/code\u003e property to prevent ad server overload.\u003c/p\u003e\n"],["\u003cp\u003eSetting \u003ccode\u003eAdsRequest.liveStreamPrefetchSeconds\u003c/code\u003e introduces a randomized delay (within the specified range) before the SDK requests ads, helping distribute the load.\u003c/p\u003e\n"],["\u003cp\u003eIt's recommended to pre-fetch the next ad break immediately after the current one finishes, maximizing the pre-fetch window and ensuring smoother transitions.\u003c/p\u003e\n"],["\u003cp\u003eExample code snippets (Objective-C and Swift) demonstrate how to implement live stream pre-fetching and manage ad breaks effectively.\u003c/p\u003e\n"]]],[],null,["# Load pre-roll ads for livestream\n\nThe IMA SDK can be used to monetize live streams as well as video-on-demand.\nFor live streams, you need to make a new ad request for each ad break.\nStagger these requests to ensure that all of your viewers aren't requesting\nads at the same time and bogging down the ad server(s).\n\nTo help with this, the IMA SDK has the `AdsRequest.liveStreamPrefetchSeconds`\nproperty. This property specifies the maximum number of seconds the SDK\nshould wait before reaching out to the ad server after you call\n`AdsLoader.requestAds()`. The actual request time will be randomized. For\nexample, if you set `AdsRequest.liveStreamPrefetchSeconds` to 30, the SDK\nwaits 0 to 30 seconds after you call `AdsLoader.requestAds()` to actually\nmake the request to the server.\n\nLive stream pre-fetch in practice\n---------------------------------\n\nWe recommend pre-fetching your next ad break as soon as an ad break completes.\nThis ensures the maximum length of time is available for your pre-fetch window.\nSuppose you have 5 minutes between ad breaks. When an ad break completes,\nyou can request your next ad break with a pre-fetch window of 290 seconds\n(5 minutes minus 10 seconds, to make sure the requests sent at the end of\nthe pre-fetch window have enough time to resolve): \n\n### Objective-C\n\n\n - (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdEvent:(IMAAdEvent *)event {\n\n ...\n\n switch (event.type) {\n\n ...\n\n case kIMAAdEvent_ALL_ADS_COMPLETED:\n\n IMAAdsRequest *request = [[IMAAdsRequest alloc]\n initWithAdTagUrl: self.adTagUrl\n adDisplayContainer: self.adDisplayContainer\n avPlayerVideoDisplay: self.avPlayerVideoDisplay\n pictureInPictureProxy: self.pictureInPictureProxy\n userContext: nil];\n\n // set a delay between the end of the last ad\n // in the last request, and the first ad from\n // the new request\n Float64 adGap = 30;\n // make sure the request occurs at least five\n // seconds before starting the new set of ads\n request.liveStreamPrefetchSeconds = adGap - 5;\n [self.adsLoader requestAdsWithRequest:request];\n // start new ads after adGap seconds have elapsed\n dispatch_after(dispatch_time(DISPATCH_TIME_NOW, adGap * NSEC_PER_SEC), dispatch_get_main_queue(), ^{\n [adsManager start];\n });\n\n break;\n\n ...\n\n }\n\n ...\n\n }\n\n### Swift\n\n func adsManager(_ adsManager: IMAAdsManager!, didReceive event: IMAAdEvent!) {\n switch event.type {\n\n ...\n\n case IMAAdEventType.ALL_ADS_COMPLETED:\n\n let request = IMAAdsRequest(\n adTagUrl: AdTagUrl,\n adDisplayContainer: adDisplayContainer,\n contentPlayhead: contentPlayhead,\n userContext: nil)\n\n // set a delay between the end of the last ad\n // in the last request, and the first ad from\n // the new request\n let adGap = 30\n // make sure the request occurs at least five\n // seconds before starting the new set of ads\n request.liveStreamPrefetchSeconds = adGap - 5\n adsLoader.requestAds(with: request)\n // start new ads after adGap seconds have elapsed\n DispatchQueue.main.asyncAfter(deadline: .now() + adGap) {\n adsManager.start()\n }\n\n break\n\n ...\n }\n }"]]