SDK IMA можно использовать для монетизации прямых трансляций, а также видео по запросу. Для прямых трансляций необходимо отправлять новый запрос на показ рекламы для каждой рекламной паузы. Распределите эти запросы по времени, чтобы все зрители не запрашивали рекламу одновременно и не перегружали рекламные серверы.
Для этого в SDK IMA есть свойство AdsRequest.liveStreamPrefetchSeconds . Это свойство задает максимальное количество секунд, которое SDK должен ждать перед обращением к рекламному серверу после вызова AdsLoader.requestAds() . Фактическое время запроса будет случайным. Например, если вы установите AdsRequest.liveStreamPrefetchSeconds равным 30, SDK будет ждать от 0 до 30 секунд после вызова AdsLoader.requestAds() , прежде чем фактически отправить запрос на сервер.
Предварительная загрузка прямой трансляции на практике
Мы рекомендуем предварительно загружать следующую рекламную паузу сразу после ее завершения. Это гарантирует максимальное время, доступное для предварительной загрузки. Предположим, у вас есть 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;
...
}
...
}
Быстрый
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
...
}
}