開始使用 IMA DAI SDK

選取感興趣的 DAI 解決方案

完整服務 DAI

本指南說明如何使用 IMA CAF DAI SDK 播放 DAI 串流。如果您要查看或執行已完成的範例整合,請下載範例

使用本指南前,請務必熟悉 Chromecast 應用程式架構的網路接收器通訊協定。本指南假定您對 CAF 接收器概念 (例如訊息攔截器mediaInformation 物件) 有基本的熟悉,並瞭解如何使用 Cast 指令與控制工具模擬 CAF 傳送者。

如要使用 IMA DAI,您必須擁有 Ad Manager 360 帳戶。如果你擁有 Ad Manager 帳戶,請與客戶經理聯絡以瞭解詳情。如要瞭解如何註冊 Ad Manager,請前往 Ad Manager 說明中心

如要瞭解如何與其他平台整合,或瞭解如何使用 IMA 用戶端 SDK,請參閱互動式媒體廣告 SDK

CAF DAI 總覽

使用 IMA CAF DAI SDK 導入 DAI 時,涉及兩個主要元件,如本指南所示:

  • StreamRequest:定義向 Google 廣告伺服器傳送串流要求的物件。串流要求主要有兩種:

    • LiveStreamRequest:指定素材資源金鑰、選用的 API 金鑰,以及其他選用參數。
    • VODStreamRequest:指定內容來源 ID影片 ID 和選用的 API 金鑰,以及其他選用參數。
  • StreamManager:處理影片串流與 IMA DAI SDK 之間通訊的物件,例如觸發追蹤連線偵測 (ping) 並將串流事件轉送至發布商。

必要條件

設定傳送者的 MediaInfo 物件

首先,設定傳送者應用程式的 MediaInfo 物件,納入以下欄位:

contentId 此媒體項目的專屬 ID
contentUrl 當 DAI StreamRequest 因任何原因失敗時,要載入的備用串流網址
streamType 如果是直播,這個值應設為「LIVE」。如果是 VOD 串流,這個值應設為「BUFFERED」
customData assetKey 僅限直播。找出要載入的直播影片。
contentSourceId 僅限隨選影片串流。識別包含要求的串流的媒體動態饋給。
videoId 僅限隨選影片串流。識別指定媒體動態饋給中的要求串流。
ApiKey 可從 IMA DAI SDK 擷取串流網址時需要的選用 API 金鑰
senderCanSkip 這個布林值可讓接收端瞭解傳送裝置是否能顯示略過按鈕,以支援可略過廣告。

如要在投放指令和控制工具中設定這些值,請按一下「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"
}

隨選影片

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

新增指令碼標記,即可在指令碼載入 CAF 之後,將 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 的 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>

建立載入訊息攔截器

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 功能,請參閱其他指南或下載範例接收器應用程式