事前準備
本文件僅涵蓋未安裝 IMA DAI SDK 的播放操作說明。
請先確認您已完成「將 Google Ad Manager (GAM) 與 VOD 素材資源整合」中的步驟。
如果 IMA SDK 不適用於您指定的平台,您必須讓應用程式自行呼叫必要的 API,並觸發廣告媒體驗證。
如要執行這項操作,您需要提供下列資訊:
位置 |
建立即時設定的
Google Cloud 區域
:
LOCATION
|
專案編號 |
使用 Video Stitcher API 的 Google Cloud 專案專案編號:
PROJECT_NUMBER
|
OAuth 權杖 |
服務帳戶的短期 OAuth 權杖,具有 Video Stitcher 使用者角色:
OAUTH_TOKEN 進一步瞭解如何 建立短期 OAuth 權杖。 |
聯播網代碼 |
用於要求廣告的 Ad Manager 聯播網代碼:
NETWORK_CODE
|
VOD 設定 ID |
建立 VOD 串流事件時指定的 VOD 設定 ID:
VOD_CONFIG_ID
|
向 Ad Manager 提出串流註冊要求
向串流註冊端點發出 POST 要求。系統會傳回 JSON 回應,其中包含要傳送至資訊清單操控伺服器和相關 Pod 服務 API 端點的串流 ID。
API 端點
POST: /ondemand/pods/api/v1/network/NETWORK_CODE/stream_registration
Host: dai.google.com
Content-Type: application/json
路徑參數
NETWORK_CODE |
您的 Google Ad Manager 360 聯播網代碼 |
以 JSON 編碼的內容參數
targeting_parameters
- 一組選用的 JSON 編碼指定目標參數。
回應 JSON
media_verification_url |
用於連線偵測 (ping) 播放追蹤事件的基準網址。只要將廣告事件 ID附加到這個基本網址,即可建立完整的媒體驗證網址。MEDIA_VERIFICATION_URL
|
metadata_url |
要求廣告連播中繼資料的網址。
METADATA_URL
|
stream_id |
用來識別目前串流工作階段的字串。STREAM_ID
|
valid_for |
目前串流工作階段到期前剩餘的時間長度,以 dhms (天、小時、分鐘、秒) 格式表示。例如 2h0m0.000s 代表 2 小時的時間長度。 |
valid_until |
目前串流工作階段的到期時間,以 yyyy-MM-dd'T'hh:mm:ss.sssssssss[+|-]hh:mm 格式的 ISO 8601 日期時間字串表示。 |
要求範例 (cURL)
curl -X POST \
-H "Content-Type: application/json" \
-d '@request.json' \
https://dai.google.com/ondemand/pods/api/v1/network/21775744923/stream_registration
request.json
{
"targeting_parameters": {
"cust_params": "sport%3Dfootball%26city%3Dnewyork"
}
}
回應範例
{
"media_verification_url": "https://dai.google.com/.../media/",
"metadata_url": "https://dai.google.com/.../metadata",
"stream_id": "6e69425c-0ac5-43ef-b070-c5143ba68541:CHS",
"valid_for": "8h0m0s",
"valid_until": "2023-03-24T08:30:26.839717986-07:00"
}
發生錯誤時,系統會傳回標準 HTTP 錯誤代碼,但不會傳回 JSON 回應主體。
剖析 JSON 回應並儲存相關值。
產生 Cloud Video Stitcher VOD 工作階段
向 VOD 工作階段註冊端點發出 POST 要求。系統會傳回 JSON 回應,其中包含串流資訊清單 URI,以及廣告插播、廣告和廣告事件的中繼資料。
API 端點
POST: /v1/projects/PROJECT_NUMBER/locations/LOCATION/vodSessions/
Host: videostitcher.googleapis.com
Authorization: Bearer OAUTH_TOKEN
Content-Type: application/json
路徑參數
PROJECT_NUMBER |
您的 Google Cloud 專案編號。 |
LOCATION |
您的 Google Cloud 區域。 |
NETWORK CODE |
Google Ad Manager 360 聯播網代碼。 |
以 JSON 編碼的內容參數
vodConfig |
字串,包含專案編號、位置和 VOD 設定 ID,格式如下:
projects/PROJECT_NUMBER/locations/LOCATION/vodConfigs/VOD_CONFIG_ID
|
adTracking |
將其設為 "CLIENT" 可啟用用戶端追蹤功能。 |
gamSettings |
包含網路代碼和串流 ID 的物件,格式如下:
{ "networkCode":"NETWORK_CODE", "streamId":"STREAM_ID" } |
回應 JSON
name |
VOD 工作階段的名稱,包含工作階段 ID。 |
playUri |
拼接串流資訊清單的 URI,可載入至影片播放器進行播放。SESSION_PLAYBACK_URI
|
adTracking |
在要求主體中傳送至 API 的相同 adTracking 值。 |
vodConfig |
在要求主體中傳送至 API 的相同 vodConfig 字串。 |
gamSettings |
在要求主體中傳送至 API 的相同 gamSettings 物件。 |
要求範例 (cURL)
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer OAUTH_TOKEN" \
-d '@request.json' \
https://videostitcher.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION/vodSessions/
request.json
{
"vod_config": "projects/PROJECT_NUMBER/locations/LOCATION/vodConfigs/VOD_CONFIG_ID",
"ad_tracking": "CLIENT",
"gam_settings": {
"network_code": "NETWORK_CODE",
"stream_id": "STREAM_ID"
}
}
回應範例
{
"name": "projects/.../vodSessions/4a703a1f-5f48-4147-9738-c7d4c7b70e7f",
"playUri": "https://videostitcher.googleapis.com/.../manifest.m3u8",
"sourceUri": "https://storage.googleapis.com/.../hls.m3u8",
"adTagUri": "https://pubads.g.doubleclick.net/gampad/ads?...",
"vodConfig": "projects/...",
"assetId": "63b94af2767e17e5c975f8d7d2b15c0d0b0320a17c3d7ac8a3f6d4e0c165b9e5",
"adTracking": "CLIENT",
"gam_settings": {
"network_code": "21775744923",
"stream_id": "6e69425c-0ac5-43ef-b070-c5143ba68541:CHS"
}
}
收到回應後,您可以參照回應物件的 playUri
欄位中的 URI,播放已加入廣告的直播串流。
向 Ad Manager 要求廣告連播中繼資料
請向您在向 Ad Manager 註冊串流時收到的 metadata_url
發出 GET 要求。您必須先從播放 URI 收到已拼接的資訊清單,才能執行這個步驟。
您會收到描述串流廣告休息時間、廣告和廣告事件的 JSON 物件。
API 端點
GET: METADATA_URL
Host: dai.google.com
回應 JSON
tags |
一組鍵/值組合,用於說明串流中會發生的廣告媒體事件。每個鍵都包含廣告媒體 ID 的前 17 個字元,這些字元會顯示在串流的 ID3 中繼資料中;如果是 `progress` 事件,則會包含整個廣告媒體 ID。每個值都是一個物件,具有下列屬性:
|
ads |
一組用於說明串流中廣告的鍵/值組合。每個鍵都是廣告 ID。每個值都是一個物件,具有下列屬性:
|
ad_breaks |
一組鍵/值組合,用於說明串流中會出現的廣告插播。每個鍵都是廣告插播 ID。每個值都是一個物件,具有下列屬性:
|
要求範例 (cURL)
curl METADATA_URL
JSON 回應範例
{
"tags":{
"google_5555555555":{
"ad":"0000229834_ad1",
"ad_break_id":"0000229834",
"type":"firstquartile"
},
"google_1234567890123456789":{
"ad":"0000229834_ad1",
"ad_break_id":"0000229834",
"type":"progress"
},
...
},
"ads":{
"0000229834_ad1":{
"ad_break_id":"0000229834",
"position":1,
"duration":15,
"clickthrough_url":"https://.../",
...
},
...
},
"ad_breaks":{
"0000229834":{
"type":"mid",
"duration":15,
"ads":1
},
...
}
}
儲存這些值,以便與影片串流中的時間中繼資料事件建立關聯。
監聽 ID3 事件並追蹤播放事件
如要驗證影片串流中是否發生特定事件,請按照下列步驟處理 ID3 事件:
- 將媒體事件儲存在佇列中,如果媒體播放器顯示,則儲存每個媒體 ID 及其時間戳記。
- 在播放器每次更新時,或在設定的頻率 (建議為 500 毫秒) 時,請比較事件時間戳記與播放頭,檢查媒體事件佇列中最近播放的事件。
- 針對已確認播放的媒體事件,請在儲存的廣告插播代碼中查詢媒體 ID,確認事件類型。請注意,廣告插播標記物件只包含媒體 ID 的截斷版本,且僅限於 google_ 前置字串後面的前 10 個數字,因此 ID3 媒體驗證 ID 與標記物件中的鍵並未直接比對。這麼做是為了避免在 ID3 事件到達前,傳送事件驗證 ping。如要產生廣告事件的完整媒體驗證網址,請將完整廣告事件 ID 附加至串流建立回應中的 media_verification_url 值。
- 使用「進度」事件,追蹤使用者是否處於廣告插播期間。請勿將這些事件傳送至媒體驗證端點,以免產生 HTTP 錯誤代碼。如果是其他事件類型,請將媒體 ID 附加至媒體驗證網址,並發出 GET 要求來追蹤播放。
- 從待播清單中移除媒體事件。
API 端點
GET: MEDIA_VERIFICATION_URLAD_MEDIA_ID
Host: dai.google.com
路徑參數
MEDIA_VERIFICATION_URL |
串流註冊端點在 media_verification_url 欄位中傳回的值:
MEDIA_VERIFICATION_URL
|
AD_MEDIA_ID |
完整的廣告媒體 ID,如串流的 ID3 中繼資料所示:
AD_MEDIA_ID
|
預期的回傳值
HTTP/1.1 204 No Content |
成功的空白回應。 |
HTTP/1.1 404 Not Found |
系統無法辨識媒體驗證 ID。 |
HTTP/1.1 409 Conflict |
媒體驗證 ID 已傳送。 |
要求範例 (cURL)
curl MEDIA_VERIFICATION_URLAD_MEDIA_ID
回應範例
HTTP/1.1 204 No Content
限制
如果在 WebView 中使用 API,則以下限制適用於指定目標:
- UserAgent:使用者代理程式參數會以瀏覽器專屬值的形式傳遞,而非底層平台。
- rdid、idtype、is_lat:未正確傳遞裝置 ID,因此會限制下列功能的功能:
- 展示頻率上限
- 依序輪播廣告
- 目標對象區隔和指定目標