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

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

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

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

Пример упреждающего запроса для прямой трансляции

Мы рекомендуем выполнять упреждающий запрос следующей рекламной паузы сразу после завершения текущей. Это позволит максимально увеличить время, доступное для упреждающего запроса. Предположим, между рекламными паузами проходит пять минут. Когда рекламная пауза завершится, вы можете запросить следующую рекламную паузу с окном упреждающего запроса в 290 секунд (5 минут минус 10 секунд, чтобы запросы, отправленные в конце окна упреждающего запроса, успели разрешиться):

// 5 minutes == 300 seconds. Include a 10 second buffer
var AD_INTERVAL = 290;

function onAdEvent(adEvent) {
  var ad = adEvent.getAd();
  switch(adEvent.type) {
    case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:
      // Pre-fetch our next ad break.
      requestAds();
      // Play those ads in 5 minutes. In a real-world implementation,
      // this is likely done as the result of a message from your
      // streaming server, not a timeout.
      setTimeout(playAds, AD_INTERVAL * 1000);// Convert to ms.
  }
}

function requestAds() {
  // Destroy the current AdsManager, in case the tag you requested previously
  // contains post-rolls (don't play those now).
  if (adsManager) {
    adsManager.destroy();
  }
  // Your AdsLoader will be set up on page-load. You should re-use the same
  // AdsLoader for every request. For more info on setting up the AdsLoader,
  // see the IMA HTML5 client-side "Set up the IMA SDK" guide:
  // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/get-started
  if (adsLoader) {
    // Reset the IMA SDK.
    adsLoader.contentComplete();
  }
  var adsRequest = new google.ima.AdsRequest();
  adsRequest.adTagUrl = '...';
  adsRequest.linearAdSlotWidth = <linear_width>;
  adsRequest.linearAdSlotHeight = <linear_height>;
  adsRequest.nonLinearAdSlotWidth = <nonlinear_width>;
  adsRequest.nonLinearAdSlotHeight = <nonlinear_height>;
  adsRequest.liveStreamPrefechSeconds = AD_INTERVAL;
  adsLoader.requestAds(adsRequest);
}

function playAds() {
  adsManager.init(<linear_width>,  <linear_height>);
  adsManager.start();
}