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