設定 DAI 專用的 IMA SDK

使用 IMA SDK,即可輕鬆將多媒體廣告整合至網站和應用程式。IMA SDK 可向任何 符合 VAST 規定的廣告伺服器請求廣告,並在應用程式中管理廣告播放。應用程式可透過 IMA DAI SDK,對廣告和內容影片 (隨選影片或直播內容) 提出串流請求。SDK 接著會傳回合併的影片串流,因此您不必在應用程式中管理廣告和內容影片之間的切換。

選取您感興趣的 DAI 解決方案

播放透過 Google Cloud Video Stitcher API 註冊的 VOD 串流

本指南說明如何使用適用於 HTML5 的 IMA DAI SDK,要求及播放 Google Cloud VOD 串流工作階段

本指南會擴充 IMA DAI 入門指南中的基本範例。

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

如要查看或追蹤完成的整合範例,請下載 HLSDASH 的 Cloud Video Stitcher 範例。

設定 Google Cloud 專案

設定 Google Cloud 專案,並設定服務帳戶來存取專案

輸入下列變數,供 IMA SDK 使用:

位置
建立 VOD 設定的 Google Cloud 地區LOCATION
專案編號
使用 Video Stitcher API 的 Google Cloud 專案編號: PROJECT_NUMBER
OAuth 權杖

服務帳戶的短期 OAuth 權杖,並具備 Video Stitcher 使用者角色:

OAUTH_TOKEN

進一步瞭解如何建立短期 OAuth 權杖。只要 OAuth 權杖未過期,即可在多項要求中重複使用。

聯播網代碼

用於要求廣告的 Ad Manager 聯播網代碼: NETWORK_CODE

VOD 設定 ID

隨選影片串流的隨選影片設定 ID: VOD_CONFIG_ID

如要進一步瞭解如何建立 VOD 設定 ID,請參閱雲端縫合建立 VOD 設定指南

設定開發環境

IMA 範例應用程式只會示範 HLS 串流要求。建構 VideoStitcherVodStreamRequest 類別時,您仍可使用 DASH 串流。設定與 DASH 相容的播放器時,您需要為影片播放器的進度事件設定監聽器,以便將影片的中繼資料提供給 StreamManager.processMetadata()。這個函式採用三個參數:

  1. type:字串,必須為 HTTP 即時串流設為 'ID3',為 DASH 串流設為 'urn:google:dai:2018'

  2. data:如果是 DASH 事件訊息,這是訊息資料字串。

  3. timestamp:DASH 串流的事件訊息開始時間。

請盡快傳送中繼資料,並盡可能頻繁地傳送,因為這些資料是從播放器事件提供。如果缺少中繼資料或中繼資料有誤,IMA DAI SDK 可能不會觸發廣告事件,導致廣告事件回報不正確。

下載 HTML5 適用的 IMA DAI 範例,然後將 hls_js/simple 範例 zip 檔案解壓縮到新資料夾。這個範例是網頁應用程式,您可以在本機託管,用於測試。

如要在本機代管範例,請前往新資料夾,然後執行下列 Python 指令來啟動網路伺服器:

python3 -m http.server 8000

http.server 僅適用於 Python 3.x。您可以使用任何其他網路伺服器,例如 Apache HTTP 伺服器或 Node JS。

開啟網路瀏覽器並前往 localhost:8000,即可看到影片播放器。 瀏覽器必須支援 HLS.js 程式庫。

如果一切運作正常,點按影片播放器上的「播放」按鈕,就會開始播放短片「鋼鐵之淚」,每 30 秒會插入廣告。

要求 VOD 串流

如要將範例串流替換為已插入廣告的隨選視訊串流,請使用 VideoStitcherVodStreamRequest 類別,自動透過 Google Ad Manager 建立廣告工作階段。您可以使用 Google Ad Manager 使用者介面找出產生的 DAI 工作階段,以便監控及偵錯。

在現有範例中,有要求隨選影片串流或直播的函式。如要搭配 Google Cloud Video Stitcher API 使用,您需要新增函式來傳回 VideoStitcherVodStreamRequest 物件。

範例如下:

// StreamManager which will be used to request DAI streams.
let streamManager;
...

function initPlayer() {
  videoElement = document.getElementById('video');
  adUiElement = document.getElementById('adUi');
  streamManager = new google.ima.dai.api.StreamManager(
    videoElement,
    adUiElement
  );
  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);

  hls.on(Hls.Events.FRAG_PARSING_METADATA, function(event, data) {
    if (streamManager && data) {
      // For each ID3 tag in our metadata, we 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);
      });
    }
  });

  videoElement.addEventListener('pause', () => {
    playButton.style.display = "block";
  });

  playButton.addEventListener('click', initiatePlayback);
}

function initiatePlayback() {
  requestVodVideoStitcherStream();

  playButton.style.display = "none";
  playButton.removeEventListener('click', initiatePlayback);
  playButton.addEventListener('click', resumePlayback);
}
...
function requestVodVideoStitcherStream() {
  const streamRequest = new google.ima.dai.api.VideoStitcherVodStreamRequest();
  streamRequest.vodConfigId = 'VOD_CONFIG_ID';
  streamRequest.region = 'LOCATION';
  streamRequest.projectNumber = 'PROJECT_NUMBER';
  streamRequest.oAuthToken = 'OAUTH_TOKEN';
  streamRequest.networkCode = 'NETWORK_CODE';

  streamManager.requestStream(streamRequest);
}

重新載入頁面。接著,你就能要求播放自訂 VOD 串流。

(選用) 新增串流工作階段選項

如要自訂串流要求,請使用 VideoStitcherVodStreamRequest.videoStitcherSessionOptions 新增工作階段選項,覆寫預設的 Cloud Video Stitcher API 設定。如果您提供無法辨識的選項,Cloud Video Stitcher API 會傳回 HTTP 400 錯誤。如需協助,請參閱疑難排解指南

舉例來說,您可以透過下列程式碼片段覆寫資訊清單選項,要求兩個串流資訊清單,並依轉譯版本從最低位元率到最高位元率排序。

...

// The following session options are examples. Use session options
// that are compatible with your video stream.
streamRequest.videoStitcherSessionOptions = {
  "manifestOptions": {
    "bitrateOrder": "ascending"
  }
};

streamManager.requestStream(streamRequest);

清除所用資源

您已使用 Google Cloud Video Stitcher API 成功代管 VOD 串流,並使用 IMA DAI SDK for HTML5 請求該串流,現在請務必清除所有放送資源。

請按照 VOD 清理指南移除不必要的資源和資產。

最後,在啟動 Python 3 網路伺服器的終端機視窗中,使用 ctrl+C 指令結束本機伺服器。