關於SRT |特點|開始使用 |建構說明|範例應用程式和工具 |貢獻 |許可證|發布
安全可靠傳輸 (SRT)是一種用於超低(亞秒)延遲即時視訊和音訊串流以及通用大量資料傳輸的傳輸協定1 。 SRT 作為一項開源技術提供,其程式碼位於 GitHub、已發布的互聯網草案以及不斷增長的 SRT 用戶社群。
SRT 作為視訊串流工作流程的一部分應用於貢獻和分發端點,以始終提供最佳品質和最低延遲的視訊。
安全的 | 加密視訊串流 |
可靠的 | 從嚴重丟包中恢復 |
運輸 | 動態適應不斷變化的網路條件 |
在直播串流配置中,SRT 協定保持恆定的端到端延遲。這允許在接收器端重新創建即時流的訊號特徵,從而減少緩衝的需要。當資料包從來源串流傳輸到目的地時,SRT 會偵測並適應兩個端點之間的即時網路狀況。它有助於補償因雜訊網路擁塞而導致的抖動和頻寬波動。
SRT 實作 AES 加密來保護媒體串流的有效負載,並提供各種錯誤復原機制來最大限度地減少 Internet 連線中典型的資料包遺失,其中自動重複請求 (ARQ) 是主要方法。透過 ARQ,當接收方偵測到資料包遺失時,它會向發送方發送警報,請求重傳該遺失的資料包。該協議還支援前向糾錯 (FEC) 和連接綁定,增加了無縫流保護和無中斷故障轉移。
要了解有關該協議的更多信息,請訂閱創新實驗室博客:
要提出問題,請加入#development頻道中的對話
?按一下 ► 按鈕展開功能說明。
無論您的網路多麼不可靠,SRT 都可以從嚴重的資料包遺失和抖動中恢復,從而確保視訊串流的完整性和品質。
SRT 的串流糾錯可設定以適應使用者的部署條件。利用即時 IP 通訊開發來擴展傳統的網路錯誤復原實踐,SRT 提供的媒體延遲顯著低於 TCP/IP,同時提供 UDP 傳輸速度並大大提高了可靠性。
與某些僅支援特定視訊和音訊格式的其他串流協定不同,SRT 與負載無關。由於 SRT 在網路傳輸層級運行,充當內容的包裝器,因此它可以傳輸任何類型的視訊格式、編解碼器、解析度或幀速率。
SRT 使用的握手過程支援出站連接,而不存在在防火牆中開啟永久外部連接埠的潛在風險和危險,從而維護企業 LAN 安全策略並最大限度地減少 IT 介入的需要。
SRT 使用受到世界各地政府和組織信任的 128/192/256 位元 AES 加密,確保有價值的內容受到端到端保護,從貢獻到分發,以便未經授權的各方無法收聽。
SRT 1.4 引入了封包過濾器 API 。此機制允許在發送網路資料包之前在發送方執行自訂處理,並在接收方從網路接收資料包後執行自訂處理。 API 允許使用者編寫自己的插件,從而透過各種不同的資料包過濾進一步擴展 SRT 協定的功能。使用者可以以任何方式操作產生的資料包過濾器數據,例如自訂加密、資料包檢查或在發送資料之前存取資料。
作為使用資料包過濾器API 可以實現的範例而創建的第一個插件是用於前向糾錯(FEC) 的,在某些用例中,它可以提供比自動重複請求(ARQ) 稍低的延遲。該插件允許三種不同的模式:
僅 ARQ – 重傳遺失的資料包,
僅 FEC – 提供接收端 FEC 復原所需的開銷,
FEC 和 ARQ – 重傳 FEC 無法復原的遺失資料包。
與託管網路上的 SMPTE-2022-7 類似,連線綁定為 SRT 協定添加了無縫流保護和無中斷故障轉移。這項技術依賴多個 IP 網路路徑,以防止在網路擁塞或中斷時直播視訊串流中斷,從而保持服務的連續性。
這是使用 SRT v1.5 中引入的套接字組來完成的。套接字組的一般概念是指擁有一個包含多個套接字的群組,其中發送一個資料訊號的一個操作應用於該群組。群組內的單一套接字將接管此操作並執行將訊號傳遞到接收器所需的操作。
支援兩種模式:
廣播 - 在廣播模式下,資料透過群組中的所有成員連結冗餘發送。如果其中一條連結發生故障或經歷網路抖動和/或資料包遺失,則將透過群組中的另一條連結接收遺失的資料。冗餘資料包在接收端被簡單地丟棄。
主/備份 - 在主/備份模式下,一次僅使用一條(主)鏈路進行資料傳輸,而其他(備份)連線處於備用狀態,以確保在主鏈路發生故障時繼續傳輸。主/備份模式的目標是在潛在的鏈路中斷發生之前識別它,從而提供一個時間窗口,在該時間窗口內無縫切換到備份鏈路之一。
存取控制使上游應用程式能夠將流 ID 分配給各個 SRT 流。透過使用自動產生或自訂的唯一流 ID,上游應用程式可以將多個 SRT 流傳送到單一 IP 位址和 UDP 連接埠。然後,接收器可以使用流 ID 來識別和區分攝取流、應用使用者密碼存取方法,並且在某些情況下甚至會套用基於流 ID 命名的自動化。例如,貢獻可以發送到視訊製作工作流程,監控可以發送到監控服務。
對於廣播公司而言,串流 ID 是取代 RTMP 將視訊串流(尤其是 HEVC/H.265 內容)提取到雲端服務或 CDN(為傳入視訊開啟單一 IP 套接字(位址 + 連接埠))的關鍵。
SRT API | IETF 網路草案 | 範例應用程式 |
SRT庫API的參考文檔 | SRT 協定網際網路草案 | 使用測試應用程式的說明( srt-live-transmit 、 srt-file-transmit 等) |
SRT技術概述 | SRT部署指南 | SRT 食譜 |
早期草案技術概述(互聯網草案的前身) | 協議的全面概述以及部署指南 | SRT協定開發筆記 |
創新實驗室博客 | SRTLab YouTube 頻道 | 鬆弛 |
Medium 上的博客,包含 SRT 相關技術文章 | 包含有用影片的技術 YouTube 頻道 | Slack 頻道獲取最新動態並提出問題 加入 Slack 上的 SRT 聯盟 |
為什麼要進行SRT? - Marc Cymontkowski 所寫的 SRT 簡史和基本原理。
RTMP 與 SRT:比較延遲和最大頻寬白皮書。
GitHub 上的文檔,包含 SRT API 文件、功能描述等。
SRT 協定網際網路草案:Datatracker |最新版本 |最新工作副本 | GitHub 儲存庫
Linux (Ubuntu/CentOS) |窗戶| macOS | iOS |安卓 |套件管理器
C++03以上相容編譯器。
CMake 2.8.12 或更高版本作為建置系統。
OpenSSL 1.1 啟用加密,否則使用-DENABLE_ENCRYPTION=OFF
進行建置。
多線程由以下任一方式提供:
C++11:標準函式庫( std
by -DENABLE_STDCXX_SYNC=ON
CMake 選項),
C++03:Pthreads(對於 POSIX 系統,它是內建的,對於 Windows,有一個移植程式庫)。
Tcl 8.5 是可選的,由./configure
腳本使用。否則,直接使用CMake。
有關建置系統和選項的詳細說明,請閱讀 SRT 建置選項文件。
目前儲存庫提供了演示 SRT 庫 API 用法的範例應用程式和程式碼範例。其中包括srt-live-transmit
、 srt-file-transmit
和其他應用程式。可以在此處找到相應的文件。請注意,提供的所有範例均用於指導目的,不應在生產環境中使用。
srt-xtransmit
實用程式積極用於內部測試和效能評估。除其他功能外,它還支援虛擬有效負載產生、流量路由和連接綁定。其他詳細資訊可在srt-xtransmit
儲存庫本身中找到。
在開發過程中可能有用的 Python 工具有:
srt-stats-plotting
- 設計用於根據 SRT .csv
統計資料繪製圖表的腳本。
lib-tcpdump-processing
- 一個庫,旨在處理.pcap(ng)
tcpdump 或 Wireshark 追蹤檔案並提取感興趣的 SRT 封包以進行進一步分析。
lib-srt-utils
- 一個 Python 函式庫,包含基於實驗配置執行 SRT 測試的支援程式碼。
歡迎任何人做出貢獻。如果您決定參與,請花點時間查看指南:
SRT 開發人員指南
貢獻
報告問題
有關參與互聯網草案或提交問題的信息,請訪問以下存儲庫。可以在此處找到用於 SRT CookBook 貢獻的儲存庫。
透過向 SRT 專案貢獻程式碼,即表示您同意根據 MPLv2.0 許可證授予您的貢獻許可。
發行說明
SRT 版本控制
術語「直播串流」是指具有延遲管理的連續資料傳輸(MPEG-TS 或同等內容)。基於 HTTP 即時串流 (HLS) 協定(如 RFC8216 所述)中的檔案分段和傳輸的即時串流不屬於此用例的一部分。在這種情況下,應考慮以訊息或緩衝模式進行檔案傳輸。詳細資訊請參閱網際網路草案第 7 節:透過 SRT 進行資料傳輸的最佳實務與設定提示。請注意,SRT 與內容無關,這表示任何類型的資料都可以透過其有效負載傳輸。 ↩