Начало работы с IMA DAI SDK

IMA SDK упрощают интеграцию мультимедийной рекламы на ваши веб-сайты и приложения. IMA SDK могут запрашивать рекламу с любого рекламного сервера , совместимого с VAST, и управлять воспроизведением рекламы в ваших приложениях. С помощью SDK IMA DAI приложения отправляют потоковый запрос на рекламу и видеоконтент — либо VOD, либо контент в реальном времени. Затем SDK возвращает объединенный видеопоток, так что вам не придется управлять переключением между рекламой и видеоконтентом в вашем приложении.

Выберите решение DAI, которое вас интересует

Полный сервис DAI

В этом руководстве показано, как интегрировать IMA DAI SDK в простое приложение видеоплеера. Если вы хотите просмотреть или проследить за завершенным примером интеграции, загрузите простой пример с GitHub.

Обзор IMA DAI

Внедрение IMA DAI SDK включает в себя два основных компонента, как показано в этом руководстве:

  • StreamRequest — либо VODStreamRequest , либо LiveStreamRequest : объект, определяющий запрос потока. Запросы на поток могут относиться как к видео по запросу, так и к прямым трансляциям. В запросах указывается идентификатор контента, а также ключ API или токен аутентификации и другие параметры.
  • StreamManager : объект, который обрабатывает потоки динамической вставки рекламы и взаимодействие с серверной частью DAI. Менеджер потоков также обрабатывает отслеживание пингов и пересылает события потока и рекламы издателю.

Предварительные условия

  • Три пустых файла
    • dai.html
    • dai.css
    • dai.js
  • Python установлен на вашем компьютере или веб-сервере для тестирования.

Запустить сервер разработки

Поскольку IMA DAI SDK загружает зависимости, используя тот же протокол, что и страница, с которой он загружается, для тестирования приложения необходимо использовать веб-сервер. Быстрый способ запустить локальный сервер разработки — использовать встроенный сервер Python.

  1. Используя командную строку, из каталога, содержащего файл index.html запустите:

    python -m http.server 8000
    
  2. В веб-браузере перейдите по адресу http://localhost:8000/

    Вы также можете использовать любой другой веб-сервер, например HTTP-сервер Apache .

Создайте простой видеоплеер

Сначала измените dai.html , чтобы создать простой видеоэлемент HTML5 и элемент div, который будет использоваться для перехода по клику. Также добавьте необходимые теги для загрузки файлов dai.css и dai.js , а также для импорта видеоплеера hls.js Затем измените dai.css , указав размер и положение элементов страницы. Наконец, в dai.js определите переменные для хранения информации о запросе потока и функцию initPlayer() которая будет запускаться при загрузке страницы.

dai.html

<html>
<head>
  <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
  <script src="dai.js"></script>
  <link rel="stylesheet" href="dai.css" type="text/css">
</head>
<body onLoad="initPlayer()">
  <h2>IMA DAI SDK DAI Demo (HLS.JS)</h2>
    <video id="video"></video>
    <div id="ad-ui"></div>
</body>
</html>

dai.css

#video,
#ad-ui {
  width: 640px;
  height: 360px;
  position: absolute;
  top: 35px;
  left: 0;
}

#ad-ui {
  cursor: pointer;
}

dai.js

var BACKUP_STREAM =
    'https://storage.googleapis.com/interactive-media-ads/media/bbb.m3u8'

// Livestream asset key.
var TEST_ASSET_KEY = "sN_IYUG8STe1ZzhIIE_ksA";

// VOD content source and video IDs.
var TEST_CONTENT_SOURCE_ID = "2548831";
var TEST_VIDEO_ID = "tears-of-steel";

var hls = new Hls(); // hls.js video player
var videoElement;
var adUiElement;
var isAdBreak;

function initPlayer() {
  videoElement = document.getElementById('video');
  adUiElement = document.getElementById('adUi');
}

Загрузите SDK IMA DAI

Затем добавьте платформу IMA, используя тег сценария в dai.html перед тегом dai.js.

dai.html

<html>
<head>
  <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
  <script type="text/javascript" src="//imasdk.googleapis.com/js/sdkloader/ima3_dai.js"></script>
  <script src="dai.js"></script>
  <link rel="stylesheet" href="dai.css" type="text/css">
</head>

Инициализируйте StreamManager и сделайте запрос потока.

Чтобы запросить набор объявлений, создайте ima.dai.api.StreamManager , который отвечает за запрос и управление потоками DAI. Конструктор принимает элемент видео, а полученный экземпляр принимает элемент пользовательского интерфейса объявления для обработки кликов по рекламе.

Затем определите функции, которые запрашивают потоки. Этот пример включает функции как для VOD, так и для прямых трансляций, которые создают экземпляры VODStreamRequest и LiveStreamRequest соответственно, а затем вызываютstreamManager.requestStream streamManager.requestStream() с streamRequest . Для прямых трансляций вам также необходимо добавить обработчик для прослушивания синхронизированных событий метаданных и пересылки событий в StreamManager . Вы можете прокомментировать или раскомментировать код в соответствии со своим вариантом использования. Оба метода используют дополнительный ключ API. Если вы используете защищенный поток, вам необходимо создать ключ аутентификации DAI .

Ни один из потоков в этом примере не защищен, поэтому apiKey не используется.

dai.js

function initPlayer() {
  videoElement = document.getElementById('video');
  adUiElement = document.getElementById('adUi');
  streamManager = new google.ima.dai.api.StreamManager(videoElement, adUiElement)

  // Timed metadata is only used for LIVE streams.
  hls.on(Hls.Events.FRAG_PARSING_METADATA, function(event, data) {
    if (streamManager && data) {
      // For each ID3 tag in the metadata, pass in the type - ID3, the
      // tag data (a byte array), and the presentation timestamp (PTS).
      data.samples.forEach(function(sample) {
        streamManager.processMetadata('ID3', sample.data, sample.pts);
      });
    }
  });

  requestVODStream(TEST_CONTENT_SOURCE_ID, TEST_VIDEO_ID, null);
  // Uncomment the line below and comment out the one above to request a
  // LIVE stream instead of a VOD stream.
  //requestLiveStream(TEST_ASSET_KEY, null);
}

function requestVODStream(cmsId, videoId, apiKey) {
  var streamRequest = new google.ima.dai.api.VODStreamRequest();
  streamRequest.contentSourceId = cmsId;
  streamRequest.videoId = videoId;
  streamRequest.apiKey = apiKey;
  streamManager.requestStream(streamRequest);
}

function requestLiveStream(assetKey, apiKey) {
  var streamRequest = new google.ima.dai.api.LiveStreamRequest();
  streamRequest.assetKey = assetKey;
  streamRequest.apiKey = apiKey;
  streamManager.requestStream(streamRequest);
}

Обработка событий потока

Наконец, вам необходимо реализовать прослушиватели событий для основных видеособытий. В этом простом примере события LOADED , ERROR , AD_BREAK_STARTED и AD_BREAK_ENDED обрабатываются путем вызова функции onStreamEvent() . Эта функция обрабатывает загрузку потока и ошибки, а также отключает элементы управления проигрывателем во время воспроизведения рекламы, что требуется SDK. Когда поток загружается, видеопроигрыватель загружает и воспроизводит предоставленный URL-адрес с помощью функции loadUrl() .

Вы также можете настроить прослушиватели событий для событий pause и start видеоэлемента, чтобы позволить пользователю возобновить воспроизведение, когда IMA приостанавливается во время рекламных пауз.

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

dai.js

var isAdBreak;

function initPlayer() {
  videoElement = document.getElementById('video');
  adUiElement = document.getElementById('adUi');
  streamManager = new google.ima.dai.api.StreamManager(videoElement, adUiElement);
  videoElement.addEventListener('pause', onStreamPause);
  videoElement.addEventListener('play', onStreamPlay);

  streamManager.addEventListener(
    [google.ima.dai.api.StreamEvent.Type.LOADED,
     google.ima.dai.api.StreamEvent.Type.ERROR,
     google.ima.dai.api.StreamEvent.Type.AD_BREAK_STARTED,
     google.ima.dai.api.StreamEvent.Type.AD_BREAK_ENDED],
    onStreamEvent,
    false);
...
function onStreamEvent(e) {
  switch (e.type) {
    case google.ima.dai.api.StreamEvent.Type.LOADED:
      console.log('Stream loaded');
      loadUrl(e.getStreamData().url);
      break;
    case google.ima.dai.api.StreamEvent.Type.ERROR:
      console.log('Error loading stream, playing backup stream.' + e);
      loadUrl(BACKUP_STREAM);
      break;
    case google.ima.dai.api.StreamEvent.Type.AD_BREAK_STARTED:
      console.log('Ad Break Started');
      isAdBreak = true;
      videoElement.controls = false;
      adUiElement.style.display = 'block';
      break;
    case google.ima.dai.api.StreamEvent.Type.AD_BREAK_ENDED:
      console.log('Ad Break Ended');
      isAdBreak = false;
      videoElement.controls = true;
      adUiElement.style.display = 'none';
      break;
    default:
      break;
  }
}

function loadUrl(url) {
  console.log('Loading:' + url);
  hls.loadSource(url);
  hls.attachMedia(videoElement);
  hls.on(Hls.Events.MANIFEST_PARSED, function() {
    console.log('Video Play');
    videoElement.play();
  });
}

function onStreamPause() {
  console.log('paused');
  if (isAdBreak) {
    videoElement.controls = true;
    adUiElement.style.display = 'none';
  }
}

function onStreamPlay() {
  console.log('played');
  if (isAdBreak) {
    videoElement.controls = false;
    adUiElement.style.display = 'block';
  }
}

Вот и все! Теперь вы запрашиваете и показываете рекламу с помощью IMA DAI SDK. Чтобы узнать о более продвинутых функциях SDK, ознакомьтесь с другими руководствами или примерами на GitHub .