WebRTC简介及其与SIP互通
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebRTC简介及其与SIP互通相关的知识,希望对你有一定的参考价值。
参考技术A 简介WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术。
这是百度百科上的介绍,维基百科也差不多。对完全小白来讲,可能不是很理解这句话。
首先,什么是实时通信?
举个直白的例子,我们平时打电话就是实时通信。现在有很多实时通信的软件,比如 丁丁、有信……这是手机app。PC客户端像Xlite、Linphone等等。这些客户端接入网络,注册到相应的服务器上就可以进行音频通信了,支持视频的还能进行视频通信。拿Xlite来说,它的信令机制采用的是sip协议。SIP协议是IMS网络广泛使用的信令协议,已经很成熟。两个uesr 通过Xlite客户端注册到sip server(如 Asterisk)上,就可以互相拨打对方的号码音视频通信了,不过就Xlite来说,语音通话是免费的,但是视频的话,是要支付money软件才提供视频功能的……
其次,为什么要提出WebRTC?
一直以来,用户如果想通过互联网进行实时通信,就需要安装软件,要么就得在浏览器中安装插件。WebRTC的宗旨是不需用户安装任何插件,直接使用浏览器就可以进行实时音视频通信。就是如果WebRTC实现了,我们打开浏览器,输入网址,登陆进去,拨打号码,就可以互相音视频了。不再需要安软件,也不需要安装额外的浏览器插件。Web版QQ大家都用过吧,现在还只能发发消息发发表情,如果引入WebRTC,那音视频传文件都不在话下,现在QQ客户端有的功能,通过网页访问都能体验,估计到时候都不愿意再装体积越来越大的QQ客户端了吧。
最后,需要知道的内容
WebRTC已经纳入HTML5标准
目前支持webrtc的浏览器有 Chrome Firefox Opera,IE不支持~
WebRTC没有指定具体的信令协议,具体的信令协议留给应用程序实现。
webRTC使用JSEP协议建立会话,什么是JSEP后面说
WebRTC采用ICE实现NAT穿越
WebRTC客户端之间可以进行点对点的媒体传输。
JSEP
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信息就可以了。
github上codelabdemo 就是不用其他信令协议,直接使用JSEP生成offer/answer信令,然后采用ws协议传输实现的。
JSEP并不是信令协议,可以在JSEP的基础上引入SIP等信令协议,使WebRTC应用功能更加完备。
WebRTC与SIP互通
要想让WebRTC与sip互通,要解决两个层面的问题:信令层和媒体层。
两个网络使用的信令机制不同,所以要进行信令的转换,才能完成媒体的协商,建立会话。媒体层要完成编码的转换,以及rtp/srtp转换等功能。这里主要说项信令层面的互通。
信令互通方案
目前sip和webrtc信令上互通有两种解决方案:
用JavaScript实现sip协议栈,webrtc应用程序基于这个协议栈开发。这样webrtc client发出的信令就是sip信令,但一般采用websocket为信令传输协议。这样的webrtc client就可以直接注册到支持ws的sip server上了。
jssip 、sipml5 都是这种解决方案。
通过转换网关实现协议的转换,从而互通。一个开源的网关项目就是 webrtc2sip。
webrtc2sip是一个功能很完善的网关,既实现了信令层,也实现了媒体层,编码转换功能很强大,也可以直接当做媒体网关,用于编解码,沟通两端的媒体。
sip.js初探
前言
项目中我们有个通过浏览器进行人工外呼的需求,这边就涉及了一些voip相关的技术栈。使用freeswitch作为软交换平台,sip(会话初始协议)来作为信令的载体,结合webrtc等相关技术实现浏览器端拨打电话的需求。sip.js是使用javascript对sip协议进行了封装,它恰恰也是结合了webrtc来帮助我们快速构建浏览器端音视频的实时传输。
关于sip协议
sip如同我们熟悉的http协议一样,是一个基于文本的应用层信令控制协议,它也是采用了请求/响应的方式进行通信。常见的请求消息包括:
- INVITE:表示主叫用户发起会话请求
- ACK:客户端向服务器端证实它已经收到了对INVITE请求的最终响应
- BYE:表示终止一个已经建立的呼叫(呼叫结束)
- CANCEL:表示在收到对请求的最终响应之前取消该请求,对于已完成的请求则无影响。
除此之外,还有其他的一些请求类型,但是并不常用,常见的基本上就是这4种。当收到请求后,服务端需要作出响应,例如客户端发起INVITE请求后,服务端开始建立会话,此时会依次发送以下响应消息,表示当前会话状态:
- 100试呼叫(Trying)
- 180/183表示正在外呼,此时可以有振铃或者早起媒体。180和183的区别,可参考这篇文章
- 200成功响应
这时候客户端需要返回一个ACK表示已成功建立会话。这里的3种响应消息,只代表着一通电话正常建立的情况,还有一些标识错误的消息,例如401未授权、486线路忙等等,可以看到其和http非常像,有标识码和描述信息。不过要注意,sip只是用于创建、修改和释放一个或多个参与者的会话,具体的选择何种会话类型、语音编解码信息、负载信息等需要通过sdp(会话描述协议)来控制。上面提到的183或是200响应状态,均会携带sdp信息,用于建立媒体通道,关于sdp报文格式,可以参考这篇文章。
深入sip.js
sip.js使用javascript对sip协议进行了封装,我们上面提到过sip只是用来控制会话的建立和修改,它并不提供会话描述、会议控制等功能,这些是通过sdp来进行描述的。并且它也不能提供媒体通道的建立,在浏览器端建立媒体通道,我们最容易想到的就是webrtc,sip正是通过webrtc来进行媒体通道的建立。有关webrtc的相关学习,我们可以参考这个。学习过webrtc之后我们知道,webrtc的客户端之间是通过建立RTCPeerConnection(简称pc)来实现音视频数据流的传输。在建立pc之前,也需要去交换一些媒体信息,我们称之为signaling过程。signaling用来交换三种信息:
- 连接控制信息:初始化或者关闭连接报告错误。
- 网络配置:对于外网,我们电脑的 IP 地址和端口。
- 多媒体数据:使用什么编码解码器,浏览器可以处理什么信息。
而webrtc已经提供api让我们快速生成这些媒体数据,即pc的createOffer方法和createAnswer方法,而他们生成的数据恰恰就是上面提到的sdp格式的文本。因此我们可以得出结论,webrtc也是通过sdp来进行媒体数据的交换,从而建立媒体通道的。至于为什么会分createOffer方法和createAnswer方法,是因为signaling采取了一种offer/answer的方式,类似于请求/问答,发起方发送offer,应答方发送answer,双方交换媒体信息之后才会完成signaling,从而建立pc。媒体数据的交换可以采取多种传输方式,sip.js中默认使用的是websocket进行传输。举个例子可以让大家更加清晰得明白使用sip.js之后一通会话的建立过程:
- 客户端发起invite请求,invite中携带了客户端的媒体数据,通过createoffer方法封装成sdp报文,一并传输给服务端
- 服务端收到请求(我们是用freeswitch),解析sdp,发起呼叫,同时向客户端发送呼叫状态的响应,如100、183、200,在183和200的时候均会携带服务端sdp,区别在于200是真正建立的通话,183可能会携带早期媒体等信息。
- 客户端默认情况会解析200状态所携带的sdp信息,至此完成signaling过程,媒体通道建立,开始对话。
总结
通过以上的介绍,我们可以看出sip和webrtc的关系,它们其实负责实现不同的功能,但又可以非常好的结合在一起构建更强大的应用。sip主要负责会话的创建和管理,而webrtc用于建立媒体通道,从而实现浏览器端音视频流的传输,而sip.js正是将两者结合,从而帮助大家快速开发出大型web端的会话应用。本文只对sip.js的原理进行部分解读,并没有介绍如何使用这些技术,具体还需要参考文档或是可以阅读源码获得更多的信息。
以上是关于WebRTC简介及其与SIP互通的主要内容,如果未能解决你的问题,请参考以下文章
技术分享| Sip与WebRTC互通-SRProxy开源库讲解
多元融合通信+可视指挥调度平台VMS/smarteye,支持SIP语音网关PBX与4G/5G执法记录仪智能安全帽等视频终端的互联互通
多元融合通信+可视指挥调度平台VMS/smarteye,支持SIP语音网关PBX与4G/5G执法记录仪智能安全帽等视频终端的互联互通
多元融合通信+可视指挥调度平台VMS/smarteye,支持SIP语音网关PBX与4G/5G执法记录仪智能安全帽等视频终端的互联互通