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

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

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

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

Прежде чем использовать это руководство, обязательно ознакомьтесь с протоколом веб-приемника Chromecast Application Framework . В этом руководстве предполагается базовый уровень знакомства с концепциями приемников CAF, такими как перехватчики сообщений и объекты mediaInformation , а также знание использования инструмента Cast Command and Control для эмуляции отправителя CAF.

Чтобы использовать IMA DAI, у вас должен быть аккаунт Менеджера рекламы 360 . Если у вас есть учетная запись Менеджера рекламы, обратитесь к менеджеру своего аккаунта за более подробной информацией. Информацию о регистрации в Менеджере рекламы можно найти в Справочном центре Менеджера рекламы .

Информацию об интеграции с другими платформами или использовании клиентских SDK IMA см. в разделе SDK Interactive Media Ads .

Обзор CAF DAI

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

  • StreamRequest : объект, определяющий запрос потока к рекламным серверам Google. Потоковые запросы бывают двух основных разновидностей:

    • LiveStreamRequest : указывает ключ актива и необязательный ключ API , а также другие необязательные параметры.
    • VODStreamRequest : указывает идентификатор источника контента , идентификатор видео и необязательный ключ API , а также другие необязательные параметры.
  • StreamManager : объект, который обрабатывает связь между видеопотоком и IMA DAI SDK, например отправляет запросы отслеживания и пересылает события потока издателю.

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

  • Учетная запись Cast Developer Console с зарегистрированным тестовым устройством.
  • Размещенное веб-приложение-приемник , зарегистрированное в вашей консоли разработчика Cast и которое можно изменить для размещения кода, представленного в этом руководстве.
  • Приложение-отправитель, настроенное на использование вашего веб-приложения-приемника. В этом примере в качестве отправителя используется инструмент Cast Command and Control .

Настройте объекты MediaInfo отправителя.

Сначала настройте объект MediaInfo вашего приложения-отправителя, включив в него следующие поля:

contentId Уникальный идентификатор этого медиа-элемента.
contentUrl URL-адрес резервного потока для загрузки в случае сбоя DAI StreamRequest по какой-либо причине.
streamType Для прямых трансляций это значение должно быть установлено на «LIVE». Для потоков VOD это значение должно быть установлено на `BUFFERED`.
customData assetKey Только прямые трансляции. Определяет прямую трансляцию для загрузки
contentSourceId Только VOD-трансляции. Идентифицирует медиаканал, содержащий запрошенный поток.
videoId Только VOD-трансляции. Идентифицирует запрошенный поток в указанном медиаканале.
ApiKey Дополнительный ключ API, который может потребоваться для получения URL-адреса потока из IMA DAI SDK.
senderCanSkip Логическое значение, позволяющее получателю узнать, имеет ли отправляющее устройство возможность отображать кнопку пропуска, обеспечивая поддержку пропускаемой рекламы.

Чтобы настроить эти значения в инструменте управления и контроля приведения, перейдите на вкладку «Загрузить носитель» и установите тип пользовательского запроса загрузки на LOAD . Затем замените данные JSON в текстовой области одним из следующих объектов JSON:

ЖИТЬ

{
  "media": {
    "contentId": "bbb",
    "contentUrl": "https://storage.googleapis.com/interactive-media-ads/media/bbb.m3u8",
    "streamType": "LIVE",
    "customData": {
      "assetKey": "sN_IYUG8STe1ZzhIIE_ksA",
      "ApiKey": "",
      "senderCanSkip": true
    }
  },
  "credentials": "testCredentials"
}

VOD

{
  "media": {
    "contentId": "tos",
    "contentUrl": "https://storage.googleapis.com/interactive-media-ads/media/tos.m3u8",
    "streamType": "BUFFERED",
    "customData": {
      "contentSourceId": "2548831",
      "videoId": "tears-of-steel",
      "ApiKey": "",
      "senderCanSkip": true
    }
  },
  "credentials": "testCredentials"
}

Этот пользовательский объект запроса загрузки можно отправить получателю для проверки следующих шагов.

Создайте базовый приемник CAF

Следуя руководству по базовому приемнику CAF SDK, создайте базовый веб-приемник.

Код вашего получателя должен выглядеть следующим образом:

<html>
<head>
  <script type="text/javascript"
      src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js">
  </script>
</head>
<body>
  <cast-media-player></cast-media-player>
  <script>
    cast.framework.CastReceiverContext.getInstance().start();
  </script>
</body>
</html>

Импортируйте IMA DAI SDK и получите Player Manager.

Добавьте тег сценария, чтобы импортировать IMA DAI SDK для CAF в веб-приемник сразу после загрузки CAF сценарием. CAF DAI SDK постоянно обновляется, поэтому нет необходимости устанавливать конкретную версию. Затем в следующем теге сценария сохраните контекст получателя и менеджер проигрывателя как константы перед запуском приемника.

<html>
<head>
  <script type="text/javascript"
      src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
  <script src="//imasdk.googleapis.com/js/sdkloader/cast_dai.js"></script>
</head>
<body>
  <cast-media-player></cast-media-player>
  <script>
    const castContext = cast.framework.CastReceiverContext.getInstance();
    const playerManager = castContext.getPlayerManager();

    castContext.start();
  </script>
</body>
</html>

Инициализируйте диспетчер потоков IMA

Инициализируйте диспетчер потоков CAF DAI SDK.

<html>
<head>
  <script type="text/javascript"
      src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
  <script src="//imasdk.googleapis.com/js/sdkloader/cast_dai.js"></script>
</head>
<body>
  <cast-media-player></cast-media-player>
  <script>
    const castContext = cast.framework.CastReceiverContext.getInstance();
    const playerManager = castContext.getPlayerManager();
    const streamManager = new google.ima.cast.dai.api.StreamManager();

    castContext.start();
  </script>
</body>
</html>

Создайте перехватчик сообщения о загрузке

SDK CAF DAI использует перехватчик сообщений о загрузке CAF для выполнения запросов потока и замены URL-адреса контента окончательным потоком DAI. Перехватчик сообщений вызывает функциюstreamManager.requestStream() , которая управляет установкой рекламных пауз, запросом потока и заменой существующего contentURL .

Может быть только один перехватчик сообщения о загрузке, поэтому, если ваше приложение требует использования перехватчика, вам необходимо включить любые пользовательские функции в один обратный вызов.

<html>
<head>
  <script type="text/javascript"
      src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
  <script src="//imasdk.googleapis.com/js/sdkloader/cast_dai.js"></script>
</head>
<body>
  <cast-media-player></cast-media-player>
  <script>
    const castContext = cast.framework.CastReceiverContext.getInstance();
    const playerManager = castContext.getPlayerManager();
    const streamManager = new google.ima.cast.dai.api.StreamManager();

    const getStreamRequest = (request) => null;

    playerManager.setMessageInterceptor(
        cast.framework.messages.MessageType.LOAD, (request) => {
          return streamManager.requestStream(request, getStreamRequest(request))
              .then((request) => {
                this.broadcast('Stream request successful.');
                return Promise.resolve(request);
              })
              .catch((error) => {
                this.broadcast('Stream request failed.');
                return Promise.resolve(request);
              });
        });

    castContext.start();
  </script>
</body>
</html>

Создайте запрос потока

Чтобы завершить интеграцию CAF DAI, вам необходимо создать запрос потока, используя данные, включенные в объект mediaInfo от отправителя.

<html>
<head>
  <script type="text/javascript"
      src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
  <script src="//imasdk.googleapis.com/js/sdkloader/cast_dai.js"></script>
</head>
<body>
  <cast-media-player></cast-media-player>
  <script>
    const castContext = cast.framework.CastReceiverContext.getInstance();
    const playerManager = castContext.getPlayerManager();
    const streamManager = new google.ima.cast.dai.api.StreamManager();

    const getStreamRequest = (request) => {
      const imaRequestData = request.media.customData;
      let streamRequest = null;
      if (imaRequestData.assetKey) {
        // Live stream
        streamRequest = new google.ima.cast.dai.api.LiveStreamRequest();
        streamRequest.assetKey = imaRequestData.assetKey;
      } else if (imaRequestData.contentSourceId) {
        // VOD stream
        streamRequest = new google.ima.cast.dai.api.VODStreamRequest();
        streamRequest.contentSourceId = imaRequestData.contentSourceId;
        streamRequest.videoId = imaRequestData.videoId;
      }
      if (streamRequest && imaRequestData.ApiKey) {
        streamRequest.ApiKey = imaRequestData.ApiKey;
      }
      if (streamRequest && imaRequestData.senderCanSkip) {
        streamRequest.senderCanSkip = imaRequestData.senderCanSkip;
      }
      return streamRequest;
    };

    playerManager.setMessageInterceptor(
        cast.framework.messages.MessageType.LOAD, (request) => {
          return streamManager.requestStream(request, getStreamRequest(request))
              .then((request) => {
                return Promise.resolve(request);
              })
              .catch((error) => {
                this.broadcast('Stream request failed.');
                return Promise.resolve(request);
              });
        });

    castContext.start();
  </script>
</body>
</html>

Теперь вы можете запрашивать и воспроизводить потоки DAI с помощью Google CAF DAI SDK. Чтобы узнать о более продвинутых функциях SDK, ознакомьтесь с другими руководствами или загрузите наши примеры приложений-приемников .