本文說明如何使用 HTTP 即時串流 (HLS) 通訊協定, 透過編碼器在 YouTube 上直播即時資料本文件適用對象 編碼器供應商,且想要為自家產品新增 HTTP 即時串流內容擷取支援功能。HLS 內容攝入功能適合需要 延遲時間也比較長簡短 YouTube 直播的不同擷取通訊協定 支援直播功能,請參閱 YouTube 直播內容擷取通訊協定比較。
如要使用 HTTP 即時串流串流播放即時資料,編碼器應傳送一系列
使用 HTTP PUT
或
POST
要求。從編碼器的角度來看
似乎是被動式 HTTP 伺服器
每個「媒體區段」都代表一定比例的實際多媒體內容 提供長度介於 1 到 4 秒之間的直播每個媒體播放清單 說明如何以正確的串流順序重新組合媒體區段。
媒體格式要求
YouTube HTTP 即時串流內容擷取功能對影片和音訊有以下規定 內容:
- 影片和音訊必須以 M2TS 格式進行混合。
- 支援的影片轉碼器 H.264 和 HEVC。
- 系統最高支援每秒 60 個影格的影格速率。
- 僅支援封閉式 GOP。
- 支援的音訊轉碼器為 AAC,僅支援單一音軌音訊。
如想查看媒體區隔的詳細規定,請參閱這篇文章。
高動態範圍
系統支援使用 HEVC 轉碼器的高動態範圍 (HDR) 影片,而且具備 下列額外規定:
- 支援的色彩標準為 10 位元 PQ 和 HLG,且亮度不定。
更具體的問題為:
- 色彩格式必須為 YUV 4:2:0 10 位元。
- 傳輸函式必須為 PQ (也稱為 SMPTE ST 2084) 或 HLG (也稱為 ARIB STD-B67)。
- 原色必須為 Rec。2020 年。
- 矩陣係數必須為 Rec。2020 年非恆亮的亮度。
- 限制範圍 (或 MPEG-範圍) 和完整範圍 (或 JPEG 範圍) 樣本 值。請務必根據 內容使用的樣本值範圍。有限範圍的樣本值 建議
取得 HTTP 即時串流內容擷取網址
從 YouTube API 取得 HTTP 即時串流內容擷取網址
如要取得完整的擷取網址,編碼器可以使用 YouTube 直播串流功能 用於插入直播的 API 資源,當中包含下列資源 資源:
"cdn": {
"ingestionType": "hls",
"frameRate": "variable",
"resolution": "variable"
}
在 API 回應中,cdn.ingestionInfo.ingestionAddress
欄位會指定
主要擷取網址,以及 cdn.ingestionInfo.backupIngestionAddress
欄位
會指定備份擷取網址。詳情請參閱
liveStreams
資源。
從 YouTube 創作者工作室取得 HTTP 即時串流內容擷取網址
在 YouTube 創作者工作室網頁介面中,創作者點選 [建立] 「串流」時,YouTube 會顯示「串流金鑰」由英數字元組成 字元和連字號這組密鑰可同時識別建立者和 或串流播放至 YouTube
您可以透過這個串流金鑰建構 HTTP 即時串流網址,如下所示:
https://a.upload.youtube.com/http_upload_hls?cid=$STREAM_KEY©=0&file=
... 其中 $STREAM_KEY
是網頁介面中顯示的串流金鑰。
例如:https://a.upload.youtube.com/http_upload_hls?cid=abcd-efgh-ijkl-mnop-qrst©=0&file=
如要提高可靠性,您可以傳送備援擷取內容的第二個副本 變更為以下備用網址:
https://b.upload.youtube.com/http_upload_hls?cid=$STREAM_KEY©=1&file=
請注意,備份和主要網址有兩項差異:兩個主機名稱
而 copy=
參數已變更。備份擷取必須傳送
與主要擷取作業不同的 copy=
參數值,以避免
導致串流中斷
完成 HTTP 即時串流內容攝入網址
使用這兩種方法取得的網址不完整;每個結束
但 file=
查詢參數空白。如要形成最終到達網址,編碼器必須
將媒體播放清單或媒體區段的檔案名稱附加到網址的結尾
因此完成 file=
參數。
下列規則適用於 file=
參數的值:
- 編碼器可以從中建構媒體播放清單或媒體片段檔案名稱 英數字元、底線、正斜線、連字號和半形句號; 系統不支援其他字元。
- 編碼器不得對檔案名稱進行網址編碼。
- 編碼器可以在檔案名稱中加入相對或絕對路徑元件 但您不一定要使用這項功能如果編碼器包含路徑元件 都必須參照媒體區隔檔案名稱中的相同路徑 對應的播放清單項目。
HTTP 即時串流通訊協定規定
由編碼器傳送的媒體播放清單和媒體片段必須符合 HTTP 即時串流第 2 版 規格。
HLS 規格定義兩種播放清單類型:媒體播放清單和主要播放清單 播放清單。YouTube 會將串流內容轉碼成不同的解析度 因此編碼器並不需要傳送不同位元率的內容 YouTube。因此,YouTube 只支援使用 HTTP 即時串流擷取的媒體播放清單。 和「主要播放清單」忽略(主要播放清單會提供一組變化版本) 每個串流都描述不同版本的內容)。
編碼器必須:
- 然後只傳送一個編碼串流,並附加所需解析度最高的串流內容 向使用者放送 (單一解析度和轉碼器)。
- 以及混合音訊和視訊
- 所有要求都會使用 HTTPS 和永久連線。
以下各節將包含媒體播放清單的具體規定 和媒體區隔
媒體播放清單
媒體播放清單包含媒體區段清單,可以串聯起來, 代表連續、可調解的多媒體串流。透過媒體播放清單 是媒體區隔的預期伺服器,以及如何在 重組串流。
需求條件
媒體播放清單檔案名稱結尾必須是
.m3u8
或.m3u
。針對串流傳送的第一個媒體播放清單,必須從序號開始
0
和序號必須單調遞增。EXT-X-MEDIA-SEQUENCE
標記必須用來識別 播放清單中列出的第一個媒體區隔媒體播放清單不得包含超過 5 個待處理片段。A 罩杯 如果伺服器尚未收到或已確認 收到的收據。
除了凸顯的區隔外,也加入一些備受肯定的區隔 為每 10 個媒體播放清單套用一次訂閱這樣可以降低 。適用對象 您最多可加入 2 個已確認的區隔,以及最多五個 優秀的媒體播放清單中
請注意,伺服器如果收到媒體區段,請傳回 該區隔的上傳作業出現
200
(OK
) 或202
(Accepted
) 回應。A 罩杯202
回應表示伺服器在 播放清單來識別該片段為所有媒體區隔傳送更新的媒體播放清單,讓 萬一媒體播放清單遺失,伺服器可以快速復原。
當伺服器確認收到媒體區段時,
EXT-X-MEDIA-SEQUENCE
標記值,防止媒體播放清單變為 名稱過長。舉例來說,如果伺服器已確認收到 下一個媒體播放清單可能會列出第 9 個媒體區隔 第十個和第十個媒體區隔不支援
EXT-X-KEY
和EXT-X-SESSION-KEY
標記。
範例
下方清單為編碼器預期會預期的檔案 傳送:
Media Playlist file with seqnum #0
Media Segment file #0
Media Playlist file with seqnum #0-#1
Media Segment file #1
Media Playlist file with seqnum #0-#2
Media Segment file #2
Media Playlist file with seqnum #1-#3
Media Segment file #3
...
以下範例顯示在直播影片播放期間傳送的媒體播放清單
串流。由於這個範例來自串流中間
EXT-X-MEDIA-SEQUENCE
標記的值不是零。
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:2680
#EXTINF:3.975,
fileSequence2680.ts
#EXTINF:3.941,
fileSequence2681.ts
#EXTINF:3.975,
fileSequence2682.ts
媒體區隔
以下列出媒體區隔的規定:
- 檔案名稱
- 網址中的媒體區段檔案名稱必須包含
.ts
檔案名稱 副檔名,必須與播放清單中的檔案名稱相符。 - 每次重新啟動編碼器時,媒體區隔檔案名稱都不得重複 串流。
- 網址中的媒體區段檔案名稱必須包含
- 格式
- 媒體區隔必須採用 M2TS 格式,且應自行初始化。
- 每個 M2TS 片段都必須包含一個 MPEG-2 程式。
- M2TS 區段必須包含 PAT 和 PMT,以及前兩個 區段中的傳輸串流封包應為 PAT 和 PMT。
- 內容
- 影片和音訊必須混用。
- 支援的影片轉碼器 H.264 和 HEVC。
- 支援搭配 HEVC 的 HDR (請參閱 HDR 規定)。
- 系統最高支援每秒 60 個影格的影格速率。
- 僅支援封閉式 GOP。
- 支援的音訊轉碼器為 AAC,但只有單一音軌音訊 支援。
- 媒體區隔的建議時間長度必須介於 1 到 4 之間 如下節所述。媒體區段不得 時間長度超過 5 秒
- 媒體區段只能使用 HTTPS 的 TLS/SSL 層加密。 不支援其他加密機制。
媒體區段時間長度
我們希望 HTTP 即時串流內容攝入功能可用於需要高水準的付費內容 畫質和高解析度HTTP 即時串流內容擷取作業的延遲時間通常比 RTMP 更長: 和以 WebRTC 為基礎的擷取方式,因為 HTTP 即時串流擷取是以區隔為基礎。
建議您將「媒體區段長度」設為 1 到 4 秒 較小的媒體區隔可能會導致延遲時間短,但成本會比較高 並降低編碼效率如上一節所述 媒體區段長度不得超過 5 秒。
位元速率
YouTube 說明 中央 提供了位元率設定的規範。
請注意,以相同的方式使用 HEVC 可使資料壓縮量增加 25% 至 50% 影片畫質與 H.264 相比因此,位元率的值 建議範圍搭配 HEVC 使用,以節省頻寬,尤其是 對 4K 內容來說相當實用
其他需求
編碼器應使用
User-Agent
語法,包括製造商名稱、型號名稱和 版本:User-Agent: <manufacturer> / <model> / <version>
隱藏式輔助字幕
HTTP 即時串流內容攝入功能支援兩種傳送隱藏式輔助字幕的選項:
- 透過不同的 HTTP POST 要求傳送隱藏式輔助字幕。這適用於所有使用者 HTTP 即時串流內容擷取。
- 內嵌 608/708 隱藏式輔助字幕可用於使用 H264 的 HTTP 即時串流內容攝入 而非使用 HEVC 視訊轉碼器的擷取內容。如要 詳情請參閱即時字幕的相關規定 一文。
HTTP 回應代碼
以下各節說明 YouTube 在 回應。
- 200 (確定)
回應 PUT 或 POST 要求時,HTTP 200 (OK) 回應會指出 表示 YouTube 伺服器收到預期的作業,並加以處理
回應 DELETE 要求時,HTTP 200 (OK) 回應會指出 因此 YouTube 伺服器收到並忽略了這項要求。YouTube 伺服器確實 無需用戶端「刪除」串流中的任何資源,然後系統就會忽略 DELETE 要求。基於成效考量,YouTube 建議客戶 不要傳送 DELETE。
- 202 (Accepted)
HTTP 202 (已接受) 回應表示 YouTube 伺服器收到 尚未收到包含該媒體區隔的媒體播放清單。 此元素會向用戶端指出,其應傳送含有 以便盡快防止延遲 區隔請注意,即使編碼器傳送更新過的 提供各種媒體區隔的媒體播放清單。
- 400 (錯誤的要求)
HTTP 400 (不良要求) 回應表示下列其中一個問題 發生了:
- 網址格式錯誤
- 無法剖析播放清單,或包含不支援的標記
- 401 (未授權)
HTTP 401 (未授權) 回應表示 YouTube HLS 端點的基準網址已毀損或已過期。用戶端 如要繼續,應更新
cid
參數。- 405 (不允許的方法)
HTTP 405 (不允許的方法) 回應表示要求 不是 POST、PUT 或 DELETE 要求
- 500 (內部伺服器錯誤)
HTTP 500 (內部伺服器錯誤) 回應表示伺服器 無法處理這項要求。針對此錯誤,建議您重試 以指數表示的要求 Backoff。