在 Roku 上使用 IMA DAI SDK

播放使用 Google Cloud Video Stitcher API 註冊的 VOD 串流

本指南將說明如何使用 Roku 的 IMA DAI SDK 來要求及播放 Google Cloud VOD 串流工作階段

本指南將 IMA DAI 的入門指南中的基本範例做進一步說明。

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

如要查看或瞭解完整的整合範例,請下載 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

VOD 串流的 VOD 設定 ID: VOD_CONFIG_ID

如要進一步瞭解如何建立 VOD 設定 ID,請參閱「雲端拼接功能建立 VOD 設定指南」。

設定基本範例

下載並執行 IMA Roku DAI 基本範例。按一下影片播放器上的播放按鈕,即可開始播放短片「Tears of Steel」,每 30 秒就會插播廣告。

要求 VOD 串流

使用 sdk.createVideoStitcherVodStreamRequestWithVodConfig() 函式,將樣本串流取代為已縫合廣告的 VOD 串流。您可以使用 Google Ad Manager UI 找出產生的 DAI 工作階段,以便監控及偵錯。

在現有範例中,有條件式陳述式可決定要建構 VOD StreamRequest 還是直播 StreamRequest。新增路徑,使用先前產生的值建構 Cloud Video Stitcher VOD StreamRequest

範例如下:

basic_example/components/MainScene.xml

<?xml version="1.0" encoding="utf-8" ?>
<component name="MainScene" extends="Scene" initialFocus = "myVideo">
<script type="text/brightscript">
<![CDATA[
  function init()
    m.video = m.top.findNode("myVideo")
    m.video.notificationinterval = 1
    m.testLiveStream = {
      title: "Livestream",
      assetKey: "c-rArva4ShKVIAkNfy6HUQ",
      apiKey: "",
      type: "live"
    }
    m.testVodStream = {
      title: "VOD stream"
      contentSourceId: "2548831",
      videoId: "tears-of-steel",
      apiKey: "",
      type: "vod"
    }
    m.testVideoStitcherVodStream = {
      title: "My Stream Title",
      vodConfigId: "VOD_CONFIG_ID",
      networkCode: "NETWORK_CODE",
      region: "LOCATION",
      projectNumber: "PROJECT_NUMBER",
      oAuthToken: "OAUTH_TOKEN",
      apiKey: "",
      title: "Video Stitcher VOD Stream",
      type: "stitcherVod"
    }

    loadImaSdk()
  end function

  function loadImaSdk() as void
    m.sdkTask = createObject("roSGNode", "imasdk")
    m.sdkTask.observeField("sdkLoaded", "onSdkLoaded")
    m.sdkTask.observeField("errors", "onSdkLoadedError")

    ' Set this to the stream data you would like to play.
    selectedStream = m.testVideoStitcherVodStream
    m.videoTitle = selectedStream.title
    m.sdkTask.streamData = selectedStream

    m.sdkTask.observeField("urlData", "urlLoadRequested")
    m.sdkTask.video = m.video
    ' Setting control to run starts the task thread.
    m.sdkTask.control = "RUN"
  end function

basic_example/components/Sdk.xml

Sub loadStream()
  sdk = m.sdk
  sdk.initSdk()
  setupVideoPlayer()

  request = {}
  streamData = m.top.streamData
  if streamData.type = "live"
    request = sdk.CreateLiveStreamRequest(streamData.assetKey, streamData.apiKey)
  else if streamData.type = "vod"
    request = sdk.CreateVodStreamRequest(streamData.contentSourceId, streamData.videoId, streamData.apiKey)
  else if streamData.type = "stitcherVod"
    request = sdk.createVideoStitcherVodStreamRequest(
      streamData.vodConfigId,
      streamData.networkCode,
      streamData.region,
      streamData.projectNumber,
      streamData.oAuthToken
    )
  else
    request = sdk.CreateStreamRequest()
  end if

  request.player = m.player
  request.adUiNode = m.top.video

  requestResult = sdk.requestStream(request)
  If requestResult <> Invalid
    print "Error requesting stream ";requestResult
  Else
    m.streamManager = Invalid
    While m.streamManager = Invalid
      sleep(50)
      m.streamManager = sdk.getStreamManager()
    End While
    If m.streamManager = Invalid or m.streamManager["type"] <> Invalid or m.streamManager["type"] = "error"
      errors = CreateObject("roArray", 1, True)
      print "error ";m.streamManager["info"]
      errors.push(m.streamManager["info"])
      m.top.errors = errors
    Else
      m.top.streamManagerReady = True
      addCallbacks()
      m.streamManager.start()
    End If
  End If
End Sub

重新載入應用程式,即可要求並播放自訂 VOD 串流。

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

如要自訂串流要求,請在 StreamRequest 物件中填入 videoStitcherSessionOptions 參數,藉此新增工作階段選項,覆寫預設的 Cloud Video Stitcher API 設定。

如果您提供未知的選項,Cloud Video Stitcher API 會回應 HTTP 400 錯誤。如需協助,請參閱疑難排解指南

舉例來說,您可以使用以下程式碼片段覆寫資訊清單選項,要求兩個串流資訊清單,並以最低比特率至最高比特率的順序排列呈現內容。


request = sdk.createVideoStitcherVodStreamRequestWithVodConfig(vodConfigId, networkCode, region, projectNumber, oAuthToken)

request.player = m.player
request.adUiNode = m.top.video

' The following session options are examples. Use session options
' that are compatible with your video stream.
sessionOptions = {
  "manifestOptions": {
    "bitrateOrder": "ascending"
  }
}
request.videoStitcherSessionOptions = sessionOptions

requestResult = sdk.requestStream(request)

清除所用資源

您已成功使用 Google Cloud Video Stitcher API 代管 VOD 串流,並使用 Roku 的 IMA DAI SDK 進行要求,因此請務必清理所有服務資源。

請按照VOD 清理指南移除所有不必要的資源和素材資源。