播放通过 Google Cloud Video Stitcher API 注册的直播
本指南演示了如何使用适用于 Roku 的 IMA DAI SDK 为通过 Google Cloud Video Stitcher API 注册的事件请求并播放直播,以及如何在播放期间插入广告插播时间点。
本指南对 IMA DAI 入门指南中的基本示例进行了扩展。
如需了解如何与其他平台集成或使用 IMA 客户端 SDK,请参阅互动式媒体广告 SDK。
设置 Google Cloud 项目
输入以下变量,以便在 IMA SDK 中使用:
- 位置
- 创建实时配置的 Google Cloud 区域:
LOCATION
- 项目编号
- 使用 Video Stitcher API 的 Google Cloud 项目编号:
PROJECT_NUMBER
- OAuth 令牌
具有 Video Stitcher 用户角色的服务帐号的短期有效 OAuth 令牌:
OAUTH_TOKEN
详细了解如何为服务帐号创建短期有效凭据。只要 OAuth 令牌未过期,就可以在多个请求中重复使用。
- 广告资源网代码
用于请求广告的 Ad Manager 广告资源网代码:
NETWORK_CODE
- 实时配置 ID
- 您在创建直播活动时指定的直播配置 ID:
LIVE_CONFIG_ID
- 自定义素材资源键
- 在使用 Video Stitcher API 为直播活动创建配置的过程中生成的 Ad Manager 自定义素材资源键:
CUSTOM_ASSET_KEY
下载基本示例
下载并运行 IMA Roku DAI 基本示例。点击视频播放器上的播放按钮,开始播放《Tears of Steel》短片,该短片每 30 秒就会有一次广告插播时间点。
请求直播
如需将示例流替换为您的 Cloud Video Stitcher 直播,请使用 sdk.createVideoStitcherLiveStreamRequest()
函数。DAI 会话生效后,您可以使用 Google Ad Manager 界面找到生成的 DAI 会话,以进行监控和调试。
在现有示例中,包含用于确定是构建 VOD StreamRequest
还是直播 StreamRequest
的条件语句。如需使其与 Google Cloud Video Stitcher API 配合使用,请添加新路径以使用之前生成的值构造 Cloud Video Stitcher 实时 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.testVideoStitcherLiveStream = {
title: "Video Stitcher Livestream",
customAssetKey: "CUSTOM_ASSET_KEY",
networkCode: "NETWORK_CODE",
liveConfigId: "LIVE_CONFIG_ID",
region: "LOCATION",
projectNumber: "PROJECT_NUMBER",
oAuthToken: "OAUTH_TOKEN",
apiKey: "",
type: "stitcherLive"
}
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.testVideoStitcherLiveStream
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 = "stitcherLive"
request = sdk.CreateVideoStitcherLiveStreamRequest(
streamData.customAssetKey,
streamData.networkCode,
streamData.liveConfigId,
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
添加这些更改后,请重新加载应用以请求和播放您的自定义直播。
(可选)添加直播会话选项
通过在 StreamRequest 对象中填充 videoStitcherSessionOptions
参数,添加会话选项来替换默认的 Cloud Video Stitcher API 配置,以自定义视频流请求。
如果您提供的选项无法识别,则 Cloud Video Stitcher API 将返回 HTTP 400 错误作为响应。如需帮助,请参阅问题排查指南。
例如,您可以使用以下代码段替换清单选项,该代码段请求两个数据流清单,它们的呈现结果按比特率从低到高排序。
request = sdk.CreateVideoStitcherLiveStreamRequest(customAssetKey, networkCode, liveConfigId, region, projectNumber, oAuthToken)
request.player = m.player
request.adUiNode = m.top.video
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)
插入广告插播时间点
Google Cloud Video Stitcher API 会针对每个广告插播时间点插入从广告代码中检索到的广告。在清单中使用广告标记来指明广告插播时间点。广告标记由直播编码器插入。
如果您使用的是自己的直播视频流,则需要插入广告标记。如需详细了解支持的 HLS 和 DASH 广告标记,请参阅广告标记文档。
如果您使用 Google Cloud Livestream API 创建了直播,请插入广告插播时间点频道活动。
插入广告插播时间点之后,广告会立即播放。
清理
现在,您已成功使用 Google Cloud Video Stitcher API 托管了直播,并使用适用于 Roku 的 IMA DAI SDK 发出了请求,请务必清除所有投放资源。
请按照直播清理指南移除所有不需要的资源和资产。