进击的WebRTC:咱们为何须要它?

做者:毛玉杰,声网 WebRTC 专家前端

有人说 2017 年是 WebRTC 的转折之年,2018 年将是 WebRTC 的爆发之年。去年,WebRTC 1.0 标准草案出炉,并将于今年正式发布。与此同时,愈来愈多的浏览器和厂商都开始对它进行普遍的支持,WebRTC 即将成为互联网的基础设施了。web

根据《2017 年微信数据报告》显示,截止到 2017 年 9 月,微信日成功通话次数 2.05 次,月人均通话时长 139 分钟,月人均通话次数 19 次。经过这些数据咱们能够看到,微信视频通话的出现,已潜移默化地改变了人与人通讯的方式。面试

而回望三大运营商的数据,语音通话量在 2015 年首次出现了负增加,能够看到互联网 OTT 应用对传统语音通话业务的冲击有多强烈。正是因为这些日益完善的基础设施,更快的智能手机,更快的网络,更丰富的使用场景,实时通讯的需求愈来愈强烈。 从 2015 开始不断涌现出的互动直播、狼人杀、抓娃娃、直播答题、线上 KTV 等创新,将常见的线下场景转至线上,也足以做为实时音视频通讯风头正劲的有力佐证。算法

愈来愈多的创业者都在思考如何将线下互动的场景搬到线上,从而打造下一个风靡全民爆款的应用。浏览器

说到实时通讯,不得不提到 WebRTC,WebRTC 全名为 Web Real Time Communication,从 Web 这个词就能够看出,最初这项技术是为浏览器量身打造用以实时音视频能力而准备的。服务器

但其实 WebRTC 在不一样场景下包含不一样的含义,它既能够表明 Google 开源的 WebRTC 项目,又能够表明 W3C 工做组制定的 WebRTC 标准,也能够表明浏览器中的 WebRTC 接口,咱们将他们统称为 WebRTC 技术。当前具备实时音视频能力的应用或者服务,或多或少都使用了 WebRTC 技术,固然全部的这些背后都离不开 Google 开源的 WebRTC 项目,下面咱们扒一扒 WebRTC 背后的故事。微信

回溯历史:为何须要 WebRTC

说到 WebRTC,咱们不得不提到 Gobal IP Solutions,简称 GIPS。这是一家 1990 年成立于瑞典斯德哥尔摩的 VoIP 软件开发商,提供了能够说是世界上最好的语音引擎。 Skype、腾讯 QQ、WebEx、Vidyo 等都使用了它的音频处理引擎,包含了受专利保护的回声消除算法,适应网络抖动和丢包的低延迟算法,以及先进的音频编解码器。网络

Google 在 Gtalk 中也使用了 GIPS 的受权。Google 在 2011 年收购了 GIPS,并将其源代码开源,加上在 2010 年收购的 On2 获取到的 VPx 系列视频编解码器,WebRTC 开源项目应运而生,即 GIPS 音视频引擎 + 替换掉 H.264 的 VPx 视频编解码器。框架

在此以后,Google 又将在 Gtalk 中用于 P2P 打洞的开源项目 libjingle 融合进了 WebRTC。因此目前 WebRTC 提供了在 Web、iOS、Android、Mac、Windows、Linux 在内的全部平台的 API,保证了 API 在全部平台的一致性。使用 WebRTC 的好处主要有如下几个方面:工具

  • 免费的使用 GIPS 先进的音视频引擎,在此以前都须要付费受权。
  • 因为音视频传输是基于点对点传输的,因此实现简单的 1 对 1 通话场景,须要较少的服务器资源,借助免费的 STUN/TURN 服务器能够大大节约成本开销。
  • 开发 Web 版本的应用很是方便,使用简单的 JS 接口,无需安装任何插件,便可实现音视频互通。

WebRTC 标准掀起的影响

2017 年 11 月 2 日,在经历了 6 年的时间以后,W3C WebRTC 1.0 草案正式定稿。一样也是在 2017 年,Microsoft Edge 与 Apple Safari 也纷纷宣称了在其最新的版本里支持 WebRTC 1.0 标准 API。

虽然不一样浏览器厂商在某些实现细节方面有所差异,好比 Safari 只支持 H.264,不一样的 SDP 描述格式等等,但除了 IE 以外,全部主流浏览器 Google Chrome、Mozilla Firefox、Apple Safari、Microsoft Edge 都已经支持 WebRTC 1.0,全部浏览器之间无插件化的音视频互通已经成为一种可能。

愈来愈多的终端设备上,无需借助任何插件或者 native 应用,经过打开网页连接,便可进行高质量的音视频通话,应用开发者也无需关注音视频引擎实现细节,大大节约了开发成本。

普遍的适用场景

WebRTC 适用的场景能够说是很是普遍,不少行业结合实时通讯均可以创造出很是有意思的场景,传统的实时通讯应用场景主要是在视频会议、视频面试、VoIP 通话、呼叫中心,产品如 WebEx、Skype 等。

当下比较火的场景主要集中在社交、游戏、体育、电视、相亲类的直播,以及互动连麦、在线教育、在线医疗、金融证券在线开户、智能硬件(如无人机)、智能家居设备如摄像头监控以及智能语音设备。

固然 WebRTC 除了提供音视频传输功能,还有一个容易被忽略的功能就是数据传输。利用点对点的传输机制,一些开发者创造出了诸如 Webtorrent 以及 PeerCDN 这样的不通过服务器的数据传输网络服务。因此 WebRTC 很是适合用来打造实时通讯的应用。

而直播做为当下的热点应用,确定少不了对于 WebRTC 的使用,而这又要提到 rtmp。

从 RTMP 到 WebRTC

从应用角度来说,受到用户使用习惯的改变,愈来愈多的直播产品都开始加入视频互通的功能。同时,像视频会议、视频核保一类的应用方式也在不断增长。这影响着技术选型的变迁。

RTMP(Real Time Messaging Protocol) 实时消息传送协议是 Adobe Systems 公司为 Flash 播放器和服务器之间音频、视频和数据传输开发的开放协议。随着直播兴起,不少人都将它用在直播上。

在协议方面,rtmp 彻底能够知足直播产品的需求,但因为其相对延时较高,不能知足视频互通的产品需求。因而你们很天然地将目光投向 UDP、QUIC(基于 UDP)一类延时更低的网络协议。

在技术框架方面,因为自研一套符合视频互通要求的通讯系统相对复杂,不只涉及网络传输、前端开发、移动端开发,还要解决音视频编解码中复杂的算法优化,对开发者的技术栈要求很高,因此愈来愈多的人选择 WebRTC。

目前来看,WebRTC 已经得到了愈来愈多浏览器厂商及相关技术厂商的支持,应用的前景将会更加广阔。

可是受限于 WebRTC 自身的一些缺憾,通常开发者都不是直接彻底使用 WebRTC,而是根据实际场景基于 WebRTC 进行二次开发。WebRTC 自己并非万能钥匙,不可能一套代码以及接口能够解决全部问题。

如何作二次改造?

WebRTC 是一个很是优秀的项目,但若是直接拿来使用也存在如下问题。

第一,WebRTC 使用的是对点对传输,虽然节约了服务器资源的开销,但实际使用时也带来了传输质量的问题,好比跨国以及跨运营商网络之间的传输质量每每很难保证,虽然 webRTC 有优秀的端对端质量控制算法,但在错综复杂的网络条件下,表现也很难让人满意。

第二,WebRTC 在移动端的表现也很难让人满意。早期因为缺乏对于 H.264 编解码器的支持,使得移动端很长一段时间只能使用 VP8 软件编解码,致使在中低端手机上的表现较差,加上安卓自身碎片化的属性,若是不针对不一样机型作适配,很难有统一的用户体验。

第三,WebRTC 是为 1 对 1 通讯场景设计的,若是要实现多人的场景,仍是须要借助服务端方案。即便当前有不少开源的 webRTC 服务器实现,一个流媒体中转服务器或者混流服务器的部署以及维护也是很是复杂的。

第四,在 Web 端须要面临不一样浏览器之间的兼容性问题。虽然使用 AdapterJS 能够解决不一样浏览器之间的接口适配问题,但除此以外依然要面临不一样浏览器行为不一致的问题。能够说若是 WebRTC 若是直接拿过来商用的话,几乎是不太可能的,当下广泛的解决方案是自研,根据自身的业务场景进行二次定制开发,或者更简单一点使用第三方 SDK。

WebRTC 的前景

将来在实时通讯领域,WebRTC 依然是很是重要的一块拼图。

不管是 Web 仍是 Native,都很是依赖 WebRTC 提供的音视频引擎,尤为是在 Web 端,几乎全部浏览器厂商的实现都是基于 Google WebRTC 项目。随着 WebRTC 1.0 标准的定稿,各大浏览器的 WebRTC 接口已经基本获得统一。

一直以来,WebRTC 都缺乏测试工具。在去年年末,Google 推出了 KITE 开源项目,用于帮助开发者检测 WebRTC 应用在不一样浏览器的互通性。对于标准化社区来说,下一步工做主要会围绕提供一组更完备的测试套件,不只能够帮助开发者测试 WebRTC 应用在 Web 端、Native 端的互通性与体验,还有助于保证各厂商浏览器 WebRTC 接口功能的一致性,并逐步完善 WebRTC 缺失的功能。

在相关技术方面,QUIC 也进入更多人的视野。对于 WebRTC 来说,QUIC 能够加速数据通道的链接(至少原理上可行),还能够彻底替代 SCTP。但问题是,目前支持 QUIC 的浏览器只有 Chrome 和 Opera。

另外一方面,各浏览器也在持续不断地修复问题,对不一样硬件设备以及系统平台进行适配,保证 WebRTC 能稳定运行于除主流机型、系统版本之外,更多的设备上。

若是你也正在开发 WebRTC 应用,遇到疑问,欢迎访问 RTC 开发者社区,发帖与更多同行交流,或分享你的成果。

相关文章
相关标签/搜索