对中国开发者最具吸引力的科技企业有哪些?快来为你 pick 的企业投票! 了解详情
写点什么

关于 WebRTC: 挑战与机遇并存的实时通信

2013 年 6 月 17 日

QCon New York 2013 大会上, Gustavo Garcia 就支持 HTML 5 的新型实时通信组件 WebRTC 做了主题演讲。WebRTC 是一系列技术的组合,能在端到端之间实现实时、低延时的通信,可以用于视频和音频会议以及游戏。虽然通常都使用 WebSockets 来实现实时通信,但 WebRTC 却尝试通过直接在端到端之间建立连接来显著地降低延迟,并且只有在出现例如 NAT 或防火墙等原因导致不能直接建立连接的情况下,才会使用 NAT 穿透技术 。

Garcia 描述了构建一个视频或音频会议系统所需要的各种组件。建立一个一对一的通话也许是最简单的情景。这就需要浏览器中支持如下特性:

  1. 支持对流式视频和音频的解码和显示
  2. 能够从网络摄像头中捕获视频和音频流
  3. 对呼叫的协调协议(如信号处理)
  4. 高效的音频和视频的编码及解码器
  5. 处理回波消除、噪声抑制、比特率适应(根据带宽自适应的流)等诸多方面的算法。

其中有许多是现在 HTML5 的一部分,包括流式视频和音频,以及通过 getUserMedia 去捕获视频和音频。虽然可以使用 getUserMedia API 去捕获音频和视频,但也只是实验性的扩展,在目前新构建的 Chrome 版本中实现了去捕获屏幕、单独的浏览器tab 或部分网页的功能。

WebRTC 忽略了重要的一点是对信号处理(signaling)的直接支持。信号处理用于控制呼叫的建立:谁在尝试呼叫谁,是否有人接受这次呼叫。信号处理必须由开发者自己实现,例如使用 WebSockets 或 HTTP 长轮询。开发者必须部署的另外一块基础设施是隧道服务器,它在用户需要 NAT 穿透和使用受限防火墙时充当中介角色。据 Garcia 估计,大概 8%的呼叫都需要这样的中间隧道服务器。

Garcia 描述了 WebRTC 的各种使用场景:

  • 一对一的视频和音频通话使用 WebRTC 来实现是最简单的。
  • 多方通话较难实现。一种方法是在完整的网状网络中,每个参与者都连接到所有其他参与者,但由于 CPU 占用率过高和带宽的限制,这种方法不能供超过 5-6 人使用。另一种方法是使用一个中间服务器,聚集所有的流,以单独或是合并成单一流的方式将其广播到所有其他参与者。
  • 允许 WebRTC 连接到固定电话网络,并通过网络浏览器拨打固话。
  • 结合其他技术如 HTML5 WebGL 实现实时的多人游戏
  • 因为 WebRTC 支持端到端之间任意数据的传输, 因此该技术可以用来在用户之间传输文件。例如,可以想象以这种方式建立类似 BitTorrent 的应用。

尽管当今支持 WebRTC 的浏览器(目前只有较新版本的 Chrome 和 Firefox 支持)还不是很多,但已经有了许多应用的例子。要了解有关该技术的更多信息,请参考 webrtc.org 或相关 W3C 标准

查看英文原文: Wrangling WebRTC: Challenges and Opportunities for Real-Time Communication


感谢赵震一对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2013 年 6 月 17 日 10:433063
用户头像

发布了 81 篇内容, 共 16.6 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

内存屏障的来历

HackMSF

cpu 并发

愿你也能穿越熊熊烈火,飞往你的山

Janenesome

读书笔记 思考

Pycharm社区版安装教程(永久免费,随时升级)

早睡蟒

ARTS Week2

时之虫

ARTS 打卡计划

ARTS|Week 02:体会刷算法题的快乐,同时开启Ubuntu 20.04备用系统

MiracleWong

算法 ARTS 打卡计划

Spark学习笔记一之为什么Spark这么牛逼

Shockang

大数据 spark

GitLab CI/CD

xgqfrms

Trie 字典树

田镇珲

LeetCode Trie

彻底搞懂 etcd 系列文章(一):初识 etcd

aoho

架构 云原生 etcd

听说用 Lombok 可以早点下班?

武培轩

Java 程序员 工具 后端 IDEA

做正确的事情什么时候都不晚

Neco.W

学习 导师

像运营公司一样去做产品

胖鱼2号

创业 产品 产品经理 企业

当代社畜在维权中成长 | 记初次打官司

张鸱鸺

个人成长 随笔杂谈 维权 民事诉讼

Go: Go 调度器的任务窃取(Work-Stealing)

陈思敏捷

go golang 源码分析 原理 队列

单例模式详解

章小传

Java 单例模式

线上故障处理实践

心平气和

故障分析 故障定位

某二手交易平台大数据平台从 0 到 1 演进与实践

奈学教育

中小型城市商业银行数字化转型实践(四)业务中台建设思路和路径

泡菜小仙

行业资讯 银行数字化转型

test

PQY

Spark Launcher Java API提交Spark算法

杨仪军

spark spark launcher

Spring 源码学习 - 单例bean的实例化过程

公众号:好奇心森林

JDK 8,该离开的时候,请别留恋!

范学雷

Java 架构 编程语言 Java 25 周年

游戏夜读 | 终端设备之争?

game1night

重装Oracle11g

阡陌r

oracle 踩坑 oracle重装

推荐几款有意思的小众App(06.06)

静陌

奈学教你五分钟学会分布式事务

奈学教育

分布式系统

缓存一致性协议的工作方式

HackMSF

缓存 并发

彻底搞懂 etcd 系列文章(三):etcd 集群运维部署

aoho

架构 云原生 etcd

原创 | TDD工具集:JUnit、AssertJ和Mockito (十九)编写测试-依赖注入\测试接口\重复测试

编程道与术

Java 编程 TDD 单元测试 JUnit

ES2020 new features / ES11

xgqfrms

ES2020 new features ES11 ES2020

C/C++:const常量真的可以用指针修改吗

韩小非

c c++ 指针 常量 编译器优化

华为云 TechWave 全球技术峰会

华为云 TechWave 全球技术峰会

关于WebRTC:挑战与机遇并存的实时通信-InfoQ