直播只有五個環節:擷取 → 編碼 → 傳輸 → 分發 → 播放。每一個環節都會加上延遲、都會改變畫質、都有一組可調參數,而這些參數彼此耦合——調高 fps 會吃掉 bitrate 的預算、縮短 GOP 會增加碼率、降低延遲會削弱抗抖動能力。把這五段畫成一張圖並標上各自的延遲貢獻,是之後所有決策的基礎。
📖 學
一、五段管線與各自在做什麼
[擷取] 攝影機 / 螢幕 / 音訊介面
│ 產出未壓縮或輕壓縮的原始影音
▼
[編碼] H.264 / H.265 / AV1 編碼器
│ 把 1.5 Gbps 的原始訊號壓成 3 Mbps
▼
[傳輸] RTMP / SRT / WebRTC(第一哩路:現場 → 雲端)
│ 跨公網,要處理丟包、抖動、重傳
▼
[分發] 轉碼 → 打包 → CDN / 媒體邊緣(最後一哩:雲端 → 觀眾)
│ 一變多:多碼率、多協定、多地區
▼
[播放] 播放器:下載 → 緩衝 → 解碼 → 顯示
一個未壓縮的 1080p60 訊號大約是 1920 × 1080 × 3 bytes × 60 ≈ 373 MB/s,約 2.99 Gbps。 壓成 6 Mbps 等於壓縮約 500 倍。整條管線的大部分複雜度,都來自這個壓縮動作帶來的後果:壓縮引入時間相依(這一幀依賴前一幀)、引入延遲(要先看到未來幾幀才能決定怎麼壓)、也引入脆弱性(丟一個封包可能毀掉接下來一整段)。
第一哩路與最後一哩路的需求完全相反,這是最常被混淆的一點。 第一哩路是「一條流、要絕對可靠、頻寬可控」,所以適合 ARQ 重傳型協定(SRT/RIST);最後一哩路是「一變成百萬條、要能快取、要適應各種爛網路」,所以適合 HTTP 分片型協定(HLS/DASH)。拿 HLS 做現場回傳,或拿 SRT 推給一百萬觀眾,都是把工具用在錯的那一段。
二、Bitrate(位元率):唯一真正決定畫質的數字
Bitrate 是每秒用多少位元描述影像,單位 bps。它是畫質的總預算,其他所有參數都是在決定這個預算怎麼花。
一個有用的歸一化指標是 bits per pixel per frame(bpp):
bpp = bitrate ÷ (width × height × fps)
1080p30 配 4 Mbps:4,000,000 ÷ (1920 × 1080 × 30) = 0.0643 bpp
1080p60 配 4 Mbps:4,000,000 ÷ (1920 × 1080 × 60) = 0.0322 bpp
同樣 4 Mbps,把 fps 從 30 提到 60,每個像素可用的位元直接腰斬。 這就是為什麼「開 60fps 之後畫面變糊」——你沒有增加預算卻增加了要描述的東西。實務經驗值是 H.264 在 0.08–0.12 bpp 左右開始「看起來沒有明顯壓縮痕跡」,但這高度依賴內容複雜度,靜態講座遠低於此也沒問題,高速運動則遠高於此仍會崩。
三、Resolution(解析度)與 fps:兩種不同的「資訊量」
解析度決定空間細節,fps 決定時間細節。兩者都乘進同一個 bpp 分母,所以它們在搶同一筆預算。
決策方向很清楚:內容的運動量決定你該往哪邊花錢。
- 棋牌、講座、新聞播報:運動少,空間細節重要 → 高解析度、低 fps(1080p30 甚至 25)
- 體育、遊戲、賽車:運動多,時間連續性重要 → 可以降解析度換 fps(720p60 常優於 1080p30)
一個常見且昂貴的錯誤是「全部都開到最高」。4K60 的原始資訊量是 1080p30 的 8 倍,若 bitrate 沒有跟著乘上去,結果比 1080p30 更糟。
四、Keyframe/GOP:延遲、可切換性與碼率的三方取捨
編碼器產出三種幀:
| 幀型 | 全名 | 依賴 | 大小(相對) |
|---|---|---|---|
| I 幀 | Intra-coded,也稱 keyframe | 不依賴任何其他幀 | 最大,約 P 幀的 5–10 倍 |
| P 幀 | Predicted | 依賴前面的幀 | 中 |
| B 幀 | Bi-directional predicted | 依賴前面與後面的幀 | 最小 |
GOP(Group of Pictures) 是兩個 I 幀之間的距離。GOP = 2 秒、60fps,就是每 120 幀放一個 I 幀。
這個數字同時控制三件事:
切入點。 播放器只能從 I 幀開始解碼,所以 GOP 長度就是新觀眾最壞情況的等待時間,也是 ABR 切換碼率的最小粒度。
分片長度的下限。 HLS/DASH 的每個分片必須以 I 幀開頭,所以分片長度必須是 GOP 的整數倍。想要 2 秒分片就必須有 ≤2 秒的 GOP。
碼率效率。 I 幀貴。GOP 從 4 秒縮到 1 秒,I 幀密度變 4 倍,相同畫質下碼率上升(典型增幅在 10–20% 量級,依內容而定)。
B 幀是低延遲的敵人。 因為 B 幀依賴「後面的幀」,編碼器必須先緩衝未來幾幀才能編出它,這直接加上延遲。所有低延遲設定的第一條都是關掉 B 幀(x264 的 bframes=0,或用 baseline/main profile 的受限配置)。
五、Latency(延遲):它是一個預算,不是一個開關
「延遲」這個詞至少有三種用法,混用會導致完全談不攏:
Glass-to-glass(端到端)——鏡頭前發生的事,到觀眾螢幕上顯示出來,中間經過的總時間。這是唯一對使用者有意義的定義。
協定延遲——某個協定本身結構上引入的延遲(例如 HLS 分片長度 × 緩衝分片數)。供應商報的數字通常是這個,它比 glass-to-glass 小。
網路延遲(RTT)——純粹的來回傳輸時間。它只是上面那些的一個組成部分。
把 glass-to-glass 拆開,典型的分配是:
| 環節 | 典型貢獻 | 可壓縮性 |
|---|---|---|
| 擷取與前處理 | 20–60 ms | 低(硬體決定) |
| 編碼(含 lookahead/B 幀) | 50–300 ms | 高(關 B 幀、降 lookahead、調 preset) |
| 第一哩路傳輸 | 50–200 ms | 中(看距離與協定的重傳策略) |
| 轉碼與打包 | 100 ms – 數秒 | 高(分片長度主導) |
| CDN 分發 | 20–100 ms | 低—中 |
| 播放器緩衝 | 500 ms – 30 s | 最高——這通常是最大的一塊 |
| 解碼與顯示 | 20–50 ms | 低 |
播放器緩衝幾乎總是最大的一項,也是最容易被忽略的一項。 一個設了 3 個分片緩衝、分片 6 秒的 HLS 播放器,光是緩衝就有 18 秒。你把編碼延遲從 200 ms 優化到 100 ms,對使用者完全沒有感覺。延遲優化必須從最大的那一塊開始,詳見 分發與延遲。
延遲與穩定性是直接對立的。 緩衝的存在就是為了吸收網路抖動;緩衝越小,一個遲到的封包就越可能造成卡頓。所以「延遲要多低」的正確問法是「這個場景能忍受多少卡頓率」,而不是「越低越好」。
六、ABR:為什麼要同一個內容編好幾份
觀眾的網路條件差異巨大(從 50 Mbps 光纖到 1 Mbps 的行動網路)。ABR(Adaptive Bitrate,自適應位元率) 的做法是把同一個內容編成數個不同碼率的版本(稱為 ladder,階梯),播放器根據當下的下載速度逐片選擇要拉哪一階。
這帶來一個結構性後果:ABR 需要分片,分片需要 HTTP,HTTP 需要緩衝——所以 ABR 與極低延遲在架構上互相拉扯。WebRTC 走的是另一條路:不切片,改用即時的碼率調適(編碼器直接根據回饋降碼率),代價是失去 HTTP CDN 的快取紅利。詳見 傳輸協定。
七、把名詞接回場景
| 場景 | 延遲要求 | 典型選擇 |
|---|---|---|
| 新聞直播、演唱會轉播 | 10–30 秒可接受 | HLS/DASH,長分片,大緩衝,最省錢 |
| 體育賽事 | 2–6 秒(要贏過電視) | LL-HLS/LL-DASH |
| 線上拍賣、互動問答 | 1–3 秒 | LL-HLS 調校,或 WebRTC |
| 真人荷官、雲端遊戲、視訊會議 | < 500 ms | WebRTC |
延遲要求往下一階,成本與複雜度就往上一階,而且不是線性的。這是整個專欄反覆出現的主線。
🧠 記
bpp 是畫質的真實指標,不是 bitrate 單獨的數字;fps 加倍等於 bpp 腰斬。
GOP 同時決定切入延遲、分片長度下限與碼率效率,三者互相牽制。
B 幀是低延遲的敵人,低延遲設定一律先關掉它。
延遲是預算不是開關,而播放器緩衝通常佔最大一塊——優化要從最大的那塊開始。
第一哩路與最後一哩路需求相反:前者要可靠(ARQ),後者要可快取(HTTP)。
✍️ 實踐
花 20 分鐘做一次延遲歸因,不需要任何付費服務:
- 用 OBS 推一條流到任一平台,開 1080p30、4 Mbps、GOP 2 秒。
- 把手機碼表(毫秒級)對著鏡頭拍,同時在另一個螢幕開播放頁面。
- 同時截圖兩個畫面,相減得到 glass-to-glass 延遲。
- 接著只改一項、各測一次:GOP 改 1 秒 → 分片改短 → 播放器緩衝改小。記錄每一項各自省下多少毫秒。
做完這一輪你會得到自己管線的延遲分配表,而那張表會告訴你後面該往哪裡花力氣——幾乎所有人做完都會發現答案跟自己原本以為的不一樣。
🔗 延伸學習
- Mux — Low-Latency Live Streaming for Developers: LL-HLS, WebRTC, and CMAF Explained——把延遲拆成結構性來源的少數幾篇技術寫作之一,作者是實際做這條管線的團隊。
- Fora Soft — Latency, Glass-to-Glass, End-to-End: What the Seconds Actually Mean——把三種延遲定義分清楚,適合拿來跟供應商對齊用詞。
相關
- 直播視頻研究——由淺入深,最後到安全(hub)
- 擷取與編碼
- 傳輸協定
- 分發與延遲