關於RTP和SRT之間的互操作性,你需要了解什麼?

  • 2019 年 10 月 5 日
  • 筆記

文 / Mark Cymontkowski

譯 / John

原文

What You Need to Know About Interoperability Between RTP and SRT

許多企業現有的內部部署廣播工作流程都基於RTP協議,但是您是否知道SRT可以通過在不可靠的網路(例如公共網路)上利用SRT隧道傳輸RTP來擴展這些工作流程的範圍?

在這篇文章中,我們將以一個非常簡單的端到端工作流為例向您展示這一過程。下圖顯示了如何使用RTP將MPEG2傳輸流從影片編碼器發送到受保護網路(例如企業LAN或MPLS租用線路)內的影片解碼器。

通過可靠網路(例如區域網)進行RTP傳輸

用公共互聯網取代專用網路並不是那麼簡單,因為不可靠的網路會引入數據包丟失和抖動。此外,流在離開或進入企業網路時必須穿過防火牆。這期間內容不再受到保護,非常容易被暴露。

RTP通過不可靠的網路傳輸,如公共互聯網

SRT能夠恢復丟失的數據包,也能加密內容和遍歷防火牆,這使其非常適合用作跨公共互聯網的隧道。

以下是它的工作原理:

RTP流量被發送到UDP接收器,UDP接收器通過SRT連接轉發包括RTP報頭在內的MPEG-TS有效載荷;而在接收器端,流作為UDP播放,但由於RTP報頭仍然存在,因此它會將本地RTP流發送到現有的RTP解碼器。

通過SRT在不可靠的網路(例如公共互聯網)上隧道傳輸RTP

可以使用開源SRT包中的srt-live-transmit示例應用程式來評估此配置。來自編碼器的源RTP流必須指向SRT發送器的UDP輸入並將目標位置處接收器的UDP輸出發送到解碼器的RTP輸入埠。

由於應用程式在從UDP讀取數據時期望沒有RTP頭的MPEG-TS流量,因此默認情況下,它被配置成為每UDP包接收1316位元組(7個MPEG-TS幀)的有效載荷。該命令行選項用於增加SRT有效負載大小。

這些是發送方(UDP到SRT)和接收方(SRT到UDP)的兩個srt-live-transmit示例命令行:

在該示例中,源(例如RTP編碼器)正在將RTP流發送到192.168.0.20:2000。發送方端srt-live-transmit接收包括埠2000上的RTP報頭在內的MPEG-TS流並偵聽埠1000上的傳入接收方連接。在我們的示例中,運行發送方應用程式的電腦的IP地址為192.168.0.10。不同機器上的接收器應用程式作為呼叫者連接到伺服器,接收SRT流並將該流作為UDP數據輸出到IP地址為192.168.0.30和埠3000的RTP接收器(例如解碼器)。

注意:使用SRT 1.4版時,在使用srt-live-transmit時不再需要指定有效負載和/或塊大小(-c)。

類似地,具有FEC(SMPTE 2022-1前向糾錯)的冗餘RTP可以通過SRT連接進行隧道傳輸。FEC列和行數據包的額外UDP流可以通過兩個額外的SRT連接進行路由。但是,所有三個SRT連接都可以通過使用SRT復用在單個UDP埠上發送,SRT復用是核心協議的一部分。

使用SRT復用通過SRT與FEC隧道傳輸RTP

我們可以進一步擴展此設置以支援冗餘RTP(SMPTE 2022-7)工作流程。由於RTP報頭在冗餘設置的任一路徑上保持不變,因此系統仍可在接收器側同步多個RTP流。

通過SRT隧道傳輸多路徑RTP以實現冗餘

此時,值得一提的是,在IBC2019時間範圍內,本機冗餘工作流程將進入SRT協議。這意味著每個啟用SRT的端點都可以使用此功能從而大大簡化了安裝。