Предварительная загрузка рекламных пауз в трансляциях

Выберите платформу: HTML5 Android iOS tvOS

IMA SDK можно использовать для монетизации как прямых трансляций, так и видео по запросу. Для прямых трансляций необходимо отправлять новый запрос объявления для каждой рекламной паузы. Разнесите эти запросы по времени, чтобы зрители не запрашивали объявления одновременно и не перегружали серверы объявлений.

Для этого в IMA SDK есть свойство AdsRequest.liveStreamPrefetchSeconds. Это свойство определяет максимальное количество секунд, в течение которых SDK должен ждать, прежде чем обратиться к серверу объявлений после вызова AdsLoader.requestAds(). Фактическое время запроса будет выбираться случайным образом. Например, если вы зададите для параметра AdsRequest.liveStreamPrefetchSeconds значение 30, то после вызова функции AdsLoader.requestAds() SDK будет ждать от 0 до 30 секунд, прежде чем отправить запрос на сервер.

Предварительная загрузка трансляций в реальном времени

Рекомендуем выполнять упреждающую выборку следующей рекламной паузы сразу после завершения предыдущей. Это позволит максимально увеличить время, доступное для упреждающего запроса. Предположим, между рекламными паузами проходит пять минут. Когда рекламная пауза завершится, вы можете запросить следующую рекламную паузу с окном упреждающего запроса в 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

    ...
  }
}