最近研究一下 webrtc ,看了几篇paper,之前也尝试运行验证了几个demo,现在把我的理解总结到这里。

WebRTC

简介

WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术。

这是百度百科上的介绍,维基百科也差不多。对完全小白来讲,可能不是很理解这句话。

首先,什么是实时通信?
举个直白的例子,我们平时打电话就是实时通信。现在有很多实时通信的软件,比如 丁丁有信……这是手机app。PC客户端像XliteLinphone等等。这些客户端接入网络,注册到相应的服务器上就可以进行音频通信了,支持视频的还能进行视频通信。拿Xlite来说,它的信令机制采用的是sip协议。SIP协议是IMS网络广泛使用的信令协议,已经很成熟。两个uesr 通过Xlite客户端注册到sip server(如 Asterisk)上,就可以互相拨打对方的号码音视频通信了,不过就Xlite来说,语音通话是免费的,但是视频的话,是要支付money软件才提供视频功能的……

其次,为什么要提出WebRTC?
一直以来,用户如果想通过互联网进行实时通信,就需要安装软件,要么就得在浏览器中安装插件。WebRTC的宗旨是不需用户安装任何插件,直接使用浏览器就可以进行实时音视频通信。就是如果WebRTC实现了,我们打开浏览器,输入网址,登陆进去,拨打号码,就可以互相音视频了。不再需要安软件,也不需要安装额外的浏览器插件。Web版QQ大家都用过吧,现在还只能发发消息发发表情,如果引入WebRTC,那音视频传文件都不在话下,现在QQ客户端有的功能,通过网页访问都能体验,估计到时候都不愿意再装体积越来越大的QQ客户端了吧。

最后,需要知道的内容

  • WebRTC已经纳入HTML5标准
  • 目前支持webrtc的浏览器有 Chrome Firefox OperaIE不支持~
  • 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消息,提取出其中的SDPICE信息就可以了。

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上了。
    jssipsipml5 都是这种解决方案。
  • 通过转换网关实现协议的转换,从而互通。一个开源的网关项目就是 webrtc2sip
    webrtc2sip是一个功能很完善的网关,既实现了信令层,也实现了媒体层,编码转换功能很强大,也可以直接当做媒体网关,用于编解码,沟通两端的媒体。

WebRtc与SIP的更多相关文章

  1. WebRTC clientICE 延迟问题

    本文原创自 http://blog.csdn.net/voipmaker  转载注明出处. 近期在优化WebRTCclient呼叫延迟问题.原因是ICE协议栈在收集地址到探測协商过程花费非常长时间.这 ...

  2. [转]What is a WebRTC Gateway anyway? (Lorenzo Miniero)

    [转]What is a WebRTC Gateway anyway? (Lorenzo Miniero) https://webrtchacks.com/webrtc-gw/ As I mentio ...

  3. 为WebRTC 应用部署Turn Server

    部署WebRTC 或 SIP p2p 方案时经常会遇到p2p 无法穿透的环境, 这时就是TunServer 的用武之地了. 这里我们使用turnserver-0.7.3 下载confuse依赖库 wg ...

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

  5. SIP SDP RTSP RTP RTCP webrtc

    rfc1889  rfc2326  rfc3261  rfc3550  rfc3856  rfc6120. SIP SDP RTSP  RTP RTCP,就像他们出现的顺序一样,他们在实际应用中的启用 ...

  6. Android IOS WebRTC 音视频开发总结(十四)-- sip和xmpp异同

    这篇文章主要介绍XMPP与SIP,很多人容易混淆这两个概念,转载请说明出处(博客园RTC.Blacker). 简介:XMPP和SIP都是应用层协议,主要用于互联网上发送语音和即时通讯. SIP在RFC ...

  7. 使用WebRTC搭建前端视频聊天室——信令篇

    博客原文地址 建议看这篇之前先看一下使用WebRTC搭建前端视频聊天室——入门篇 如果需要搭建实例的话可以参照SkyRTC-demo:github地址 其中使用了两个库:SkyRTC(github地址 ...

  8. 使用WebRTC搭建前端视频聊天室——入门篇

    http://segmentfault.com/a/1190000000436544 什么是WebRTC? 众所周知,浏览器本身不支持相互之间直接建立信道进行通信,都是通过服务器进行中转.比如现在有两 ...

  9. Android IOS WebRTC 音视频开发总结(八十)-- NUBOMEDIA: 首个WebRTC PaaS

    本文主要介绍NUBOMEDIA(我们翻译和整理的,译者:jiangpeng,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:b ...

随机推荐

  1. linux查看主板型号及内存硬件信息,及硬盘测速

    查看主板型号: sudo  dmidecode |grep -A16 "System Information$" 内存槽及内存条: sudo  dmidecode |grep -A ...

  2. Operating System-Thread(3)用户空间和内核空间实现线程

    http://www.cnblogs.com/Brake/archive/2015/12/02/Operating_System_Thread_Part3.html 本文主要内容: 操作系统用户空间和 ...

  3. 使用 BEGINCONTENT() 和 ENDCONTENT() 设定 YII 的 LAYOUTS

    Yii 的 views/layouts 是用来放置 layouts 的目录,在默认的情况下会有 main.php 和 column1.php 和 column2.php. main.php 内容定义了 ...

  4. c++ 浅拷贝和深拷贝 指针和引用的区别 malloc(free)和new(delete)的区别 重载重写重定义

    4.malloc(free)和new(delete)的区别 malloc()函数: 1.1 malloc的全称是memory allocation,中文叫动态内存分配. 原型:extern void ...

  5. 使用JS获取上一页的url地址

    一般来说每个页面上面都有一个返回按钮,用来返回上一页,代码如下: <a href="javascript:history.go(-1)" class="jsBack ...

  6. 单链表(c语言实现)贼详细

    直接上代码吧 #include<stdio.h> #include<malloc.h> /* 单链表特点: 它是一种动态的储存结构,链表中每个节点占用的储存空间不是预先分配的, ...

  7. 404 Note Found队Beta3

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  8. FPGA之CORDIC算法实现_理论篇(上)

    关于cordic的算法原理核心思想就是规定好旋转角度,然后通过不停迭代逐步逼近的思想来实现数学求解,网上关于这部分的资料非常多,主要可以参考: 1)https://blog.csdn.net/qq_3 ...

  9. struts2第三天——值栈

    大致内容: ognl概述 ognl入门 值栈 一.OGNL概述 OGNL,全称为Object-Graph Navigation Language,对象图导航语言 它是一个功能强大的表达式语言,用来获取 ...

  10. JavaWeb基础—监听器Listener

    javaWeb三大组件: servlet listener(用的不多) filter 什么叫监听器: 初次相见:AWT 二次相见:SAX(XML解析时)Bundle 绑定 监听器是一个接口,内容由我们 ...