摘要:年月,被正式批準成為信號協(xié)議之一,并成為體系結(jié)構(gòu)的一個永久單元。與一樣,是用于最主要的信令協(xié)議之一。一般來說,要么使用實體話機,要么在系統(tǒng)上安裝基于的客戶端程序。實體話機硬件成本高,基于的客戶端往往兼容性差,無法跨平臺,易被殺毒軟件查殺。
0 閱前須知
本文并不是教程,只是實現(xiàn)方案
我只是從WEB端考慮這個問題,實際還需要后端sip服務(wù)器的配合
jsSIP有個非常不錯的在線demo, 可以去哪里玩耍,很好玩呢 try jssip
1. 技術(shù)簡介WebRTC: WebRTC,名稱源自網(wǎng)頁即時通信(英語:Web Real-Time Communication)的縮寫,是一個支持網(wǎng)頁瀏覽器進行實時語音對話或視頻對話的API。它于2011年6月1日開源并在Google、Mozilla、Opera支持下被納入萬維網(wǎng)聯(lián)盟的W3C推薦標準
SIP: 會話發(fā)起協(xié)議(Session Initiation Protocol,縮寫SIP)是一個由IETF MMUSIC工作組開發(fā)的協(xié)議,作為標準被提議用于創(chuàng)建,修改和終止包括視頻,語音,即時通信,在線游戲和虛擬現(xiàn)實等多種多媒體元素在內(nèi)的交互式用戶會話。2000年11月,SIP被正式批準成為3GPP信號協(xié)議之一,并成為IMS體系結(jié)構(gòu)的一個永久單元。SIP與H.323一樣,是用于VoIP最主要的信令協(xié)議之一。
一般來說,要么使用實體話機,要么在系統(tǒng)上安裝基于sip的客戶端程序。實體話機硬件成本高,基于sip的客戶端往往兼容性差,無法跨平臺,易被殺毒軟件查殺。
而WebRTC或許是更好的解決方案,只要一個瀏覽器就可以實時語音視頻通話,這是很不錯的解決方案。WebSocket可以用來傳遞sip信令,而WebRTC用來實時傳輸語音視頻流。
2. 前端WebRTC實現(xiàn)方案其實我們不需要去自己處理WebRTC的相關(guān)方法,或者去處理視頻或者媒體流。市面上已經(jīng)有不錯的模塊可供選擇。
2.1 jsSIPjsSIP是JavaScript SIP 庫
功能特點如下:
可以在瀏覽器或者Nodejs中運行
使用WebSocket傳遞SIP協(xié)議
視頻音頻實時消息使用WebRTC
非常輕量
100%純JavaScript
使用簡單并且具有強大的Api
服務(wù)端支持 OverSIP, Kamailio, Asterisk, OfficeSIP,reSIProcate,F(xiàn)rafos ABC SBC,TekSIP
是RFC 7118 and OverSIP的作者寫的
下面是使用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);2.2 SIP.js
sip.js項目實際是fork自jsSIP的,這里主要介紹它的服務(wù)端支持情況。其他接口自己自行查閱
FreeSWITCH
Asterisk
OnSIP
FreeSWITCH Legacy
3. 平臺考量由于WebRTC對瀏覽器有較高的要求,你可以看看下圖,哪些瀏覽器支持WebRTC, 所有IE瀏覽器都不行,chrome系支持情況不錯。
3.1 考量標準跨平臺
兼容性
體積
集成性
硬件要求
開發(fā)成本
3.2 考量表格種類 | 適用平臺 | 優(yōu)點 | 缺點 |
---|---|---|---|
基于electron開發(fā)的桌面客戶端 | window, mac, linux | 跨平臺,兼容好 | 要下載安裝,體積大(壓縮后至少48MB),對電腦性能有要求 |
開發(fā)js sdk | 現(xiàn)代瀏覽器 | 體積小,容易第三方集成 | 兼容差(因為涉及到webRTC, IE11以及以都不行,對宿主環(huán)境要求高),客戶集成需要開發(fā)量 |
開發(fā)谷歌瀏覽器擴展 | 谷歌瀏覽器 | 體積小 | 兼容差(僅限類chrome瀏覽器) |
Js SIP Getting Started
120行代碼實現(xiàn) 瀏覽器WebRTC視頻聊天
SIP協(xié)議狀態(tài)碼:
5 常見問題 422: "Session Interval Too Small"jsSIP默認攜帶Session-Expires: 90的頭部信息,如果這個超時字段小于服務(wù)端的設(shè)定值,那么就會得到如下422的響應(yīng)。參見SIP協(xié)議狀態(tài)碼:, 可以在call請求中設(shè)置sessionTimersExpires, 使其超過服務(wù)端的設(shè)定值即可
call(targer, options ) option.sessionTimersExpires Number (in seconds) for the default Session Timers interval (default value is 90, do not set a lower value).6 最后,你我共勉
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/90363.html
摘要:為了使連接起作用,對等方必須獲取元數(shù)據(jù)的本地媒體條件例如,分辨率和編解碼器功能,并收集應(yīng)用程序主機的可能網(wǎng)絡(luò)地址,用于來回傳遞這些關(guān)鍵信息的信令機制并未內(nèi)置到中。所有特定于多媒體的元數(shù)據(jù)都使用協(xié)議傳遞。 這是專門探索 JavaScript 及其所構(gòu)建的組件的系列文章的第 18 篇。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! 如果你錯過了前面的章節(jié),可以在這里...
摘要:本質(zhì)上允許網(wǎng)頁程序創(chuàng)建點對點通信,我們將會在隨后的章節(jié)中進行介紹。信令涉及網(wǎng)絡(luò)檢索和穿透,會話創(chuàng)建及管理,通信安全,媒體功能元數(shù)據(jù)和調(diào)制及錯誤處理。這樣就會完全建立及激活節(jié)點間的網(wǎng)絡(luò)套接字會話。 原文請查閱這里,略有刪減,本文采用知識共享署名 4.0 國際許可協(xié)議共享,BY Troland。 這是 JavaScript 工作原理第十八章。 概述 何為 WebRTC ?首先,字面上已經(jīng)...
摘要:隨著通信的發(fā)展,實時音視頻服務(wù)將進一步覆蓋更多的生活場景。什么是實時通訊,我們很容易把和混淆。另外的延遲是毫秒級,在正常的網(wǎng)絡(luò)情況下,延遲在之間,可以多方通話實時互動。這篇文章主要是圍繞告訴大家什么是,能解決什么問題的普及貼。2020年初爆發(fā)的疫情,催生了在線教育、視頻會議、遠程醫(yī)療等實時音視頻應(yīng)用的大規(guī)模增長,也使得服務(wù)于這些場景背后的底層框架RTC技術(shù)站上了風口。早在 2010 年,Go...
摘要:在處于使用了設(shè)備的私有網(wǎng)絡(luò)中的主機之間需要建立連接時需要使用穿越技術(shù)。目前已經(jīng)有很多穿越技術(shù),但沒有一項是完美的,因為的行為是非標準化的。 什么是WebRTC? 眾所周知,瀏覽器本身不支持相互之間直接建立信道進行通信,都是通過服務(wù)器進行中轉(zhuǎn)。比如現(xiàn)在有兩個客戶端,甲和乙,他們倆想要通信,首先需要甲和服務(wù)器、乙和服務(wù)器之間建立信道。甲給乙發(fā)送消息時,甲先將消息發(fā)送到服務(wù)器上,服務(wù)器對甲...
閱讀 1916·2021-09-22 15:45
閱讀 1724·2019-08-30 15:55
閱讀 1885·2019-08-29 11:16
閱讀 3368·2019-08-26 11:44
閱讀 790·2019-08-23 17:58
閱讀 2747·2019-08-23 12:25
閱讀 1696·2019-08-22 17:15
閱讀 3712·2019-08-22 16:09