WebRTC:數據傳輸相關協議簡介

音視頻開發老舅 發佈 2022-09-18T00:08:53.331511+00:00

對網絡協議來說,需要做的通常就兩件事情:1、建立連接,2、傳輸數據,WebRTC也不例外。假設WebRTC應用的兩端已經建立了連接,那麼,剩下就是如何傳輸數據的問題了。WebRTC同時支持傳輸音視頻數據、自定義應用數據。

對網絡協議來說,需要做的通常就兩件事情:1、建立連接,2、傳輸數據,WebRTC也不例外。

假設WebRTC應用的兩端已經建立了連接,那麼,剩下就是如何傳輸數據的問題了。

WebRTC同時支持傳輸音視頻數據、自定義應用數據。這其中,涉及多種協議,包括UDP、RTP/SRTP、RTCP/SRTCP、DTLS、SCTP。

這些協議名字比較相似,很容易讓人混淆,簡單總結下:

  1. 傳輸音視頻數據相關協議:UDP、DTLS、RTP/SRTCP;
  2. 傳輸自定義應用數據相關協議:UDP、DTLS、SCTP;

下面就簡單介紹下,這些協議是做什麼的,有什麼區別,存在什麼聯繫。

C++音視頻開發學習資料點擊莬費領取→音視頻開發(資料文檔+視頻教程+面試題)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)

加密信道建立:UDP、DTLS

對WebRTC應用來說,不管是音視頻數據,還是自定義應用數據,都要求基於加密的信道進行傳輸。DTLS 有點類似 TLS,在UDP的基礎上,實現信道的加密。

DTLS的主要用途,就是讓通信雙方協商密鑰,用來對數據進行加解密。

  1. 通信雙方:通過DTLS握手,協商生成一對密鑰;
  2. 發送方:對數據進行加密;
  3. 發送方:通過UDP傳輸加密數據;
  4. 接收方:對加密數據進行解密;

音視頻數據傳輸:RTP/SRTP、RTCP/SRTCP

首先,我們先來看下RTP、RTCP的大概用途:

  1. RTP(Realtime Transport Protocol):實時傳輸協議,主要用來傳輸對實時性要求比較高的數據,比如音視頻數據。
  2. RTCP(RTP Trasport Control Protocol):RTP傳輸控制協議,跟RTP在同一份RFC中定義,主要用來監控數據傳輸的質量,並給予數據發送方反饋。

也就是說:

  1. RTP用來傳輸音視頻數據;
  2. RTCP用來傳輸(質量)控制數據;比如監控傳輸的質量,並在會話雙方之間進行同步,方便WebRTC根據傳輸質量進行動態調整,比如傳輸的速率、視頻的碼率等。

至於SRTP、SRTCP,分別在RTP、RTCP的基礎上加了個S(Secure),表示安全的意思,這個就是DTLS做的事情了。

結合前面內容,總結一下音視頻數據的發送過程:

  1. 通信雙方:通過DTLS握手,協商生成一對密鑰;
  2. 數據發送方:將音視頻數據封裝成RTP包,將控制數據封裝成RTCP包;
  3. 數據發送方:利用加密密鑰,對RTP包、RTCP包進行加密,生成SRTP包、SRTCP包;
  4. 數據發送方:通過UDP傳輸SRTP包、SRTCP包;

備註:SRTP/SRTCP包中,除了加密數據,還有其他信息,這裡不展開細節。

C++音視頻開發學習資料點擊莬費領取→音視頻開發(資料文檔+視頻教程+面試題)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)

自定義應用數據傳輸:SCTP

SCTP(Stream Control Transmission Protocol):流控制傳輸協議。

之前介紹過,RTP/RTCP主要用來傳輸音視頻,是為了流媒體設計的。而對於自定義應用數據的傳輸,WebRTC中使用了SCTP協議。

同樣的,SCTP依賴DTLS建立的加密信道,對於自定義應用數據的發送,流程如下:

  1. 通信雙方:通過DTLS握手,協商生成一對密鑰;
  2. 數據發送方:將自定義應用數據,通過密鑰進行加密,生成SCTP包;
  3. 數據發送方:通過UDP傳輸SCTP包;.

C++音視頻開發學習資料點擊莬費領取→音視頻開發(資料文檔+視頻教程+面試題)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)

寫在後面

為了便於講解,跳過了很多協議的細節,有些地方可能會不夠嚴謹,感興趣的同學可以進行進一步研究,比如以下問題:

  1. 傳輸層用了UDP,UDP本身是不可靠的,那麼,音視頻數據、自定義用戶數據的時序、質量是如何保證的?
  2. RTP用來傳遞音視頻數據,為什麼還需要有RTCP?
  3. 為什麼說RTP不適合傳輸自定義用戶數據?
  4. SCTP如何從協議層面兼顧傳輸的效率和質量?如何實現自定義數據的高效傳遞?
  5. 其他

如果你對音視頻開發感興趣,或者對本文的一些闡述有自己的看法,可以在下方的留言框,一起探討。

關鍵字: