大数跨境
0
0

RTE2021 回顾丨WebRTC 漫漫成长路,下一个十年将走向何方?

RTE2021 回顾丨WebRTC 漫漫成长路,下一个十年将走向何方? RTE开发者社区
2021-11-11
0
导读:RTE 2021 技术演讲回顾。

本文整理自声网Agora WebRTC 负责人毛玉杰在 RTE2021 实时互联网大会大前端与应用开发技术专场上的演讲分享。在演讲中他主要针对 WebRTC 在过去十年的历程、WebRTC 未来的发展以及结合具体项目场景带来的 WebRTC 具体实践内容。关注本文标签「RTE 技术分享」,我们将陆续更新更多演讲干货。以下为演讲实录。


▲图:声网Agora WebRTC 负责人 毛玉杰




毛玉杰认为 WebRTC 的发展完全离不开浏览器的发展。会议现场他向观众展示了一张图片,说明 Chrome 浏览器在过去十年的增长非常惊人。



Chrome 背后的技术源于谷歌,也是 WebRTC 的创立者。得益于谷歌在移动端 Android 的优势,以及搜索引擎的优势,Chrome 运行的非常快。此外它的用户体验非常流畅,这也是谷歌可以在发布之后迅速崛起,到 2019 年几乎达到了顶峰,市场份额占有约 65% 的原因。


除了 Chrome 之外,Safari 浏览器也值得大家关注。毛玉杰指出苹果自从 2007 年发布了 iPhone,iOS 的增长也是有目共睹的。Safari 占了将近 20% 的市场份额。目前在浏览器业界一共有三大内核,一个是 Chrome 内核,一个是 Firefox 的内核,再加上 Safari 内核,这三个内核几乎占了浏览器内核的 95% 以上,而其他的浏览器或多或少都是来源于 Chrome。这三大浏览器对 WebRTC 的支持,刚好为 WebRTC 的发展奠定了非常扎实的基础。


2011 年 6 月 1 号,谷歌向 WebRTC 社区发了一个邮件,决定把 WebRTC 开源,这为业界埋下了 WebRTC 的种子,经过了十年各方的努力,目前 WebRTC 已完全成长成了一棵参天大树。目前很多应用,比如像语音的应用、移动的直播、视频会议,都是得益于这颗种子,可谓硕果累累。


毛玉杰完整地回顾了一下过去这十年 WebRTC 的大事件:



2008 年谷歌发布了 Chrome,两年以后收购了 GIPS,这也是 WebRTC 的原身。2011 年把 WebRTC 的代码开源了,在社区里面第一版 WebRTC 工作草案已经发布。时隔一年以后,谷歌在 23 号版本中正式对外支持了 WebRTC 的功能,Firefox 快速地跟进.在 2013 年 Firefox22 的版本中也默认支持了 WebRTC,同一年 WebRTC 在 Chrome 和 Firefox 达到了可互动的地步。2016 年,谷歌在 52 号版本里第一次支持 H.264,但这在 WebRTC 发展历程里是谷歌不太愿意提及的一点。


2017 年,因为 Safari 在前六年都没有支持 WebRTC,当 WebRTC 正式成为 Web1.0 候选推荐标准的时候,Safari11 首次支持 WebRTC,也是为整个三大浏览器内核支持 WebRTC 奠定了非常好的基础。2020 年和 2021 年,这两年是 WebRTC 完全大爆发的一年,所有人被困在家里之后,都涌到线上。WebRTC 的流量出现了爆增。今年年初经历过十年的标准演进,WebRTC1.0 正式成为各大浏览器厂商的推荐标准。


2020 年到 2021 年 WebRTC 的发展有大的突破,在疫情期间从去年 3 月份到今年 1 月份有比较大的增长,比如南美、北美、欧洲等区域的增长更是惊人。根据毛玉杰向观众展示的官方分钟数的数据图显示,从去年 3 月到去年 12 月视频分钟数增长了 100 倍,就像是 4G 的下载速度和 2G 的下载速度相比,4G 比 2G 快了 100 倍,这是比较恐怖的提升。



除了浏览器,WebRTC 还有一个至关重要的事件,就是 Codecs。谷歌在 2010 年收购了一家公司叫 On2 Techonlogy,On2 致力于对外提供产品视频的编解码器,并做了一些整合,长达四年的时间内只支持 VP8。在 2015 年,Chrome48 版本支持了 VP9。2014 年WebRTC 峰会的时候谷歌内部有在 2014 年已经去规划下一个Codecs VP10,VP10 也给后面的发展做了铺垫。



由于 H.264 的版权谷歌不愿意支持,这个版权有两个标准组织都在研发,之前是分离的,后面合并了。在那时候,264 仍然是全球使用最多的 Codec。由于版权比较繁琐,所以 WebRTC 早期不支持 H.264,即使现在 Android 平台上 264 的支持还不太乐观。为了给互联网打造一个免版权的环境,包括代码可以开源,以实现大快速的迭代,谷歌牵头在 2015 年成立了开放媒体联盟(AOM),此举得到了亚马逊、Intel、微软等很多企业的支持。2016 年AOM标准正式发布了 1.0 的版本,2018 年 Codec AV1 正式问世。Chrome 在今年发布的 90 版本里也是在 WebRTC 里支持了 AV1,所以大家现在可以在最新的 Chrome 里面使用 AV1。


关于兼容性问题,毛玉杰展示了 Web 开放平台的测试结果。在 2018 年的时候 WebRTC 的覆盖率是非常不足的。到 2021 年几乎所有的 WebRTC 定义的接口都有了不同程度的完整度的覆盖,除了一些少有的东西,这个东西相对来说不同浏览器厂商跟进的比较慢,所以目前来看切口的兼容性也是有了比较好的支持。



毛玉杰展示了 WebRTC 在浏览器内部的结构图,第一层浏览器对外暴露的 API,下面一层是 WebRTC C++ 的 API,再下一层就是音视频的引擎。之后是音视频的采集,还有网络传输,这些都是浏览器的厂商自己可以定制的,这个也是 WebRTC 有比较多的限制的原因。



下图展示了 WebRTC 媒体流的流向,从麦克风、摄像头的采集,再到音频的 3A,再到视频比较简单的前处理,再到编码器,编码器之后还会做一些简单的加解密,然后往外发送,接收端有解码器,解码完之后在浏览器里做播放。



毛玉杰对在 WebRTC 的十年发展过程当中遇到的问题进行了总结:



首先是设备跟外设的适配,设备具有复杂性,不同的驱动,不同的外设,不同的蓝牙耳机,摄像头都会存在很多兼容性的问题,这些兼容性问题都需要浏览器厂商兼容,然而浏览器厂商不会做这个事情。如果接触过 Chrome 开源项目的人会知道,他们所适配的机型数量是非常少的。同时在浏览器厂商在不同平台上框架层面的实现都是不一样的,因为都要调操作系统的 API,操作系统的 API 各个平台都不一样,造成很多平台上虽然一次性测试过了,但是组合起来的测试就会出现问题。


在移动端,WebRTC 相对在市场上是有很多的需求的,很多人需要在钉钉,企业微信里面中使用,方便做一些业务推广。但同时,现在 WebRTC 在移动端存在的问题是非常多的,比如音频路由器切换、音频的 3A,在不同的手机上都要做适配。现在浏览器厂商做的还不够,可能有些定制了浏览器内核的 APP,比如 Android 的微信,整个官方浏览器的适用还是没有做的很好。


由于 WebRTC 浏览器音视频的模块是不可定制的,声网针对很多不同的网络做了一些算法的适配。现在由于受限于 WebRTC 音视频模块都在浏览器内部,开发者陷入无法作为的境地。同时还有一个在实践中遇到的非常痛苦的问题在于 WebRTC 的质量指标问题。在统计数据里,WebRTC 更多定义的是服务质量,比如像大家熟悉的音频的码率、视频的码率,视频的渲染帧率,这些都不算是真正的体验指标,体验指标是像音频卡不卡,视频卡不卡。(编者注:体验指标的更多干货,可关注本篇文章标签“RTE2021”,后续会整理发布相关演讲内容。)




WebRTC 的标准已经演进到 WebRTC NV这一代,但WebRTC NV到底是什么呢?翻一下 W3C 的标准可以看到各种各样的标准非常多,但到底有哪些标准跟 WebRTC NV 相关?WebRTC 1.0 和 WebRTC 2.0 是说明 WebRTC 下一代是大的改进还是小的改进。


一定程度上 WebRTC 的 NV 可以被认为是 ORTC。过去几年这个标准的声音已经没有多少了,但是这个标准在 WebRTC 出现的早期还是非常火的。2013 年有些人不太满意 WebRTC 标准里面的东西。所以对于可深度的编码做了标准的制定,还有之前的裸数据和一些深度信息也做了扩展。对于 WebRTC 现有标准的补充,可以认为是 WebRTC 1.1。


对于另外的一些标准都是非常独立的,跟 WebRTC 的标准可能不太完全相关,可以用在除了 WebRTC 之外的其他地方。它们始终没有办法在浏览器内部直接用操作系统的Socket,另外 WebRTC 把底层的编辑化能力放出来了,还有一些是 WebRTC 标准分离,比如像 IaaS 的标准,以及 QUIC 的标准。



WebRTC 的使用完全不能脱离 TCP,如果要建一个连接免不了要去交换 SDP,避免不了需要 WebRTC 使用一个 TCP 的协议栈。WebSocke t其实是一个可选择的框架,可以结合业务场景选择,到底决定用 SV2 还是 SV3 ,相对来说比较灵活的。还有一个是谷歌最近提出的 Raw Sockets 协议,目前还处在非常早期的阶段,但有着非常大的发展前景。



之前所有的编解码都是在浏览器的内部,意味着用了 WebSocket 接口收了一条流,解码和编码都发生在浏览器的内部。而 Web Codecs 可以通过 API 可以实现一些编解码,可以会直接调用一个编解码器,做一些前处理,所有的东西都可以打碎组合出来实现自己的应用,具备很大的想象空间。



毛玉杰还介绍了一种非常火热的技术——Web Assembly,这项技术在前端和后端都受到了很多的关注。这项技术的兼容性是非常好的,原理相对比较简单。毛玉杰认为上述几个技术的结合促成了声网新的技术架构,现在还在做一些技术上的探索。从摄像头、麦克风拿到裸数据,可以做一些很多的前处理,比如做美颜,可以做背景分割(可见往期分享)等等。做完之后自己做编码,做完编码以后可以实现一个 WebRTC 的协议站,做完之后发送,然后在接触端实现相关的能力,拿到这些数据之后再去做解码,再用浏览器上,整体能力可以脱离现在 WebRTC 这么封闭的黑盒子,赋予了更多的能力。



关于 WebRTC 的未来,毛玉杰总结了两大趋势:


第一,移动 WebRTC 有着很大的潜力,这个潜力体现在有很多人会用到移动端的浏览器,比如微信、钉钉内制的浏览器。Android 平台上还有很多人会去开发应用,还会有一些开发者用 WKWEBView 做应用开发。同时也希望浏览器厂商能去做好移动端的 WebRTC,这个对于拓展很多场景会有非常大的帮助。



第二,希望 WebRTC 能把它的模块变成类似于积木一样的东西,WebRTC 整个模块里面内容非常多,有视频引擎、音频引擎,每个引擎下面有很多的模块,3G、加解密等等。未来它们能够组合更多非常有意思的应用,这个就是可定制的能力,当只想做一些项目的时候,哪怕用自己的模块,哪怕用谷歌的墨客,也要把它的能力开放出来。



最后,毛玉杰以一张来源于游戏的图片来结束今天的演讲:图片中的主人翁,游戏的制定者说过一句话“作为一个旁观者,他永远没有像深入到这个游戏里面的人来的更有趣”。呼吁大家一起参与到未来的 WebRTC 的标准中来,贡献自己的想法,将整个行业和生态共同推向未来。


【声明】内容源于网络
0
0
RTE开发者社区
RTE 开发者社区是聚焦实时互动领域的中立开发者社区。不止于纯粹的技术交流,我们相信开发者具备更加丰盈的个体价值。行业发展变革、开发者职涯发展、技术创业创新资源,我们将陪跑开发者,共享、共建、共成长。
内容 1122
粉丝 0
RTE开发者社区 RTE 开发者社区是聚焦实时互动领域的中立开发者社区。不止于纯粹的技术交流,我们相信开发者具备更加丰盈的个体价值。行业发展变革、开发者职涯发展、技术创业创新资源,我们将陪跑开发者,共享、共建、共成长。
总阅读197
粉丝0
内容1.1k