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).