透過 HTTP 即時串流提交 YouTube 直播內容

本文說明如何使用 HTTP 即時串流 (HLS) 通訊協定, 透過編碼器在 YouTube 上直播即時資料本文件適用對象 編碼器供應商,且想要為自家產品新增 HTTP 即時串流內容擷取支援功能。HLS 內容攝入功能適合需要 延遲時間也比較長簡短 YouTube 直播的不同擷取通訊協定 支援直播功能,請參閱 YouTube 直播內容擷取通訊協定比較

如要使用 HTTP 即時串流串流播放即時資料,編碼器應傳送一系列 使用 HTTP PUTPOST 要求。從編碼器的角度來看 似乎是被動式 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&copy=0&file=

... 其中 $STREAM_KEY 是網頁介面中顯示的串流金鑰。 例如:https://a.upload.youtube.com/http_upload_hls?cid=abcd-efgh-ijkl-mnop-qrst&copy=0&file=

如要提高可靠性,您可以傳送備援擷取內容的第二個副本 變更為以下備用網址:

https://b.upload.youtube.com/http_upload_hls?cid=$STREAM_KEY&copy=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-KEYEXT-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