WebRTC介紹

1、 WebRTC是什么?
2、 WebRTC能做什么?
3、 常用API
4、 基本原理

WebRTC是什么?

WebRTC全稱是Web Real-Time communication,是一種實(shí)時(shí)音視頻通訊技術(shù),通過WebRTC可以使瀏覽器之間建立點(diǎn)對(duì)點(diǎn)的連接,并實(shí)時(shí)傳輸數(shù)據(jù)。


image.png

通過上述圖片可以看到【瀏覽器M】和【瀏覽器L】可以在不依賴于Web服務(wù)器的情況下點(diǎn)對(duì)點(diǎn)實(shí)時(shí)傳輸數(shù)據(jù)。上圖中的Web服務(wù)器不是用于數(shù)據(jù)傳輸,而是用于協(xié)助【瀏覽器M】和【瀏覽器L】進(jìn)行連接,進(jìn)行協(xié)助連接的服務(wù)器也叫【信令服務(wù)器】。

WebRTC能做什么?

  • 音視頻通話
    目前WebRTC應(yīng)用得最廣泛的場景就是音視頻通話,比如直播,在線課堂,聊天。


    image.png
  • 屏幕分享
    也可以通過WebRTC在PC瀏覽器上實(shí)現(xiàn)屏幕分享。
image.png
  • 文件傳輸
    使用WebRTC傳輸數(shù)據(jù)時(shí),數(shù)據(jù)可以是任意的二進(jìn)制數(shù)據(jù),所以在瀏覽器和瀏覽器之間能直接傳輸文件。
  • 互動(dòng)白板
    以在線課堂為例,【教師】在瀏覽器的白板中繪制內(nèi)容,使用WebRTC將繪制的內(nèi)容逐幀實(shí)時(shí)傳輸?shù)健緦W(xué)生】的瀏覽器并渲染。


    image.png

常用API

  • 捕獲麥克風(fēng)和攝像頭
navigator.mediaDevices.getUserMedia({ audio: true, video: true })

  • 列舉出支持的媒體類型
navigator.mediaDevices.enumerateDevices()
  • 屏幕分享
navigator.mediaDevices.getDisplayMedia()
  • 音視頻錄制
new MediaRecorder(stream[, options])
  • P2P的連接管理
new RTCPeerConnection([configuration]);

WebRTC 原理

WebRTC主要分為四部分,分別是信令、建立連接、安全加密、數(shù)據(jù)傳輸,下面分別介紹四個(gè)步驟。

一(信令)

信令是指通信兩端基于交換的數(shù)據(jù)進(jìn)行協(xié)商。通俗的解釋就是在互聯(lián)網(wǎng)中兩個(gè)瀏覽器之間如果要進(jìn)行點(diǎn)對(duì)點(diǎn)的數(shù)據(jù)傳輸,連接雙方需要交換對(duì)方的一些基本信息,基本信息包括對(duì)方的地址,帶寬,數(shù)據(jù)的編解碼格式,是否支持音視頻等等信息。

二(建立連接)

通信雙方的基本信息完成交換后,瀏覽器雙方開始建立連接。在網(wǎng)絡(luò)中,瀏覽器雙方可能在同一個(gè)內(nèi)網(wǎng),可能不在同一個(gè)內(nèi)網(wǎng),中間可能還隔著交換機(jī)、路由器,還會(huì)存在防火墻。在網(wǎng)絡(luò)的環(huán)境復(fù)雜的情況下,通信的雙方需要找到一條最佳路徑傳輸數(shù)據(jù)建立連接。建立連接主要使用的協(xié)議就是ICE協(xié)議?!綢CE協(xié)議】又需要依賴【STUN協(xié)議】和【TURN協(xié)議】。

  • 【STUN協(xié)議】功能主要是探測主機(jī)的公網(wǎng)ip和端口。
  • 【TURN協(xié)議】是一個(gè)轉(zhuǎn)發(fā)數(shù)據(jù)的中繼服務(wù)器。
  • 【ICE協(xié)議】被稱為交互式連接建立協(xié)議,主要用于NAT穿透,建立通信兩端的多媒體數(shù)據(jù)流。ICE協(xié)議的基本思路是獲取一系列可以訪問的終端的網(wǎng)絡(luò)地址,按照優(yōu)先級(jí)發(fā)出UDP請求進(jìn)行探測,如果探測成功,就使用此地址作為數(shù)據(jù)傳輸?shù)牡刂贰?/li>

三(安全加密)

在WebRTC中,為了保證媒體傳輸?shù)陌踩?,引入了【DTLS】作為傳輸加密協(xié)議,DTLS原理和作用類似于SSL/TLS,【DTLS】主要適用于UDP通信過程的加密,SSL/TLS主要適用于TCP通信過程的加密。
在WebRTC中,音視頻數(shù)據(jù)傳輸是使用RTP協(xié)議,然后通過 DTLS 協(xié)商出加密密鑰之后,RTP 也需要升級(jí)為 SRTP,通過密鑰加密后進(jìn)行通信。協(xié)議棧如下圖所示:


image.png

四(數(shù)據(jù)傳輸)

上面說了對(duì)數(shù)據(jù)加密是使用DTLS,傳輸數(shù)據(jù)則分為兩種情況,一種是傳輸音視頻數(shù)據(jù),另一種是傳輸自定義應(yīng)用數(shù)據(jù)。

1、音視頻數(shù)據(jù)傳輸,主要使用RTP/SRTP、RTCP/SRTCP協(xié)議

  • RTP協(xié)議:用來傳輸實(shí)時(shí)行較高的數(shù)據(jù)。
  • RTCP協(xié)議:用來監(jiān)控?cái)?shù)據(jù)傳輸過程中的傳輸質(zhì)量,并給予數(shù)據(jù)發(fā)送方反饋。
    SRTP 和 SRTCP協(xié)議就是在RTP 和 RTCP的基礎(chǔ)上加了一個(gè)S,可以理解為SRTP = RTP + DTLS,SRTCP = RTCP + DTLS。
    2、自定義應(yīng)用數(shù)據(jù),主要使用SCTP協(xié)議
    之前介紹過,RTP/RTCP主要用來傳輸音視頻,是為了流媒體設(shè)計(jì)的。而對(duì)于自定義應(yīng)用數(shù)據(jù)的傳輸,WebRTC中使用了SCTP協(xié)議。

結(jié)尾

前面主要對(duì)WebRTC做了一個(gè)簡單介紹,跳過了很多細(xì)節(jié),有些地方可能不夠嚴(yán)謹(jǐn),如果有興趣的讀者,可以對(duì)技術(shù)做進(jìn)一步研究,比如:
1、信令如何進(jìn)行協(xié)商?
2、傳輸層用了UDP,UDP本身是不可靠的,那么,音視頻數(shù)據(jù)、自定義用戶數(shù)據(jù)的時(shí)序、質(zhì)量是如何保證的?
3、RTP用來傳遞音視頻數(shù)據(jù),為什么還需要有RTCP?
4、SCTP如何從協(xié)議層面兼顧傳輸?shù)男屎唾|(zhì)量?如何實(shí)現(xiàn)自定義數(shù)據(jù)的高效傳遞?
5、ICE協(xié)議的完整流程。
6、其他。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容