2017-2018:WebRTC标准演进与发展瓶颈

简介: 尽管WebRTC获得了主流浏览器的官方支持,但各浏览器之间还存一定的互操作性问题。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1


尽管WebRTC获得了主流浏览器的官方支持,但各浏览器之间还存一定的互操作性问题。本文来自英特尔Web技术及优化中心资深软件工程师诸剑俊的投稿,文章回顾了WebRTC在2017年取得的里程碑,以及当下的发展瓶颈,并对苹果对WebRTC的投入充满期待。如果你愿意分享技术实践或洞察,欢迎联系 contribute@livevideostack.com。


文 / 诸剑俊


WebRTC 1.0标准【1】在经过了数年的设计和改进之后,终于在2017年末进入了CR(Candidate Recommendation)【2】阶段。这意味着WebRTC 1.0的功能和API定义已经基本完成。与此同时,Edge和Safari也在2017年正式加入了对WebRTC的支持,加上之前已经支持WebRTC的Chrome、Firefox和Opera,目前这项技术已经获得当前主流浏览器上的普遍支持。


回顾


WebRTC标准由W3C Web Real-Time Communications Working Group和IETF RTCWEB Working Group参与制定。自2011年以来,WebRTC 1.0在演进过程中经历了早期基于流(stream)的阶段,发展到基于轨道(track)的阶段,并加入了收发器(transceiver)的概念【3】。目前的版本提供了更大的灵活度和更多的使用场景,并且加快了连接建立的速度。


与WebRTC密切相关的Media Capture and Streams(getUserMedia)标准及其扩展也得到了增强。除了传统地从摄像头、麦克风获取音视频数据以外,新的扩展也支持从DOM元素获取视频数据【4】。深度扩展【5】则允许浏览器获取到摄像头的深度信息,深度信息的加入可对物体识别等应用带来帮助。


相对于标准的完善,对于web开发者而言,更重要的是需要有浏览器实实在在地支持。目前主流的浏览器基本都已支持WebRTC,部分浏览器之间存在的互操作性问题也可以通过adapter【6】来解决。但是由于标准在演进过程中经历了较大的改动,部分后期的改动和新加入的API尚未得到完整地支持。Chrome社区正在积极地增强对标准的支持【7】,部分与标准不匹配的实现已经于2017年得到了修正。Firefox对基于轨道的API也已经有较好地实现,并且将部分已经移除的API标记为过时的API,不建议使用。开发者将大大减少在适配多种浏览器上的投入。


展望


随着5G网络的建设和直播等应用的持续火爆,实时的音视频互动需求十分强劲。WebRTC无插件、浏览器原生支持的优点,成为了在互联网平台进行音视频直播互动的一个良好的选择。


WebRTC 1.0标准稳定后,工作组已经开始探索新的篇章。新的标准有望加入对新传输协议的支持,以及更易用的API。


从技术上亟待解决的几个问题来看,目前浏览器互操作中一个比较主要的问题是Chrome对于多个媒体源的时候使用的是Plan B【8】,而Firefox使用的是Unified Plan【9】,当一个PeerConnection有多个流的时候可能会遇到问题【10】。Chrome已经在实现Unified Plan并取得了一些进展。希望这个问题解决以后浏览器之间有更好的互操作性。


对小程序开发者来说,Safari/WebKit加入WebRTC支持无疑是一个非常好的消息。由于iOS平台Web运行环境相对统一,并且新系统部署速度较快【11】,各类小程序有望在较短时间内利用起WebRTC提供的实时音视频和数据传输功能。目前来看,Safari加入对WebRTC支持后在iOS平台尚有一些不稳定【12】【13】,该问题在iOS 11.2已有所改善。另外,Media Capture API (getUserMedia)目前只在Safari上支持,各类iOS应用程序内使用的WKWebView和UIWebView还不允许做获取摄像头和麦克风等操作【14】。希望2018年WebRTC在iOS平台得到更好地支持后,能有更多的应用程序/小程序可以增加实时的音视频互动,为用户提供更好的体验。


英特尔公司作为W3C的成员,正在与业界同仁一起为WebRTC完善和发展而努力。除了对WebRTC标准层面的影响,英特尔早在2014年就推出了端到端的音视频应用解决方案“面向WebRTC的英特尔®协同通信开发套件”,并历经10多个版本的更新,该套件可以帮助开发人员快速开发出支持多个平台实时通信的复杂应用。


关于作者


诸剑俊,英特尔Web技术及优化中心资深软件工程师,W3C WebRTC 工作组成员。面向WebRTC的英特尔®协同通信开发套件中客户端协议栈的主要开发者之一,同时也是Chromium WebRTC开源社区的积极贡献者。

 

0?wx_fmt=png


文献参考


  1.  https://www.w3.org/TR/webrtc/

  2.  https://www.w3.org/html/wg/wiki/CR

  3.  https://blog.mozilla.org/webrtc/the-evolution-of-webrtc/

  4.  https://www.w3.org/TR/mediacapture-fromelement

  5.  https://www.w3.org/TR/mediacapture-depth/

  6.  https://github.com/webrtc/adapter

  7.  https://groups.google.com/d/msg/discuss-webrtc/f4Jg53Phgco/YfetnmoqBQAJ

  8.  https://tools.ietf.org/html/draft-uberti-rtcweb-plan-00

  9.  https://tools.ietf.org/html/draft-roach-mmusic-unified-plan-00

  10.  https://bugs.chromium.org/p/chromium/issues/detail?id=465349

  11.  https://developer.apple.com/support/app-store/

  12.  https://bugs.webkit.org/show_bug.cgi?id=175014

  13.  https://bugs.webkit.org/show_bug.cgi?id=176439

  14.  https://webkit.org/blog/7763/a-closer-look-into-webrtc/


酷炫短视频开发进阶&新书抽奖


全民快乐研发高级总监展晓凯讲在1月16日线上分享酷炫短视频开发的设计架构、实现思路以及研发过程中的经验。


在参与直播互动的小伙伴中,将抽出10位赠送展老师的新书《音视频开发进阶指南——基于Android和iOS平台的实践》,同时我们也会面向参与直播的小伙伴开放购书优惠通道。


此外,分享下面海报到朋友圈,将截图发到公众号,我们还将额外抽出5位小伙伴赠送展老师的新书。


扫描下方图中二维码,加入直播群。

0?wx_fmt=jpeg

相关文章
|
人工智能 开发框架 物联网
为什么 C# 可能是最好的第一编程语言
C# 是一个全面领域的全能型语言,结合新时代的 .NET 平台,与时俱进的发展创新,未来无限可期!对于带着有色眼镜看待的人们,是否该刮目相看了呢?下面看看行业大佬关于 .NET 的解说。
1419 2
为什么 C# 可能是最好的第一编程语言
|
10月前
|
Java 编译器 开发者
Java中的this关键字详解:深入理解与应用
本文深入解析了Java中`this`关键字的多种用法
1639 9
|
存储 关系型数据库 MySQL
什么是mysql的数据类型?
什么是mysql的数据类型?
163 2
|
存储 Java Unix
Java基础17-读懂Java IO流和常见面试题(一)
Java基础16-读懂Java IO流和常见面试题(一)
232 0
|
数据可视化 数据挖掘
常用 7 大类型图形可视化——排序关系图形
常用 7 大类型图形可视化——排序关系图形
302 0
|
计算机视觉
编译OpenCV 以及 openc_contrib 提示缺少boostdesc_bgm.i文件出错
编译OpenCV 以及 openc_contrib 提示缺少boostdesc_bgm.i文件出错
|
存储 Python Windows
Python 技术篇-设置windows开机自动启用Jupyter服务,BAT批处理脚本启用jupyter服务设置,设置jupyter默认启动位置的方法
Python 技术篇-设置windows开机自动启用Jupyter服务,BAT批处理脚本启用jupyter服务设置,设置jupyter默认启动位置的方法
1190 0
Python 技术篇-设置windows开机自动启用Jupyter服务,BAT批处理脚本启用jupyter服务设置,设置jupyter默认启动位置的方法
|
关系型数据库 MySQL Linux
17.12 Linux PHP安装
关于PHP 的版本,目前大多数企业都会使用 5.4 及更高版本,甚至越来越多的企业使用 PHP 7 版本,要知道,这两个版本还是有很大差异的,PHP 7 有很大的性能提升。
270 0
17.12 Linux PHP安装
|
存储
IT技术晋级之路-制作U盘启动盘
打开在大白菜官网下载的软件 选择你要制作启动的可移动磁盘,启动模式USB-HDD或USB-ZIP可选,默认采用USB-HDD模式。(chs模式主要针对某些不能检测的Bios,一般不需要勾选此项!如果你想把U盘剩余部分转成NTFS格式可以勾选NTFS选项,注意:格式化成NTFS会影响U盘启动部分功能的使用,除非需要存储超过4G的单文件,否则不建议勾选此项!) 尽量退出杀毒软件和安全类软件以免制作失败,点击 一键制作USB启动盘 按钮,程序会提示是否继续,确认所选U盘无重要数据后点是开始制作. (注意:使用之前版本制作过的U盘如果制作失败请尝试先执行初始化U盘再进行制作。
1926 0
|
2天前
|
云安全 人工智能 自然语言处理
AI说的每一句话,都靠谱吗?
阿里云提供AI全栈安全能力,其中针对AI输入与输出环节的安全合规挑战,我们构建了“开箱即用”与“按需增强”相结合的多层次、可配置的内容安全机制。