播放使用 Google Cloud Video Stitcher API 註冊的直播
本指南將說明如何使用 Roku 的 IMA DAI SDK,針對已透過 Google Cloud Video Stitcher API 註冊的活動,要求並播放直播,以及如何在播放期間插入廣告插播。
本指南將 IMA DAI 的入門指南中的基本範例做進一步說明。
如要瞭解如何整合其他平台,或使用 IMA 用戶端 SDK,請參閱「互動式媒體廣告 SDK」。
如要查看或瞭解完整的整合範例,請下載 Cloud 影片併接工具範例。
設定 Google Cloud 專案
輸入下列變數,以便在 IMA SDK 中使用:
- 位置
- 建立即時設定的 Google Cloud 區域:
LOCATION
- 專案編號
- 使用 Video Stitcher API 的 Google Cloud 專案編號:
PROJECT_NUMBER
- OAuth 權杖
服務帳戶的短期 OAuth 權杖,具有 Video Stitcher 使用者角色:
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 UI 找出產生的 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
' 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 會為每個廣告插播插入從廣告代碼擷取的廣告。廣告插播時間點會在資訊清單中以廣告標記表示。廣告標記是由直播編碼器插入。
如果使用的是自有直播,則需要插入廣告標記。如要進一步瞭解支援的 HLS 和 DASH 廣告標記,請參閱廣告標記說明文件。
如果您是使用 Google Cloud Livestream API 建立直播,請插入廣告插播頻道事件。
廣告插播後立即播放廣告。
清除所用資源
您已成功使用 Google Cloud Video Stitcher API 代管即時串流,並使用 Roku 的 IMA DAI SDK 進行要求,因此請務必清除所有服務資源。
請按照直播清理指南移除所有不必要的資源和素材資源。