播放使用 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 令牌:
OAUTH_TOKEN
详细了解如何创建短期有效的 OAuth 令牌。 只要 OAuth 令牌未过期,就可以在多个请求中重复使用。
- 广告资源网代码
用于请求广告的 Ad Manager 广告资源网代码:
NETWORK_CODE
- VOD 配置 ID
VOD 视频流的 VOD 配置 ID:
VOD_CONFIG_ID
如需详细了解如何创建 VOD 配置 ID,请参阅 Cloud 拼接创建 VOD 配置指南。
设置基本示例
下载并运行 IMA Roku DAI 基本示例。点击视频播放器上的播放按钮,即可开始观看短片“钢铁之泪”,该短片每 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 串流。
(可选)添加在线播放会话选项
通过在 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 请求了该流式传输,因此请务必清理所有广告投放资源。
请按照视频点播清理指南移除所有不需要的资源和资产。