WebRTC
: WebRTC,名稱源自網頁即時通訊
(英語:Web Real-Time Communication)的縮寫,是一個支持網頁瀏覽器進行實時語音對話或視頻對話的API。它於2011年6月1日開源並在Google、Mozilla、Opera支持下被歸入萬維網聯盟的W3C推薦標準SIP
:會話發起協議
(Session Initiation Protocol,縮寫SIP)是一個由IETF MMUSIC工做組開發的協議,做爲標準被提議用於建立,修改和終止包括視頻,語音,即時通訊,在線遊戲和虛擬現實等多種多媒體元素在內的交互式用戶會話。2000年11月,SIP被正式批准成爲3GPP信號協議之一,併成爲IMS體系結構的一個永久單元。SIP與H.323同樣,是用於VoIP最主要的信令協議之一。
通常來講,要麼使用實體話機,要麼在系統上安裝基於sip的客戶端程序。實體話機硬件成本高,基於sip的客戶端每每兼容性差,沒法跨平臺,易被殺毒軟件查殺。前端
而WebRTC
或許是更好的解決方案,只要一個瀏覽器就能夠實時語音視頻通話,這是很不錯的解決方案。WebSocket能夠用來傳遞sip信令,而WebRTC用來實時傳輸語音視頻流。linux
其實咱們不須要去本身處理WebRTC的相關方法,或者去處理視頻或者媒體流。市面上已經有不錯的模塊可供選擇。web
jsSIP是JavaScript SIP 庫
chrome
功能特色以下:segmentfault
下面是使用JsSIP打電話的例子,很是簡單吧後端
// Create our JsSIP instance and run it: var socket = new JsSIP.WebSocketInterface('wss://sip.myhost.com'); var configuration = { sockets : [ socket ], uri : 'sip:alice@example.com', password : 'superpassword' }; var ua = new JsSIP.UA(configuration); ua.start(); // Register callbacks to desired call events var eventHandlers = { 'progress': function(e) { console.log('call is in progress'); }, 'failed': function(e) { console.log('call failed with cause: '+ e.data.cause); }, 'ended': function(e) { console.log('call ended with cause: '+ e.data.cause); }, 'confirmed': function(e) { console.log('call confirmed'); } }; var options = { 'eventHandlers' : eventHandlers, 'mediaConstraints' : { 'audio': true, 'video': true } }; var session = ua.call('sip:bob@example.com', options);
sip.js項目實際是fork自jsSIP的,這裏主要介紹它的服務端支持狀況。其餘接口本身自行查閱瀏覽器
因爲WebRTC對瀏覽器有較高的要求,你能夠看看下圖,哪些瀏覽器支持WebRTC, 全部IE瀏覽器都不行,chrome系支持狀況不錯。服務器
種類 | 適用平臺 | 優勢 | 缺點 |
---|---|---|---|
基於electron開發的桌面客戶端 | window, mac, linux | 跨平臺,兼容好 | 要下載安裝,體積大(壓縮後至少48MB),對電腦性能有要求 |
開發js sdk | 現代瀏覽器 | 體積小,容易第三方集成 | 兼容差(由於涉及到webRTC, IE11以及以都不行,對宿主環境要求高),客戶集成須要開發量 |
開發谷歌瀏覽器擴展 | 谷歌瀏覽器 | 體積小 | 兼容差(僅限類chrome瀏覽器) |
jsSIP默認攜帶Session-Expires: 90
的頭部信息,若是這個超時字段小於服務端的設定值,那麼就會獲得以下422的響應。參見SIP協議狀態碼:, 能夠在call請求中設置sessionTimersExpires
, 使其超過服務端的設定值便可session
call(targer, options ) option.sessionTimersExpires Number (in seconds) for the default Session Timers interval (default value is 90, do not set a lower value).