WebRtc与SIP
最近研究一下 webrtc ,看了几篇paper,之前也尝试运行验证了几个demo,现在把我的理解总结到这里。
WebRTC
简介
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的浏览器有
ChromeFirefoxOpera,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是一个功能很完善的网关,既实现了信令层,也实现了媒体层,编码转换功能很强大,也可以直接当做媒体网关,用于编解码,沟通两端的媒体。
WebRtc与SIP的更多相关文章
- WebRTC clientICE 延迟问题
本文原创自 http://blog.csdn.net/voipmaker 转载注明出处. 近期在优化WebRTCclient呼叫延迟问题.原因是ICE协议栈在收集地址到探測协商过程花费非常长时间.这 ...
- [转]What is a WebRTC Gateway anyway? (Lorenzo Miniero)
[转]What is a WebRTC Gateway anyway? (Lorenzo Miniero) https://webrtchacks.com/webrtc-gw/ As I mentio ...
- 为WebRTC 应用部署Turn Server
部署WebRTC 或 SIP p2p 方案时经常会遇到p2p 无法穿透的环境, 这时就是TunServer 的用武之地了. 这里我们使用turnserver-0.7.3 下载confuse依赖库 wg ...
- Open Source VOIP applications, both clients and servers (开源sip server & sip client 和开发库)
SIP Proxies SBO SIP Proxy Bypass All types of Internet Firewall JAIN-SIP Proxy Mini-SIP-Proxy A very ...
- SIP SDP RTSP RTP RTCP webrtc
rfc1889 rfc2326 rfc3261 rfc3550 rfc3856 rfc6120. SIP SDP RTSP RTP RTCP,就像他们出现的顺序一样,他们在实际应用中的启用 ...
- Android IOS WebRTC 音视频开发总结(十四)-- sip和xmpp异同
这篇文章主要介绍XMPP与SIP,很多人容易混淆这两个概念,转载请说明出处(博客园RTC.Blacker). 简介:XMPP和SIP都是应用层协议,主要用于互联网上发送语音和即时通讯. SIP在RFC ...
- 使用WebRTC搭建前端视频聊天室——信令篇
博客原文地址 建议看这篇之前先看一下使用WebRTC搭建前端视频聊天室——入门篇 如果需要搭建实例的话可以参照SkyRTC-demo:github地址 其中使用了两个库:SkyRTC(github地址 ...
- 使用WebRTC搭建前端视频聊天室——入门篇
http://segmentfault.com/a/1190000000436544 什么是WebRTC? 众所周知,浏览器本身不支持相互之间直接建立信道进行通信,都是通过服务器进行中转.比如现在有两 ...
- Android IOS WebRTC 音视频开发总结(八十)-- NUBOMEDIA: 首个WebRTC PaaS
本文主要介绍NUBOMEDIA(我们翻译和整理的,译者:jiangpeng,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:b ...
随机推荐
- 1066. [SCOI2007]蜥蜴【最大流】
Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃 到边界外. 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到 ...
- 2038. [国家集训队]小Z的袜子【莫队】
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只 ...
- php 添加 redis 扩展
Windows下PHP安装Redis扩展的具体步骤方法 下面我们就结合详细的图文,给大家介绍Windows下PHP安装Redis扩展的方法: 首先我们打开这个上面给出的下载链接地址,界面如下: 这里我 ...
- TensorFlow函数(六)初始值生成函数
1.常量生成函数 tf.constant(value, dtype) 生成一个初始值为常量value的数组 value:指定的常量 dtype:数据类型 tf.zeros(shape, dtype) ...
- 搭建高可用mysql系列(2)-- Percona XtraDB Cluster 安装
本文主要介绍在 centos 下 Percona XtraDB Cluster(下文简称PXC) 的安装, 个人的系统版本信息如下: [root@c2-d09 worker]# more /etc/r ...
- Day6 jQuery
元素的操作 dom对象和jQuery对象 dom对象:原生js获取节点 jQuery对象:通过jQuery获取节点对象 //dom对象 var oP = document.getElementById ...
- unittest中setUp与setUpClass执行顺序
最基础的概念 1.setUP(self)看下面的执行顺序 import unittest class TestGo(unittest.TestCase): def setUp(self): print ...
- 论文笔记 Robust face landmark estimation under occlusion
1. Abstract 现实世界中的人脸很多时候都存在遮挡以及大的形状变化,而目前的人脸关键点检测方法在这种情况下表现欠佳, 因为它们未能提供一种系统的方法来处理异常.因而authors提出一种新的方 ...
- Animate.css介绍
Animate.css简介 animate.css 动画库,预设了抖动(shake).闪烁(flash).弹跳(bounce).翻转(flip).旋转(rotateIn/rotateOut).淡入淡出 ...
- pipeline 发布war包
pipline 写法分为 脚本式和声明式,下面采用脚本式编程: node { stage('checkout') { echo '开始检出代码' checkout([$class: 'GitSCM', ...