流媒体传输协议浅析(三)可靠UDP传输方案
一、引言
從流媒體的業務特征和TCP,UDP各種特點,UDP在媒體傳輸方面具有很大優越性,但UDP可靠性需要業務開發這投入大量的人力;相反 tcp 技術成熟,可以復用已穩定的http 服務器技術,不需要投入人力和技術解決可靠性問題,成熟,開發簡單,拿來即用。故TCP在傳統的流媒體協議還是廣泛存在。但實際的網絡擁塞,帶寬不足,信號衰減會造成tcp 傳輸的音視頻體驗很糟糕。對穩定性,實時性,抗弱網抖動性的要求高的場景,UDP媒體傳輸技術正在崛起。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?
二、UDP傳輸常見使用場景:
1)視頻監控
在視頻監控場景,無論是RTSP,還是gb28181,媒體都是UDP承載(也存在通過TCP承載RTSP封裝RTP媒體流,但這種用法不多,不符合國標用法和通用做法)
2)IPTV電視
在IPTV中,無法是點播還是直播,都是UDP承載電視節目碼流。
3)會議電視
?? 在傳統的會議電視,信令協議從h323過度到主流的sip,但媒體承載還是UDP封裝的RTP流
4)音視頻通話
無論是傳統的VoIP還是目前互聯網上流行的webrtc,也都是UDP承載的RTP碼流
三、可靠性的UDP傳輸方案
既然udp是音視頻傳輸的理想方案,但udp可靠性工作需要投入大量工作,技術門檻高,小團隊幾乎望而卻步。那有沒有一種可用的開源技術即具備tcp的可靠性,又具備udp的低延遲性?答案是肯定的。類似的sctp,quic,kcp的可靠UDP傳輸方法某些大廠開始引入媒體傳輸中,下面介紹幾種目前比較流行的可靠UDP技術。
1)UDT(UDP-based Data Transfer Protocol)
UDT的主要目的是支持高速廣域網上的海量數據傳輸,所以除了在UDP之上實現類似TCP的協議和算法之外,UDT還對TCP的擁塞算法做了一些細節上的調整,包括Negative-ACK(NAK)、ACK to ACK(ACK2)、基于對數的動態AIMD等。不過UDT的重傳效率較低,無效報文,實際效果并不理想。
參考實現:https://git.dorkbox.com/dorkbox/UDT/src/branch/master/src
2)KCP
KCP是一個很簡單的ARQ的實現,包括選擇重傳和快重傳等機制,對上層提供一個可靠的字節流。應用層可以使用多流復用的框架來實現對多個流的支持。另外,KCP增加了可配置啟用的加密和FEC選項,FEC用的是Reed-Solomon糾刪碼,例如可以配置發送10%的冗余數據,來減少丟包時需要的重傳,從而降低數據傳輸的延時。
參考實現:https://github.com/skywind3000/kcp
3)QUIC
QUIC是Google實現的一種可靠UDP傳輸協議,并且已經被選擇作為HTTP/3的基礎。它的特點有:
a)內建安全性,集成TLS
b)連接建立過程和TLS協商過程合并,減少往返請求次數,提高連接速度
c)集成多種擁塞算法,包括最新的BBR
d)多流支持,每個流有獨立的擁塞控制,避免單個流中的丟包阻塞其它所有流(Head-of-line Blocking問題),更好的支持類似HTTP/2中的亂序請求
e)連接遷移:QUIC可以通過連接ID來唯一標識一個連接,當用戶在有線、無線、移動網絡之間切換時,可以保持上層連接的有效性,不需要再進行重連。
另外,早期的QUIC還使用了一種基于異或的FEC算法,不過在新版本中已經去掉。該協議已經在chromium中實現,參考獲取方法:https://www.chromium.org/quic/playing-with-quic
4)uTP
uTP是BitTorrent中新增加的一種UDP傳輸協議,主要特點是使用了LEDBAT(Low Extra Delay Background Transport)擁塞算法。這種算法基于延時來檢測網絡擁塞,可以更早的探測到擁塞和更早的以及更大幅度的進行避讓,從而避免影響用戶上網操作的進行,保持后臺下載跟前臺操作的和平共處。
參考實現:https://github.com/bittorrent/libutp
5)SCTP(Stream Control Transmission Protocol,流控制傳輸協議)
準確的說,SCTP不是一種可靠UDP協議,而是一種跟TCP/UDP平級的傳輸層協議,是IETF在2000年指定的標準協議。目前Linux和部分UNIX已經集成,Windows和Mac需要使用第三方包來實現。SCTP最初主要用于電信系統,它的特點有:
a)跟TCP一樣面向連接,提供可靠傳輸
b)跟UDP一樣面向消息
c)多流支持
d)每個流可以配置成接受有序或無序的消息
e)Multi-Homing:可以配置多個地址,利用多條網絡傳輸通道
f)更好的安全性:要求四次握手,避免TCP的SYN Flooding攻擊
注意webrtc的sctp不是跟tcp和UDP平級的傳輸層協議,它是基于UDP的開發實現,詳見webrtc代碼或https://github.com/sctplab/usrsctp
參考:https://zhuanlan.zhihu.com/p/68466363
四、總結
以上基于UDP的可靠性傳輸技術在某些領域已經有成功的應用案例。在音視頻傳輸領域可以根據業務需求,移植過來替換已有協議底層的TCP或UDP接口,改善傳輸性能。更多更詳細信息請關注微信公眾號:AV_Chat
總結
以上是生活随笔為你收集整理的流媒体传输协议浅析(三)可靠UDP传输方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [vue] 实际工作中,你总结的vue最
- 下一篇: [jQuery] jquery.exte