本頁面說明如何使用 Live Stream API,從直播串流建立數位錄影機 (DVR) 工作階段。你可以在直播期間和結束後觀看 DVR 內容。
DVR 工作階段和頻道短片的差異
DVR 工作階段與頻道片段 (又稱為 VOD 片段) 類似,但有以下幾項主要差異:
- DVR 工作階段:
- API 會將 DVR 資訊清單儲存在與直播串流片段相同的位置,因此不會再將資料複製到 Cloud Storage。DVR 資訊清單與直播資訊清單類似,但長度較長。當保留時間結束時,系統會刪除資訊清單和片段檔案。
- 你可以為過去、現在和未來的內容建立 DVR 工作階段。舉例來說,DVR 工作階段可以追蹤直播,或是安排 DVR 工作階段在未來的某個時間開始和停止。
- DVR 工作階段的一般用途是支援直播活動的 DVR 功能。舉例來說,觀眾可以在直播開始後一小時加入,並以一小時的延遲時間 (或略過部分內容) 觀看內容。
- 頻道短片:
- Live Stream API 會將短片資訊清單和相關的片段檔案複製到使用者指定的目錄,以便在保留期間結束時不刪除。你可以完全掌控短片。
- 只能剪輯過往的內容。不支援直播短片和排定日後的短片。
- 剪輯片段的常見用途是封存直播內容,讓直播內容可無限期做為 VOD 檔案使用。
如要進一步瞭解頻道短片,請參閱「從直播內容建立 VOD 短片」。
設定 Google Cloud 專案和驗證
如果您尚未建立 Google Cloud 專案和憑證,請參閱「開始前」一節。建立輸入端點
如要建立輸入端點,請使用 projects.locations.inputs.create
方法。
使用任何要求資料之前,請先替換以下項目:
PROJECT_NUMBER
:您的 Google Cloud 專案編號,位於 IAM 設定頁面上的「專案編號」欄位LOCATION
:建立輸入端點的位置;請使用支援的地區之一顯示地區us-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
INPUT_ID
:使用者定義的識別碼,用於建立新的輸入端點 (您會將輸入串流傳送至此)。這個值的長度必須介於 1 至 63 個半形字元之間,開頭和結尾須為[a-z0-9]
,字元之間可以包含破折號 (-)。例如:my-input
。
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": CREATE_TIME, "target": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
這個指令會建立長期執行作業 (LRO),您可以使用該作業追蹤要求的進度。詳情請參閱「管理長時間執行的作業 」。
取得輸入端點詳細資料
如要取得輸入端點的詳細資料,請使用 projects.locations.inputs.get
方法。
使用任何要求資料之前,請先替換以下項目:
PROJECT_NUMBER
:您的 Google Cloud 專案編號,位於 IAM 設定頁面上的「專案編號」欄位LOCATION
:輸入端點的位置;請使用其中一個支援的地區顯示地區us-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
INPUT_ID
:輸入端點的使用者定義 ID
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID", "createTime": CREATE_TIME, "updateTime": UPDATE_TIME, "type": "RTMP_PUSH", "uri": "INPUT_STREAM_URI", # For example, "rtmp://1.2.3.4/live/b8ebdd94-c8d9-4d88-a16e-b963c43a953b", "tier": "HD" }
找出 uri
欄位,並複製傳回的 INPUT_STREAM_URI,以便稍後在「傳送輸入測試串流」一節中使用。
建立管道
如要建立管道,請使用 projects.locations.channels.create
方法。以下範例會建立可產生 HLS 直播的管道。直播內容包含單一高畫質 (1280x720) 呈現方式。
如要啟用 DVR 工作階段建立功能,請將 retentionConfig
物件新增至頻道設定。
"retentionConfig": {
"retentionWindowDuration": {
"seconds": 86400
}
},
為直播頻道啟用保留功能後,系統會保留直播串流片段和資訊清單,以便建立 DVR 工作階段。retentionWindowDuration
物件會指定直播輸出內容上傳至 Cloud Storage 後的儲存時間長度。保留期間是從在 Cloud Storage 中建立區隔時起算。
保留期限上限為 30 天。保留時間結束後,系統會自動從 Cloud Storage 刪除片段檔案、直播資訊清單和 DVR 資訊清單。您無法使用已刪除的區隔建立 DVR 工作階段。刪除程序為非同步作業,可能需要 24 小時才能完成。
指定資訊清單的鍵,即可啟用 DVR 工作階段建立功能。您會在實際建立工作階段時參照這個鍵。僅支援 HLS 資訊清單。
"manifests": [
{
...
"key": "manifest_hls"
}
使用任何要求資料之前,請先替換以下項目:
PROJECT_NUMBER
:您的 Google Cloud 專案編號,位於 IAM 設定頁面上的「專案編號」欄位LOCATION
:建立管道的所在位置;請使用支援的區域之一顯示地區us-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
CHANNEL_ID
:要建立的管道使用者定義的 ID,這個值必須介於 1 至 63 個半形字元之間,開頭和結尾須為[a-z0-9]
,字元之間可包含破折號 (-)INPUT_ID
:輸入端點的使用者定義 IDBUCKET_NAME
:您建立的 Cloud Storage 值區名稱,用於保存即時串流資訊清單和區段檔案
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": CREATE_TIME, "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
這個指令會建立長期執行作業 (LRO),您可以使用該作業追蹤要求的進度。詳情請參閱「管理長時間執行的作業 」。
啟動管道
如要啟動管道,請使用 projects.locations.channels.start
方法。
使用任何要求資料之前,請先替換以下項目:
PROJECT_NUMBER
:您的 Google Cloud 專案編號,位於 IAM 設定頁面上的「專案編號」欄位LOCATION
:頻道所在位置;請使用支援的區域之一顯示地區us-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
CHANNEL_ID
:管道的使用者定義 ID
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": CREATE_TIME, "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID", "verb": "start", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
這個指令會建立長期執行作業 (LRO),您可以使用該作業追蹤要求的進度。詳情請參閱「管理長時間執行的作業 」。
傳送輸入測試串流
開啟新的終端機視窗。使用「取得輸入端點詳細資料」一節中的 INPUT_STREAM_URI 執行下列指令:
ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \
-acodec aac -vcodec h264 -f flv INPUT_STREAM_URI
建立 DVR 工作階段
如要建立 DVR 工作階段,請使用 projects.locations.channels.dvrSessions.create
方法。
請使用 dvrManifests
陣列中的 manifestKey
欄位,指定要儲存內容的資訊清單。在本頁的管道設定範例中,這個鍵設為 manifest_hls
。
您可以將直播的多個時間段落合併為單一 DVR 工作階段,方法是將 timeInterval
物件新增至 dvrWindows
陣列。
"dvrManifests": [
{
"manifestKey": "manifest_hls"
}
],
"dvrWindows": [
{
"timeInterval": {
"startTime": "2022-07-08T23:03:20.000Z",
"endTime": "2022-07-08T23:04:20.000Z"
}
},
{
"timeInterval": {
"startTime": "2022-07-08T23:05:20.000Z",
"endTime": "2022-07-08T23:06:20.000Z"
}
}
]
注意事項:
- 每個 DVR 工作階段在
dvrWindows
中至少必須包含一個timeInterval
。 dvrManifests.manifestKey
欄位必須參照 DVR 工作階段父項頻道中定義的 HLS 資訊清單。如果 DVR 工作階段建立要求成功,則系統會在dvrManifests.outputUri
欄位中傳回產生的 DVR 資訊清單 URI。這個 URI 位於頻道outputUri
欄位指定的路徑中。dvrManifests
陣列僅支援每個要求一個資訊清單。如果您想為同一個 DVR 視窗產生多個資訊清單,就必須將資訊清單分割成多個 DVR 工作階段。timeInterval
物件集合不得重疊,且必須依時間順序排列。startTime
必須早於每個timeInterval
中的endTime
。startTime
和endTime
是指直播時間軸。如果資訊清單啟用了嵌入式時間碼,這個時間軸就會根據輸入串流中提供的嵌入式時間碼,可能與時鐘時間不同。- DVR 倒帶時間範圍的總時間上限為 24 小時。
dvrWindows
中最後一個timeInterval
的endTime
可以留空。在這種情況下,系統會自動計算endTime
,以便將 DVR 工作階段的總時間 (即 24 小時) 盡可能拉長。- DVR 段落可涵蓋任何時間範圍,包括未來的時間範圍。不過,
dvrWindows
延後至未來時間的 DVR 工作階段數量上限為 1。 - 如果所有 DVR 時段都嚴格限定在過去,則 DVR 工作階段數量沒有限制。
使用任何要求資料之前,請先替換以下項目:
PROJECT_NUMBER
:您的 Google Cloud 專案編號,位於 IAM 設定頁面上的「專案編號」欄位LOCATION
:頻道所在位置;請使用支援的區域之一顯示地區us-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
CHANNEL_ID
:管道的使用者定義 IDDVR_SESSION_ID
:DVR 工作階段的使用者定義 IDINTERVAL_START_TIME
:原始直播資訊清單中的 Unix Epoch 紀元時間;使用 RFC3339 世界標準時間「Zulu」格式的時間戳記 (例如2014-10-02T15:01:23Z
)INTERVAL_END_TIME
:原始直播資訊清單中的 Mark-out Unix Epoch 時間;使用 RFC3339 世界標準時間「Zulu」格式的時間戳記 (例如2014-10-02T15:01:23Z
)
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": CREATE_TIME, "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID/dvrSessions/DVR_SESSION_ID", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
這個指令會建立長期執行作業 (LRO),您可以使用該作業追蹤要求的進度。詳情請參閱「管理長時間執行的作業 」。
取得 DVR 工作階段
如要取得 DVR 工作階段,請使用 projects.locations.channels.dvrSessions.get
方法。
使用任何要求資料之前,請先替換以下項目:
PROJECT_NUMBER
:您的 Google Cloud 專案編號,位於 IAM 設定頁面上的「專案編號」欄位LOCATION
:頻道所在位置;請使用支援的區域之一顯示地區us-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
CHANNEL_ID
:管道的使用者定義 IDDVR_SESSION_ID
:DVR 工作階段的使用者定義 ID
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID/dvrSessions/DVR_SESSION_ID", "createTime": CREATE_TIME, "startTime": START_TIME, "updateTime": UPDATE_TIME, "state": "SUCCEEDED", "dvrManifests": [ { "manifestKey": "manifest_hls", "outputUri": "gs://BUCKET_NAME/dvr/DVR_SESSION_ID/main.m3u8" } ], "dvrWindows": [ { "timeInterval": { "startTime": "INTERVAL_START_TIME", "endTime": "INTERVAL_END_TIME" } } ] }
回應應包含 state
欄位,指出工作階段的狀態:
{
...
"state": "PENDING" // DVR session is waiting to be processed (for example, it is waiting for the channel to start)
...
}
如需狀態清單和說明,請參閱 state
參考說明文件。
驗證值區內容
開啟 DVR 工作階段的 dvrManifests.outputUri
欄位中指定的 Cloud Storage 值區。確認該資料夾包含下列檔案和目錄:
- DVR 工作階段的頂層資訊清單,名稱與頻道設定中指定的
manifests.fileName
相同 (例如main.m3u8
)。您可以使用線上媒體播放器播放這個資訊清單。 - 頻道中指定的每個
muxStreams.key
的子目錄 (例如mux_video_ts
)。每個子目錄都包含 DVR 工作階段的播放清單 (例如index-1.m3u8
)。
播放 DVR 工作階段
如要在 Shaka Player 中播放產生的媒體檔案,請完成下列步驟:
- 將您建立的 Cloud Storage bucket 設為可公開讀取。
- 如要在 Cloud Storage 值區中啟用跨來源資源共享 (CORS),請按照下列步驟操作:
- 建立包含下列內容的 JSON 檔案:
[ { "origin": ["https://shaka-player-demo.appspot.com/"], "responseHeader": ["Content-Type", "Range"], "method": ["GET", "HEAD"], "maxAgeSeconds": 3600 } ]
-
將
JSON_FILE_NAME
替換為您在前一個步驟建立的 JSON 檔案名稱後,執行下列指令:gcloud storage buckets update gs://BUCKET_NAME --cors-file=JSON_FILE_NAME.json
- 建立包含下列內容的 JSON 檔案:
- 在 Cloud Storage 值區中,找出系統產生的檔案。在該檔案的「Public access」(公開存取權) 資料欄中,按一下「Copy URL」(複製網址)。
- 前往 Shaka Player (這是一個線上即時串流播放器)。
- 按一下頂端導覽列中的「Custom Content」(自訂內容)。
- 按一下「+」按鈕。
將檔案的公開網址貼到「Manifest URL」(資訊清單網址) 方塊中。
在「Name」(名稱) 方塊中輸入名稱。
按一下「Save」(儲存)。
按一下「Play」(播放)。
這時候應該就會看到即時串流內容以測試模式播放。
廣告插播事件
如果您為直播建立廣告插播事件,DVR 工作階段就會包含直播中顯示的廣告區隔。