對網絡協議來講,須要作的一般就兩件事情:一、創建鏈接,二、傳輸數據,WebRTC也不例外。html
假設WebRTC應用的兩端已經創建了鏈接,那麼,剩下就是如何傳輸數據的問題了。git
WebRTC同時支持傳輸音視頻數據、自定義應用數據。這其中,涉及多種協議,包括UDP、RTP/SRTP、RTCP/SRTCP、DTLS、SCTP。github
這些協議名字比較類似,很容易讓人混淆,簡單總結下:安全
下面就簡單介紹下,這些協議是作什麼的,有什麼區別,存在什麼聯繫。markdown
對WebRTC應用來講,無論是音視頻數據,仍是自定義應用數據,都要求基於加密的信道進行傳輸。DTLS 有點相似 TLS,在UDP的基礎上,實現信道的加密。網絡
DTLS的主要用途,就是讓通訊雙方協商密鑰,用來對數據進行加解密。oop
首先,咱們先來看下RTP、RTCP的大概用途:加密
也就是說:spa
至於SRTP、SRTCP,分別在RTP、RTCP的基礎上加了個S(Secure),表示安全的意思,這個就是DTLS作的事情了。設計
結合前面內容,總結一下音視頻數據的發送過程:
備註:SRTP/SRTCP包中,除了加密數據,還有其餘信息,這裏不展開細節。
SCTP(Stream Control Transmission Protocol):流控制傳輸協議。
以前介紹過,RTP/RTCP主要用來傳輸音視頻,是爲了流媒體設計的。而對於自定義應用數據的傳輸,WebRTC中使用了SCTP協議。
一樣的,SCTP依賴DTLS創建的加密信道,對於自定義應用數據的發送,流程以下:
爲了便於講解,跳過了不少協議的細節,有些地方可能會不夠嚴謹,感興趣的同窗能夠進行進一步研究,好比如下問題:
RTP: A Transport Protocol for Real-Time Applications
tools.ietf.org/html/rfc355…
Stream Control Transmission Protocol
tools.ietf.org/html/rfc496…
Datagram Transport Layer Security
tools.ietf.org/html/rfc434…
github博客:github.com/chyingp/blo…
新浪微博:weibo.com/chyingp
站酷主頁:www.zcool.com.cn/u/346408/