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