认识webRTC
什么是 WebRTC
2010 年 5 月,谷歌收购了 Global IP Solutions(简称 GIPS),这是一家专注于 VoIP 和视频会议软件的公司,已开发出 RTC 所需的多项关键组件,如编解码器和回声消除技术。谷歌随后将 GIPS 技术开源,并与 IETF 和 W3C 等标准机构合作,以确保行业共识。2011 年 5 月,谷歌发布了一个名为 WebRTC 的开源项目,旨在实现基于浏览器的实时通信。 它于2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W3C推荐标准。此后,相关协议在 IETF 的标准化工作以及浏览器 API 在 W3C 的标准化工作持续进行。
WebRTC,名称源自网页即时通信(英语:Web Real-Time Communication)的缩写,是一个支持浏览器或移动应用程序(安卓苹果)进行实时点对点的音频、视频和数据通信的开放标准 API。
WebRTC 的独特之处在于,一旦连接建立,数据便可以直接在浏览器之间实时传输,无需经过服务器。通过绕过服务器,减少了延迟,因为数据不必先发送到服务器,这使得 WebRTC 非常适合用于音频和视频的交换。
WebRTC 如今已嵌入所有现代浏览器中,开发者可以利用 WebRTC 的 JavaScript API 为浏览器用户构建应用程序。当然 WebRTC 现在也被很多编程语言所支持,包括但不限于 C、C++、Go、Java、PHP、JavaScript 等等,因此可以实现跨平台的实时通信方案。
WebRTC 的工作流程

WebRTC 的工作流程比 Websocket、HTTP 协议来说相对复杂一些,它用到了很多个协议一起协同工作。
假设有两个对等方,A和B,他们使用WebRTC进行双向媒体流传输(例如,视频聊天应用)。当A想要呼叫B时,具体流程如下:
生成SDP Offer:A的应用程序首先需要生成一个SDP Offer。SDP(Session Description Protocol)Offer包含了A应用程序想要建立的会话信息,例如使用的编解码器类型、这是音频还是视频会话等内容。SDP Offer不包括ICE候选,而仅包含会话描述信息。
收集ICE候选者:在生成SDP Offer后,A的应用程序会开始收集ICE候选者。为了收集候选者,A的应用程序会向STUN服务器发送请求。STUN服务器返回A的公共IP地址和端口,A的应用程序将这些信息作为候选者添加到ICE候选者列表中。A的应用程序也会收集本地网络的候选信息(如本地IP/端口对)。这些候选者是为了后续的连接性检查。
通过信令通道传递SDP Offer:A生成了SDP Offer和相应的ICE候选者列表后,会通过一个信令通道(如HTTPS、WebSocket等)将SDP Offer传递给B的应用程序。需要注意的是,ICE候选者可以在这一步通过信令通道单独传递,通常是在SDP Offer之后或者与Offer一起传输。
生成SDP Answer:B的应用程序接收到SDP Offer后,进行以下处理:
B的应用程序会生成一个SDP Answer,作为对SDP Offer的回应。
同时,B的应用程序会收集自己的ICE候选者。类似于A的做法,B会向STUN服务器发出请求并收集公共IP地址/端口,形成自己的候选者列表。
通过信令通道传递SDP Answer和ICE候选者:B的应用程序将SDP Answer和自己的ICE候选者列表通过信令通道传递给A的应用程序。
连接性检查和媒体传输:在双方互相交换SDP Offer和Answer后,每个应用程序会开始连接性检查。双方应用程序的ICE协议会使用对方提供的候选IP/端口对,发送STUN请求进行连接性验证。如果请求得到了响应,相关的候选者会被认为是有效的,并标记为可用。
选择最终的IP/端口对:经过一系列的连接性检查后,A和B将协商并选择一个有效的IP/端口对,用于实际的媒体流传输。
使用TURN服务器(如有必要):如果任何一方的应用程序无法找到一个有效的IP/端口对,则会向TURN服务器发送请求,以获取一个公共的中继地址。TURN服务器返回的中继地址将会用于建立连接,并通过信令通道进行交换。
下方是一个直观的通信过程:

整个 WebRTC 通信过程中会用到如下的服务器:
信令(Signaling)服务器:用于交换信令信息,WebRTC 没有规定交换信令的方式,一般可用的交换方式是 HTTP、Websocket、MQTT 等等。
STUN 服务器:帮助客户端发现它们的公共IP地址和NAT类型,并为点对点连接提供网络信息。
TURN 服务器(可选):在STUN无法穿透NAT或防火墙时,作为中继服务器转发数据流。TURN服务器提供了一种备用机制,确保即使在极为复杂的网络环境下,WebRTC的点对点连接也能够顺利进行。
认识webRTC的更多相关文章
- 使用WebRTC搭建前端视频聊天室——数据通道篇
本文翻译自WebRTC data channels 在两个浏览器中,为聊天.游戏.或是文件传输等需求发送信息是十分复杂的.通常情况下,我们需要建立一台服务器来转发数据,当然规模比较大的情况下,会扩展成 ...
- 使用WebRTC搭建前端视频聊天室——点对点通信篇
WebRTC给我们带来了浏览器中的视频.音频聊天体验.但个人认为,它最实用的特性莫过于DataChannel——在浏览器之间建立一个点对点的数据通道.在DataChannel之前,浏览器到浏览器的数据 ...
- 使用WebRTC搭建前端视频聊天室——信令篇
博客原文地址 建议看这篇之前先看一下使用WebRTC搭建前端视频聊天室——入门篇 如果需要搭建实例的话可以参照SkyRTC-demo:github地址 其中使用了两个库:SkyRTC(github地址 ...
- 使用WebRTC搭建前端视频聊天室——入门篇
http://segmentfault.com/a/1190000000436544 什么是WebRTC? 众所周知,浏览器本身不支持相互之间直接建立信道进行通信,都是通过服务器进行中转.比如现在有两 ...
- WebRTC的一个例子
内容引自:一个WebRTC实现获取内网IP的例子(穿透NAT) 网页代码直接复制到下面(如果以上链接被墙,可以直接将下面代码保存文件,然后在浏览器打开即可,不支持IE浏览器): <!doctyp ...
- WebRTC音频预处理单元APM的整体编译及使用
正文 行的gnu静态库链接路径是针对NDK版本 r8d 的,如读者版本不匹配,请自行找到 libgnustl_static.a 静态库的路径进行替换. 3)本示例并不打算编译 WebRTC 的测试工程 ...
- 单独编译使用WebRTC的音频处理模块
块,每块个点,(12*64=768采样)即AEC-PC仅能处理48ms的单声道16kHz延迟的数据,而 - 加载编译好的NS模块动态库 接下来只需要按照 此文 的描述在 android 的JAVA代码 ...
- webrtc中APM(AudioProcessing module)的使用2
这个其实就是从Audio_processing.h中拿出来的. APM should be placed in the signal chain as close to the audio hardw ...
- webrtc中APM(AudioProcessing module)的使用
一,实例化和配置 AudioProcessing* apm = AudioProcessing::Create(0); //这里的0指的是channelID,只是一个标注那个通道的表示 apm-> ...
- WebRTC通信流程
WebRTC是HTML5支持的重要特性之一,有了它,不再需要借助音视频相关的客户端,直接通过浏览器的Web页面就可以实现音视频对聊功能.而且WebRTC项目是开源的,我们可以借助WebRTC源码快速构 ...
随机推荐
- Qt编写地图综合应用43-点聚合
一.前言 点聚合的出现就是为了减少一个可视区域内,密密麻麻绘制的太多的标注点.在地图上查询结果通常以标记点的形式展现,但是如果标记点较多,不仅会大大增加客户端的渲染时间,让客户端变得很卡,而且会让人产 ...
- eclipse中汉字横着的问题解决
最近在eclipse中加上中午注释,出现那种汉字是横着的情况,解决方案如下: 方法一: 同一种字体有两种显示方式,比如Fixedsys Excelsior 3.01和@Fixedsys Excelsi ...
- JVM实战—7.如何模拟GC场景并阅读GC日志
大纲 1.动手模拟出频繁Young GC的场景 2.JVM的Young GC日志应该怎么看 3.代码模拟动态年龄判定规则进入老年代 4.代码模拟S区放不下部分进入老年代 5.JVM的Full GC日志 ...
- Solution Set - 冬日纪行(前半)
目录 0.「集训队互测 2018」「LOJ #2504」小 H 爱染色 ✡️ 1.「LOJ #6402」yww 与校门外的树 2.「集训队互测 2019」「LOJ #3075」组合数求和 ✡️ 3.「 ...
- h5 页面播放base64编码的audio数据
例子: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- w3cschool-微信小程序开发文档-指南
https://www.w3cschool.cn/weixinapp/9wou1q8j.html https://www.w3cschool.cn/miniappbook/ 微信小程序 小程序简介 小 ...
- ASP.NET Core 快速轻量级的浏览器检测和设备检测库
在 .NET Framework 4.7 中那样,通过 HttpContext.Request 的 Browser 属性轻松获取发起 HTTP 请求的浏览器信息,ASP.NET Core 并未直接提供 ...
- uni-app无法触发onReachBottom事件
我们经常会遇见列表; 但是今天却发现下拉的时候: 无法触发onReachBottom事件; 原来是因为列表内容嵌套出现问题: 导致onReachBottom事件无法被触发 记住:列表内容如果是组件:外 ...
- 理解ABP的领域驱动设计
大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 关于玩转ABP框架相关的文章,之前在博客园陆续写了<ABP vNext系列文 ...
- 初识VPC网络的能力
本文分享自天翼云开发者社区<初识VPC网络的能力>,作者:布小匠 VPC网络的来源 在云计算早期是没有VPC的概念的,有的是虚拟网络和虚拟路由器的功能.虚拟网络的作用是为用户提供一个虚拟的 ...