最近研究一下 webrtc
,看了幾篇paper,以前也嘗試運行驗證了幾個demo,如今把個人理解總結到這裏。git
WebRTC,名稱源自網頁實時通訊(Web Real-Time Communication)的縮寫,是一個支持網頁瀏覽器進行實時語音對話或視頻對話的技術,是谷歌2010年以6820萬美圓收購Global IP Solutions公司而得到的一項技術。github
這是百度百科上的介紹,維基百科也差很少。對徹底小白來說,可能不是很理解這句話。web
首先,什麼是實時通訊?
舉個直白的例子,咱們平時打電話就是實時通訊。如今有不少實時通訊的軟件,好比 丁丁
、有信
……這是手機app。PC客戶端像Xlite
、Linphone
等等。這些客戶端接入網絡,註冊到相應的服務器上就能夠進行音頻通訊了,支持視頻的還能進行視頻通訊。拿Xlite
來講,它的信令機制採用的是sip協議。SIP
協議是IMS
網絡普遍使用的信令協議,已經很成熟。兩個uesr 經過Xlite
客戶端註冊到sip server
(如 Asterisk)上,就能夠互相撥打對方的號碼音視頻通訊了,不過就Xlite
來講,語音通話是免費的,可是視頻的話,是要支付money軟件才提供視頻功能的……瀏覽器
其次,爲何要提出WebRTC?
一直以來,用戶若是想經過互聯網進行實時通訊,就須要安裝軟件,要麼就得在瀏覽器中安裝插件。WebRTC的宗旨是不需用戶安裝任何插件
,直接使用瀏覽器
就能夠進行實時音視頻通訊。就是若是WebRTC實現了,咱們打開瀏覽器,輸入網址,登錄進去,撥打號碼,就能夠互相音視頻了。再也不須要安軟件,也不須要安裝額外的瀏覽器插件。Web版QQ你們都用過吧,如今還只能發發消息發發表情,若是引入WebRTC,那音視頻傳文件都不在話下,如今QQ客戶端有的功能,經過網頁訪問都能體驗,估計到時候都不肯意再裝體積愈來愈大的QQ客戶端了吧。服務器
最後,須要知道的內容websocket
Chrome
Firefox
Opera
,IE
不支持~JSEP
協議創建會話,什麼是JSEP後面說ICE
實現NAT穿越JSEP(JavaScript Session Establishment Protocol,JavaScript會話創建協議)是一個信令API,容許開發者構建更強大的應用程序以及增長在信令協議選擇上的靈活性。網絡
創建會話最關鍵的就是媒體的協商,WebRTC雖然沒有指定具體的信令協議,可是媒體協商採用了SDP
協議。JSEP是幹什麼的呢,一方面提供接口如createOffer()
供web應用程序調用生成SDP
,另外一方面提供ICE
功能接口。這些功能都由瀏覽器實現,瀏覽器
WebRTC傳輸信令(offer/answer
)採用Websocket
。
須要說明的是,若是web應用程序不使用額外的信令協議,僅使用JSEP,兩個WebRTC client (同一個WebRTC client程序,兩處登錄) 之間也是能夠創建連接的,即只要應用程序能解析用WS
傳遞過來的Offer/Answer
消息,提取出其中的SDP
和ICE
信息就能夠了。app
github上codelab
demo 就是不用其餘信令協議,直接使用JSEP生成offer/answer信令,而後採用ws協議傳輸實現的。socket
JSEP並非信令協議,能夠在JSEP的基礎上引入SIP等信令協議,使WebRTC應用功能更加完備。編碼
要想讓WebRTC與sip互通,要解決兩個層面的問題:信令層和媒體層。
兩個網絡使用的信令機制不一樣,因此要進行信令的轉換,才能完成媒體的協商,創建會話。媒體層要完成編碼的轉換,以及rtp/srtp轉換等功能。這裏主要說項信令層面的互通。
目前sip和webrtc信令上互通有兩種解決方案:
jssip
、sipml5
都是這種解決方案。webrtc2sip
。 webrtc2sip是一個功能很完善的網關,既實現了信令層,也實現了媒體層,編碼轉換功能很強大,也能夠直接當作媒體網關,用於編解碼,溝通兩端的媒體。