最近研究一下 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是一个功能很完善的网关,既实现了信令层,也实现了媒体层,编码转换功能很强大,也能够直接当作媒体网关,用于编解码,沟通两端的媒体。