Начало работы с 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 интерактивной медиарекламы .

Обзор 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, ознакомьтесь с другими руководствами или загрузите наши примеры приложений-приемников .

,

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

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

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

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

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

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

Обзор 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, ознакомьтесь с другими руководствами или загрузите наши примеры приложений-приемников .

,

Выберите интересное вам решение DAI

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

Это руководство демонстрирует, как играть в DAI -поток, используя IMA CAF DAI SDK. Если вы хотите просмотреть или следовать вместе с завершенной выборкой интеграции, загрузите пример .

Прежде чем использовать это руководство, обязательно ознакомьтесь с протоколом веб -приемника Chromecast Pramework Framework . Это руководство предполагает базовый уровень знакомства с концепциями приемника CAF, такими как интерцепторы сообщений и объекты mediaInformation , а также знакомство с использованием инструмента команды CAST и управления для эмуляции отправителя CAF.

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

Для получения информации об интеграции с другими платформами или об использовании SDK на стороне IMA см. Интерактивные медиа-рекламы SDK .

Каф Дай Обзор

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

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

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

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

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

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

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

Чтобы настроить эти значения в инструменте команды CAST и управления, нажмите вкладку Load Media и установите тип пользовательского запроса загрузки для 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 и получите менеджер игрока

Добавьте тег сценария, чтобы импортировать 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 Stream

Инициализируйте менеджер потока 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>

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

CAF DAI SDK использует перехватчик сообщений CAF для выполнения запросов потока и замены URL контента на конечный DAI Stream. Сообщение Interceptor вызывает 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 Streams с помощью Google Caf Dai SDK. Чтобы узнать о более усовершенствованных функциях SDK, см. Другие руководства или загрузите наши образцы приложений приемника .

,

Select the DAI solution you're interested in

Full service DAI

This guide demonstrates how to play a DAI stream, using the IMA CAF DAI SDK. If you would like to view or follow along with a completed sample integration, download the example .

Before using this guide, be sure to familiarize yourself with the Chromecast Application Framework's Web Receiver protocol. This guide assumes a basic level of familiarity with CAF receiver concepts, such as message interceptors and mediaInformation objects, as well as familiarity with using the Cast Command and Control tool to emulate a CAF sender.

To use IMA DAI, you must have an Ad Manager 360 account. If you have an Ad Manager account, contact your account manager for more details. For information about signing up for Ad Manager, visit the Ad Manager Help Center .

For information on integrating with other platforms, or on using the IMA client-side SDKs, see Interactive Media Ads SDKs .

CAF DAI overview

Implementing DAI using the IMA CAF DAI SDK involves two main components as demonstrated in this guide:

  • StreamRequest : An object that defines a stream request to Google's advertising servers. Stream requests come in two main varieties:

    • LiveStreamRequest : specifies an Asset Key , and an optional API key , as well as other optional parameters.
    • VODStreamRequest : Specifies a Content Source ID , a Video ID , and an optional API key , as well as other optional parameters.
  • StreamManager : An object that handles communication between the video stream and the IMA DAI SDK, such as firing tracking pings and forwarding stream events to the publisher.

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

  • A Cast Developer Console account with a registered test device.
  • A hosted web receiver app that is registered with your Cast Developer Console and which can be modified to host the code provided by this guide.
  • A sending app that is configured to use your web receiver app. This example uses the Cast Command and Control tool as the sender.

Configure the sender's MediaInfo objects

First, configure your sender app's MediaInfo object to include the following fields:

contentId A unique identifier for this media item
contentUrl The fallback stream URL to load if the DAI StreamRequest fails for any reason
streamType For live streams this value should be set to `LIVE`. For VOD streams, this value should be set to `BUFFERED`
customData assetKey Live streams only. Identifies the livestream to be loaded
contentSourceId VOD streams only. Identifies the media feed that contains the requested stream.
videoId VOD streams only. Identifies the requested stream within the specified media feed.
ApiKey An optional API key that can be required to retrieve the stream URL from the IMA DAI SDK
senderCanSkip A boolean value to let the receiver know whether the sending device has the ability to display a skip button, enabling support for skippable ads

To configure these values in the cast command and control tool, click the Load Media tab, and set the custom load request type to LOAD . Then replace the JSON data in the text area with one of the following JSON objects:

ЖИТЬ

{
  "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"
}

This custom load request object can be sent to the receiver to test the following steps.

Create a basic CAF receiver

Following the CAF SDK Basic Receiver Guide, create a basic web receiver.

Your receiver's code should look like this:

<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>

Import the IMA DAI SDK and get the Player Manager

Add a script tag to import the IMA DAI SDK for CAF to your web receiver, just after the script loading CAF. The CAF DAI SDK is evergreen, so there is no need to set a specific version. Then in the script tag that follows, store the receiver context and player manager as constants before starting the receiver.

<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>

Initialize the IMA Stream Manager

Initialize the CAF DAI SDK's Stream Manager .

<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>

Create the load message interceptor

The CAF DAI SDK uses the CAF load message interceptor to make stream requests and replace the content URL with the final DAI stream. The message interceptor calls streamManager.requestStream() which handles setting ad breaks, requesting the stream, and replacing the existing contentURL .

There can only be one load message interceptor, so if your app requires the use of the interceptor, you need to incorporate any custom functions into the same callback.

<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>

Build the stream request

To complete your CAF DAI integration, you need to build your stream request using the data that was included in the mediaInfo object from the sender.

<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>

You're now able to request and playback DAI streams with Google's CAF DAI SDK. To learn about more advanced SDK features, see the other guides or download our sample receiver applications .