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 一覽比較

特性RTMPSRTSRTLA
傳輸方式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 指向平台。

伺服器不僅解決了這個問題,還帶來第二個好處。整條鏈路是這樣的:

  1. 手機或編碼器透過 SRT 或 SRTLA(或 RTMP)把串流傳給伺服器。
  2. OBS Studio 等串流軟體從這台伺服器拉取串流。
  3. 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 作為輸入。