在 Roku 上使用 IMA DAI SDK

播放使用 Google Cloud Video Stitcher API 注册的 VOD 串流

本指南将演示如何使用 IMA DAI SDK 即可请求并播放 Google Cloud VOD 视频流 会话

本指南对 IMA DAI 入门指南中的基本示例进行了扩展。

有关与其他平台集成或使用 IMA 客户端 SDK,请参阅互动式媒体广告 SDK

设置 Google Cloud 项目

输入以下变量以在 IMA SDK 中使用:

位置
Google Cloud 区域 创建 VOD 配置的位置: LOCATION
项目编号
使用 Video Stitcher API 的 Google Cloud 项目编号: PROJECT_NUMBER
OAuth 令牌

具有视频拼接工具用户角色的服务账号的短期有效 OAuth 令牌:

OAUTH_TOKEN

详细了解如何创建短期有效的 OAuth 令牌。 只要 OAuth 令牌未过期,就可以在多个请求中重复使用。

广告资源网代码

用于请求广告的 Ad Manager 广告资源网代码: NETWORK_CODE

VOD 配置 ID

VOD 视频流的 VOD 配置 ID:VOD_CONFIG_ID

如需详细了解如何创建 VOD 配置 ID,请参阅 Cloud 拼接创建 VOD 配置指南

设置基本示例

下载并运行 IMA Roku DAI 基本示例。点击播放按钮 按钮开始播放《Tears of Steel》 每 30 秒包含一次广告插播时间点。

请求 VOD 视频流

使用 sdk.createVideoStitcherVodStreamRequestWithVodConfig() 函数将示例视频流替换为广告拼接的 VOD 视频流。您可以 请使用 Google Ad Manager 界面找到生成的 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 视频流。

(可选)添加直播会话选项

通过添加会话选项来覆盖默认设置,自定义你的直播请求 Cloud Video Stitcher API 配置 videoStitcherSessionOptions 参数(位于 StreamRequest 对象。

如果您提供的选项无法识别,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": {
    "includeRenditions":[
      {"bitrateBps": 3000, "codecs": "hvc1.1.4.L126.B0, mp4a.40.2"},
      {"bitrateBps": 2000, "codecs": "avc1.64001f, mp4a.40.2"},
    ]
  }
}
request.videoStitcherSessionOptions = sessionOptions

requestResult = sdk.requestStream(request)

清理

现在您已成功托管了 VOD 视频流 以及使用 IMA DAI SDK 进行请求 对于 Roku,请务必清理 资源。

请按照视频点播清理指南移除所有不需要的资源和资产。