SRT RTMP 差異詳解:IRL 直播該選 SRTLA、SRT 還是 RTMP?
2026年10月09日 · 閱讀時間 3 分鐘
目錄
IRL 直播通常更適合用 SRT 而不是 RTMP,如果能同時透過多條連線傳送,SRTLA 是最佳選擇。直播平台只認 RTMP,所以 RTMP 仍然需要,但它應該用在伺服器到平台之間穩定的最後一段,而不是行動網路上。
本文重點談 SRT RTMP 差異,介紹三種協定的運作原理、在行動網路下的表現,以及如何正確設定 SRT 延遲。
什麼是 RTMP?
RTMP(Real-Time Messaging Protocol)由 Adobe 制定,並在 2009 年以開放規格發布。它設計成運作在 TCP 這類可靠傳輸之上,確保所有訊息依序送達(RTMP 規格)。SRT 的 IETF 草案把 RTMP 稱為公共網際網路上傳送影像的事實標準,這也是幾乎所有編碼器、App 和平台都支援它的原因。
它的弱點也來自同一個設計。RTMP 依賴 TCP,只有在往返時間較低的連線上才能維持可接受的可靠度,而且 TCP 的壅塞控制會讓它無法用滿連線的頻寬。對在基地台之間來回切換的手機來說,這很不合適。
傳統 RTMP 還有編解碼器的限制:只支援兩個音訊聲道和少數幾種編解碼器,不支援 HEVC、VP9 或 AV1。Enhanced RTMP 規格補上了這些編解碼器,YouTube 現在也為 RTMP(S) 列出 H.264、H.265 和 AV1。不過,你的軟體和平台都得支援才行。RTMPS 就是在加密 SSL 連線中傳輸的 RTMP,YouTube 正是基於這個原因推薦使用。
什麼是 SRT?
SRT(Secure Reliable Transport)是開放原始碼協定,在 Haivision 的公開 GitHub 儲存庫中開發,並寫進 IETF Internet-Draft。它建立在 UDP 之上,補足 UDP 本身缺少的可靠度。主要機制是 ARQ(Automatic Repeat reQuest):接收端發現封包遺失後,會請求傳送端重新傳送該封包。協定也支援 Forward Error Correction 和內建的連線綁定。
對 IRL 直播來說,有三個特性很重要:
- 延遲緩衝:接收端會把每個封包依設定的時間保留一會兒,再往下傳。這段時間讓遺失的封包有機會重傳,也能還原串流原本的時間節奏。太晚到的封包可能被丟棄,因此延遲會維持恆定,不會越積越大。
- 加密:SRT 支援 128、192 或 256 位元金鑰的 AES 加密。
- 與編解碼器無關:SRT 不在意載荷內容,任何編解碼器、解析度和幀率都能傳輸,包括 HEVC。
這個取捨是設計裡本來就有的。緩衝區會刻意增加延遲,所以你得選一個適合自己網路的延遲值(下文詳述)。
什麼是 SRTLA?
SRTLA 是具備鏈路聚合功能的 SRT 傳輸代理。它源自 BELABOX 專案,透過多條網路線路傳輸 SRT 流量,以取得更大頻寬和備援。流量會依網路狀況動態分配,主要用途是綁定多個行動數據機進行直播。
SRTLA 並不取代 SRT,而是位於 SRT 傳送端和接收端之間:裝置把 SRT 串流透過例如兩張 SIM 卡,或一張 SIM 卡加 Wi-Fi 送出,支援 SRTLA 的接收端再把封包重新組合,以一般 SRT 串流的形式往下傳。由此帶來三個實際要求:
- 需要支援 SRTLA 的傳送端。例如免費的 iOS App Moblin 可以同時使用一條行動網路、一條 Wi-Fi 和多條乙太網路連線。IRL Pro 和 BELABOX 裝置同樣提供 SRTLA 綁定。
- 需要 SRTLA 接收端。直播平台或一般的 SRT 監聽端做不到這一點,所以中間必須有一台支援 SRTLA 輸入的伺服器。
- 需要調校。封包經由不同線路抵達時順序會被打亂。因此 README 要求設定
lossmaxttl等接收端選項,並搭配合適的延遲。
RTMP、SRT、SRTLA 一覽比較
| 特性 | RTMP | SRT | SRTLA |
|---|---|---|---|
| 傳輸方式 | TCP | 具備重傳(ARQ)的 UDP | 分散在多條線路上的 SRT 流量 |
| 行動訊號弱時 | 往返時間要低才能維持可靠 | 在延遲窗口內恢復遺失的封包 | 與 SRT 相同,另一條線路還能補上較弱的線路 |
| 延遲 | 沒有可調整的緩衝區 | 可設定延遲窗口 | 需要足夠的延遲來完成重新排序和重傳 |
| 綁定 | 不支援 | 本身不支援 | 支援,可跨多條連線 |
| HEVC | 僅在兩端都支援 Enhanced RTMP 時可用 | 支援,與編解碼器無關 | 支援,因為它承載的是 SRT |
| 加密 | RTMPS(TLS) | 內建 AES | 取決於接收端的設定 |
| App 與平台 | 幾乎所有 App,以及大型平台文件中的標準接入方式 | 許多 App 和 OBS 支援,而平台文件通常寫的是 RTMP(S) | 支援 SRTLA 的 App 加 SRTLA 接收端 |
平台為什麼要求 RTMP,又為什麼要在中間加一台伺服器
大型平台的編碼器文件仍然圍繞 RTMP。YouTube 把 RTMP/RTMPS 列為編碼器協定(HLS 是另一種選擇),Twitch 的開發者文件也介紹了透過 RTMP 把串流送到 Twitch。因此在大多數情況下,不能直接把 SRT 和 SRTLA 指向平台。
伺服器不僅解決了這個問題,還帶來第二個好處。整條鏈路是這樣的:
- 手機或編碼器透過 SRT 或 SRTLA(或 RTMP)把串流傳給伺服器。
- OBS Studio 等串流軟體從這台伺服器拉取串流。
- OBS 透過穩定的連線,以 RTMP(S) 把處理好的串流傳送給平台。
不穩定的行動段使用容錯更好的協定,平台則透過一條不會移動的連線收到它期待的協定。行動訊號短暫中斷時,OBS 會繼續向平台串流,觀眾看到的直播不會中斷。編碼器和 OBS 都是主動連線到伺服器,所以你不用在路由器上開放連接埠。
我們的 IRL 端點伺服器搭配你自己電腦上的 OBS,就能做到這一點。它支援 RTMP、SRT 和 SRTLA 輸入。如果你沒有串流用的電腦,IRL 直播伺服器會在雲端執行 OBS Studio,同樣支援這三種輸入。想了解 IRL 方案的整體思路,請看我們的 IRL 直播指南。
如何設定 SRT 延遲
SRT 延遲並不是從攝影機到觀眾的總延遲。在 Haivision 的文件中,它只指透過網路傳送所產生的延遲。編碼、解碼、OBS 和平台的延遲還要另外疊加。這項設定真正決定的,是接收端為補償晚到的封包和重傳而額外等待的時間。
OBS 知識庫針對最重要的選項給出了一條經驗法則:
- 預設值為 120 ms。
- 該值至少應為編碼器與伺服器之間往返時間(毫秒)的 2.5 倍。
- 在 OBS 使用的 FFmpeg 風格 URL 中,單位是微秒。1 秒的延遲寫作
latency=1000000。
範例:如果 ping 伺服器得到的往返時間是 80 ms,依這條規則最小值為 200 ms,所以你應輸入 srt://SERVER:PORT?latency=200000。請使用客戶專區中顯示的準確位址和連接埠。在 OBS 中,這類選項可以附加到媒體來源或自訂串流目的地的 SRT URL 後面。
傳送到我們伺服器的串流,建議把延遲設為 2 秒。依 App 不同,輸入 2000(毫秒)或 2000000(微秒)。多數 App 有獨立的欄位;沒有的話,就附加到 SRT URL 後面,例如 srt://<server>:<port>?streamid=publish:publish/<streamkey>&latency=2000。也可以設得更低,但我們特意推薦 2 秒,以穩定性為先。
還有幾點需要注意:
- 單位不同。SRT 函式庫和 SRTLA README 使用毫秒,而 FFmpeg 風格的 URL 使用微秒。輸入數值之前,先確認你的 App 要求哪種單位。
- 雙方會協商。根據 SRT 草案,連線的延遲取傳送端和接收端各自提議值中的較大者。如果另一端要求更高,只在一端調低是沒用的。
- 行動和綁定的串流需要預留餘裕。上面的規則只是最小值,不是建議值。窗口越大,重傳和重新排序的時間越充裕,但延遲也越高。例如 SRTLA README 在範例接收端設定中,把
latency=2000(ms)和lossmaxttl一起使用。 - 一次只改一項,而且要在移動中測試,不要只在桌前測試。
伺服器位置與延遲
由於 SRT 的最小延遲隨往返時間而定,距離就很重要。伺服器離你越近,往返時間越短,你就可以用更小的延遲窗口,或者以更低的延遲取得同樣的穩定度。最後一段也是同樣的道理:例如 Twitch 會依據到你裝置的網路路徑來推薦接入端點。
我們提供美國、歐洲、亞洲和南美洲的伺服器地區。使用 IRL 端點伺服器時,標準方案可以在這些地區中選擇,並在客戶專區中隨時切換,出遊時很方便。Dedicated 方案則由我們為你設定端點,預設選在離你帳單地址最近的位置。
你該用哪種協定?
- 一條連線,較新的 App:用 SRT,並依往返時間設定延遲。
- 兩條或更多連線:如果你的 App 支援、伺服器也接受,就用 SRTLA。
- 只支援 RTMP 的 App 或攝影機:用 RTMP。能用,但對弱網路的容忍度較低。
- HEVC:SRT 與編解碼器無關。請確認從編碼器到 OBS 再到平台的整條鏈路都支援。請把編碼器的關鍵影格間隔設為 2 秒;在 Apple 裝置上使用 HEVC 時,如果 App 提供 B 影格選項,請關閉 B 影格。
FAQ
SRT 在 IRL 直播中比 RTMP 好嗎?
對行動段來說,通常是的。SRT 建立在 UDP 之上,會在可設定的延遲窗口內重傳遺失的封包,而 RTMP 依賴 TCP,只有往返時間較低的連線才可靠。從伺服器或 OBS 到平台的連線,RTMP 仍然是常見的選擇。
SRT 和 SRTLA 有什麼差別?
SRT 是針對單一連線的傳輸協定。SRTLA 則同時透過多條網路線路(例如兩張 SIM 卡)傳輸 SRT 流量,以增加頻寬和備援。SRTLA 需要支援 SRTLA 的 App,以及能辨識它的接收端。
能用 SRT 直接串流到 Twitch 或 YouTube 嗎?
兩個平台的編碼器文件都以 RTMP(S) 為主,YouTube 還有 HLS 作為替代。如果你想在行動段使用 SRT 或 SRTLA,請在裝置和平台之間放一台伺服器和 OBS。
SRT 延遲應該設成多少?
傳送到我們伺服器的串流,建議設為 2 秒,依 App 不同輸入 2000(毫秒)或 2000000(微秒)。也可以設得更低,但 2 秒是特意以穩定性為先的推薦值。一般規則是,根據 OBS 知識庫,至少是到伺服器往返時間的 2.5 倍,預設值為 120 ms。行動網路和綁定連線通常需要更多餘裕,代價是延遲更高。
IRL 端點伺服器支援這三種協定嗎?
支援。IRL 端點伺服器和 IRL 直播伺服器都接受 RTMP、SRT 和 SRTLA 作為輸入。