開始使用 IMA DAI SDK

選取所需的 DAI 解決方案

完整服務 DAI

本指南示範如何使用 IMA CAF DAI SDK 播放 DAI 串流。如果 想要查看或按照完成的整合範例進行 下載範例

使用本指南之前,請務必熟悉 Chromecast 應用程式架構的網路接收器通訊協定。這個 本指南假設您對 CAF 接收器概念已有基本程度的瞭解,如 訊息 攔截器mediaInformation敬上 物件,也熟悉如何使用 Cast 指令和控制 工具模擬 CAF 傳送者。

如要使用 IMA DAI,您必須具備 Ad Manager 360 帳戶。如果您有廣告 管理員帳戶,詳情請洽您的客戶經理。資訊 請前往 Ad Manager 說明中心 中心

瞭解如何與其他平台整合,或進一步瞭解如何使用 IMA 用戶端 SDK,請參閱「互動式媒體廣告 SDK」一文。

CAF DAI 總覽

使用 IMA CAF DAI SDK 導入 DAI 需要包含以下兩個主要元件: 如本指南所示:

  • StreamRequest: 這個物件可定義傳送至 Google 廣告伺服器的串流要求。 串流要求有兩種主要類型:

    • LiveStreamRequest: 會指定 Asset Key,以及選用的 API 金鑰 等 自選參數
    • VODStreamRequest: 指定 Content Source ID影片 ID 和選用的 API key 和其他選用參數。
  • StreamManager: 處理影片串流與 IMA DAI 之間的通訊的物件 SDK,例如觸發追蹤連線偵測 (ping),以及將串流事件轉送至 內容。

必要條件

設定傳送者的 MediaInfo 物件

首先,設定傳送端應用程式的 MediaInfo 應包含的物件 以下欄位:

contentId 這個媒體項目的專屬 ID
contentUrl 當 DAI StreamRequest 發生任何錯誤時,要載入的備用串流網址 原因
streamType 如果是直播,這個值應設為「LIVE」。隨選影片串流: 這個值應設為「BUFFERED」
customData assetKey 僅適用於直播。識別要載入的直播
contentSourceId 僅限隨選影片串流。識別包含 要求的串流。
videoId 僅限隨選影片串流。識別在 指定的媒體資訊提供。
ApiKey 選用的 API 金鑰,可從中擷取串流網址。 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"
}

隨選影片

{
  "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 並取得播放器管理工具

請新增指令碼代碼,將 CAF 適用的 IMA DAI SDK 匯入您的網路接收器。 ,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 Manager

初始化 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 載入訊息 攔截器 提出串流請求,並將內容網址替換成最終 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>

您現在可以使用 Google 的 CAF DAI SDK 請求及播放 DAI 串流。 如要進一步瞭解其他進階 SDK 功能,請參閱其他指南或 下載我們的範例接收器 應用程式