展望2018:WebRTC大规模商用元年
历经6年长跑,WebRTC终于在去年迎来了1.0标准(candidate recommendation)的发布,而它也将成为2018年视频通信商业应用场景爆发的主要技术推动力。一站式WebRTC通信技术提供商Zealcomm公司创始人、CEO冯昶对WebRTC在国内外发展历程、行业趋势、技术难点和未来发展做了详细的分析。本文是『WebRTC-互联网音视频新标准?』系列的第三篇,如果您对WebRTC技术的未来有分析和洞见,欢迎联系 contribute@livevideostack.com。
文 / 冯昶
策划 / LiveVideoStack
2018年有可能成为是WebRTC 大规模商用的元年。WebRTC 从谷歌2011年开源到1.0标准落地花了六年多时间 ,中间经过了一个典型的新技术早期起跑(technology trigger)— 热炒 (peak of inflated expectation) — 失落 (trough of disillusionment) — 趋于实用 (slope of enlightenment) 的发展过程。2017年是一个转折点,2018年我们会看到视频通信商业应用场景的大爆发,而WebRTC将成为主要的技术推动力。
WebRTC的前世今生
2011年5月谷歌发布了一个浏览器内嵌的实时音视频通信工具的开源项目,它的核心音视频技术来自谷歌此前收购的两家公司:一家是瑞典VOIP技术公司GIPS,另一家是免版权(royalty free)的美国视频编解码器技术公司ON2,这就是WebRTC 的开始。通常我们所讲的WebRTC标准其实由两部分组成:一个是其核心的流媒体协议栈规范,这个工作是由IETF的RTCWEB Working Group在做;另一个是浏览器API的标准化,这个是由W3C来做。
WebRTC 到目前的发展过程大致可分为4个阶段。第一阶段是从2011年发布到2012年,这个阶段从开始一些工程师对这项新技术的好奇,到geek 圈开始动手做一些好玩的试验项目,WebRTC在很多领域、特别是音视频通信技术界得到的关注迅速升温。第二阶段是2013-2014年的hype期,大家讨论的话题都是WebRTC的颠覆性,在这段时期也出现了不少关于WebRTC的行业会议并且出席率都不错,而很多WebRTC的创业公司也在这个阶段成立。第三阶段是2015-2016年,这个阶段很有意思,一方面我们看到行业巨头们开始进场,比如WhatsApp和Facebook messenger都开始使用WebRTC 作为核心的音视频通信技术;另一方面大多数WebRTC初创公司在商业模式上陷入了困境,其中的原因基本可以总结为两点:一是技术本身商业化还不够成熟,二是市场条件还没到位。
2017 年,我认为是WebRTC作为可商业化技术的里程碑。这主要是源于这一年发生的几件事:一是在11月发布了WebRTC 1.0的标准(candidate recommendation),亲自动手跟过WebRTC的开发者都会有这种体会——谷歌每一版Chrome的发布都需要马上修改自己的code,这其实是一件比较痛苦的事情。二是苹果宣布了对WebRTC的支持,至此也完成对WebRTC 的全平台支持覆盖。三是AOM (Alliance for Open Media) 的完善,随着FB 和 Apple (2018)的加入,AOM已涵盖基本所有互联网高科技领军企业,而AOM从设计上就支持RTC的应用场景, 保证了WebRTC和媒体编解码技术的同步进展。
WebRTC,在国内
国内对WebRTC 的兴趣应该是从2015年开始有比较快的发展。目前开发者大致分为几个层次:最初级的是开发者使用开源代码(客户端)很方便的搭一个P2P的方案,这个基本是没有商用价值的。往上一层则是一些解决方案会加入服务器端功能,来协调多路流的传输和提高稳定性,在这个层面作为一个技术解决方案是可以的,团队的音视频技术积累决定了通话质量和稳定性的好坏,毕竟1-1好做,越多点则难度也会越大,那么媒体服务器就成为其中的关键技术,如果走公网,在网络传输层就需要有很多的实战经验。再往上则是一个平台的产品形态,它需要支持包括管理、分析、API等等的功能,并且在整个平台及网络的设计和运维上达到所谓的运营商级别,这就包括高可用性、可管理性、弹性扩容、安全性等等,而平台功能的高可定制性和支持私有化部署也是相当大的需求。最上层在我看来是生态圈的层面,也就是如何在实时视频的流量上形成一个开放的商业环境,当然这需要一个基于WebRTC的开放的平台作为基础。
WebRTC最佳行业实践
有人统计过在去年年初一共有超过1000个WebRTC项目,再往前的就很难统计,主要因为会嵌入在各个应用场景中。但其实现在已经很少能听到大家专门提到WebRTC,因为如果业务场景有音视频通信的需要时,它基本已经成为默认的解决方案。在视频客服、远程医疗、远程控制等各垂直领域都有比较成熟的解决方案和一些专注的创业公司在开拓。而关注点也已经不再是音视频通信的本身,而是在已经具备音视频通信能力的基础上如何提供高度场景化的客户体验。
那么在WebRTC 解决了互联网音视频通信的技术门槛问题后,有哪些行业能最大或者最快地体现它带来的市场价值。目前可以看到的是,国内的互联网尤其是移动互联网上基于视频互动的各种泛娱乐应用创新层出不穷,并且我相信这一领域还会继续有令人耳目一新的实践应用涌现出来。此外,我个人更偏向关注视频通信在商用场景里的发展,这里除了通常提到的在线教育、在线医疗都还有非常大的想象空间外,企业信息和业务流程的智能视频化是一个趋势,我也非常期待在这些领域看到不断出现好的创新。
特别一提的是,在教育领域WebRTC目前的应用场景其实是很直白的,特别是在线教育和网上虚拟课堂都是典型的强交互性场景,也有不少方案供应商在做专门针对教育领域的通用、专用解决方案。即便如此整个教育行业机会依旧还很大,根本原因是教育资源的空间分布的极度不均衡,它需要有一些技术手段和解决方案消除掉这种“空间障碍”,而WebRTC因其开放性和标准性,是不二的技术选择。可以预见的是,未来随着一些基本通信问题的解决,随之而来的必然是用户体验需求的提升——更高的视频分辨率、更低的端到端延时以及更生动的视频画面呈现就变得更急迫,我相信VR/AR与WebRTC结合的机会、以及基于人工智能的多媒体呈现体验改进将会是行业的热点和突破点。
WebRTC与Codec
WebRTC在对主流编解码的支持上还并不是很好,尤其对于H.265的支持,这里其实牵涉到两个问题。一个是传统的主流视频编解码器大多是针对比较固定的应用场景设计并优化的,应用于码率、帧率、甚至分辨率可根据网络状况实时自适应的RTC应用场景不是很匹配;反观VP8、VP9,包括新一代的AV1编解码器都是在设计上就把RTC 的应用场景考虑在内了。
第二点是版权费的问题。WebRTC的宗旨就是开放和透明,为最大限度地推广这个技术,终端用户必须不被昂贵的编解码版权费所限制。还记得当年谷歌花了很大力气解决了VP8 的版权问题,其目的也是为了除去这个障碍,而我们也看到了MPEGLA很快就宣布H.264(Baseline Profile)免费使用,思科和微软Edge浏览器也宣布了对H.264的支持,其实从某种意义上来说,WebRTC最终还是完成了实际意义上对H.264的支持。对于H.265,我猜想基于VP9和AV1的压力,它有可能会开放免费使用,最起码是在一些限定的应用场景,这其中很有可能就包括WebRTC。对于大家比较期待的AV1而言,目前包括谷歌、微软、英特尔等众多主流厂商参与制定的bitstream格式基本已经完成,因此很可能会在2018年集成到WebRTC中来。
WebRTC与QUIC
QUIC(Quick UDP Internet Connections)协议是一种全新的基于UDP的web开发协议。相比较TCP+TLS,它具有时延低、效率高、灵活性强等优点。Google作为其主要开发和倡导者,已经在Chrome浏览器上试用多年,并取得了较好的效果。将QUIC用于实现WebRTC数据通道(data channel)是比较容易想象的,用它来做实时音视频流媒体的传输则是很有创意的想法,目前还处在可行性讨论的阶段。
从技术角度的匹配似乎很容易可以看到,需要考虑的包括:首先QUIC本身还不是一个IETF标准,其次WebRTC 标准本身的向后兼容不能被破坏,以及把控制过多曝露给上层应用是否会影响到兼容性。比较安全的做法——也是目前主流的意见,是WebRTC会将通信层做得相对独立,在保留现有的通信架构的基础上增加对QUIC的支持。
WebRTC在路上
WebRTC从最初让人激动的发布到现在1.0的落地,花费了六年的时间。在这期间,互联网通信不管是从底层技术,媒体终端,还是应用场景都有很快的发展。回头看看,WebRTC其中一些技术的选择已经显得有点保守了,比如其终端媒体能力描述的形式过度依赖于SDP协议,但反过来讲,要想能制定一个标准就不能老是变。总体而言,能将1.0 定版就是很好的一个成就。而前面也提到,WebRTC最大的成就不在于它的核心技术比其它私有的技术构架有多么了不起的优势,而是在于大大降低了提供音视频通信功能的门槛以及互通互联的开放性。对WebRTC 1.0以后的发展,业界已经开始有不少有意义的反思和建议,包括前面提到对QUIC的讨论,以及在不破坏标准兼容性的前提下如何能给开发者有更多的自由度等等。
那么在探讨它未来发展之前,我们一起看下在开发基于WebRTC的应用的过程中的主要难点,大体可以分为两个方面:客户端侧和服务器侧。客户端侧的问题主要是非浏览器环境的支持,特别是在各种Android盒子和嵌入式设备上调试其多媒体系统,由于终端形态和运行环境的差异,定制化需求比较多,往往每个典型环境的音视频pipeline和媒体优化参数都要做一遍,是比较繁杂的工作。而服务器侧的主要问题在于面对大并发量的使用场景,要有一套优雅、合理的媒体处理框架设计才能保证服务侧系统的高可连接性、可靠性和可扩展性。当然这些问题并不是所有WebRTC用户都会遇到,用户可以尽量根据自己应用场景的要求选择恰当的客户端侧和服务器侧方案,在解决特别复杂的终端环境和实用场景下的问题时,最好是利用第三方经过验证的成熟的方案,避免重复掉到别人摔过的坑里。
回到WebRTC在2018年发展趋势的话题,伴随WebRTC 1.0标准的落地,可以预见各家浏览器厂商和平台厂商未来一年会在稳定性和兼容性方面有持续改进,为开发者提供可靠的应用环境和顺滑的互操作性。同时也会进入前面所提到的最上层的发展趋势,也就是围绕WebRTC 商用的生态圈开始成形。而基于WebRTC的技术和方案提供商则将会进一步细分化、专业化,比如有专注于媒体服务器的、有提供WebRTC媒体网络平台运维监控的、有提供客户端个性化解决方案的。不过从整个行业来看,我们还只是刚刚开始而已。
WebRTCon 2018 7折报名最后一天
除了本文分享,冯昶还将在WebRTCon 2018大会上担任“测试监控和服务保障”专题出品人并做分享,曾担任全球社交类App ooVoo公司CTO,让他积累了超过10亿分钟多点高清视频通话平台经验,并拥有多项视频通信领域国际专利,在WebRTC国内外发展、技术研发难点、平台搭建以及未来趋势有着独到的见解,相信他将为我们呈现一场精彩的专题论坛,一同探讨如何提升音视频服务的保障能力,提升产品鲁棒性?
本专题我们还在积极邀请包括英特尔、阿里巴巴、爱奇艺、哒哒英语的技术大咖。更多详情扫描下图二维码或点击阅读原文。
相关文章:

暴雪游戏遭遇AI“实力”坑队友:四处游走,还不参与战斗
作者 | 琥珀 出品 | AI科技大本营(ID: rgznai100) 60s测试:你是否适合转型人工智能? https://edu.csdn.net/topic/ai30?utm_sourcecxrs_bw “打游戏 AI 将完胜人类!?” 抱歉,这个 Flag 还是不…

linux/nginx 安全增强
这有一篇很好的文章. 评论中有好的补充 http://www.cyberciti.biz/tips/linux-unix-bsd-nginx-webserver-security.html转载于:https://www.cnblogs.com/pengxl/archive/2010/12/08/1900175.html

十年程序员的告诫:千万不要重写代码!
对重写代码说不。 作者 | Roman Luzgin 译者 | 苏本如 责编 | 屠敏 出品 | CSDN(ID:CSDNNews) 以下为译文: 重写代码消耗了12个月! 我们从头开始重写代码浪费的时间。 你能想象在软件行业,12个月的时…

RabbitMQ 实战(四)消费者 ack 以及 生产者 confirms
2019独角兽企业重金招聘Python工程师标准>>> 这篇文章主要讲 RabbitMQ 中 消费者 ack 以及 生产者 confirms。 如上图,生产者把消息发送到 RabbitMQ,然后 RabbitMQ 再把消息投递到消费者。 生产者和 RabbitMQ,以及 RabbitMQ 和消费…

【imx6】/dev中fb和video的对应关系
imx6q关于fb和video的设备信息 设备节点 rootmyzr:/unit_tests# ls /dev/fb* -l lrwxrwxrwx 1 root root 3 Jan 1 1970 /dev/fb -> fb0 crw-rw---- 1 root video 29, 0 Jan 1 1970 /dev/fb0 crw-rw---- 1 root video 29, 1 Jan 1 1970 /dev/fb1 crw-rw---- 1 r…

flash绘图API:恋上你的CD
早上,我无意间碰撞到一个女孩,那时候,她匆匆忙地走了。从她的口袋里面掉下了一本陈旧的书,在哪里我看到她藏在书中的那封陈旧的信和cd。我好奇打开它,一边听着她那张cd,一边看她的写的信,忽然间…

【Ubuntu】ubuntu工具 记录shell终端的内容到文件中:script
###用法 $ script -h Usage: script [options] [file] Options: -a, --append append the output -c, --command run command rather than interactive shell -r, --return return exit code of the child process -f, --flush run flush after each write –force use outpu…

弃Java、Swift于不顾,为何选Python?
作者 | JACE HARR译者 | 姜松浩转载自 CSDN(ID:CSDNNews)以下为译文:刚入行的程序员总是询问他们应该从哪种语言开始,我告诉他们,他们应该首先学习 Python。以下是使用 Python 开始自学编程去探险的一些原因…

iOS事件处理,看我就够了~
该文章属于<简书 — 刘小壮>原创,转载请注明: <简书 — 刘小壮> https://www.jianshu.com/p/b0884faae603 好久没写博客了,前后算起来刚好有一年了。这期间博客也不是一直没变化,细心的同学应该能发现,我一…

ISO9000机房管理办法
1 总则<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />1.1制定目的(1) 规范公司机房管理以及网管相关工作。1.2适用范围公司网络机房以及资讯组人员。1.3权责单位(1) 资讯组负责本办法制定、修改、废止之起草工作。(2) 总…

1400小时开源语音数据集,你想要都在这儿
整理 | 一一出品 | AI科技大本营(ID:rgznai100)3 月 1 日,由 Mozilla 基金会发起的 Common Voice 项目,发布新版语音识别数据集,包括来自 42000 名贡献者,超过 1400 小时的语音样本数据,涵盖包括…

【VirtualBox】VirtualBox使用现有的虚拟盘文件(如VHD)创建虚拟机时,报错:打开虚拟硬盘失败,“UUID already exist”的解决方法
###0、问题描述 使用现有的虚拟盘文件(如VHD)创建虚拟机时,报错:打开虚拟硬盘失败,“UUID already exists”的错误。 ###1、参考博客 https://www.cnblogs.com/xqzt/p/5053338.html https://jingyan.baidu.com/articl…

JDK10 EA版特性速览
今天收到一封邮件组的邮件,是关于JDK 10 First Release Candidate的, JDK10 b43版将作为第一个JDK10的RC版。 b43版特性包括: 286: Local-Variable Type Inference296: Consolidate the JDK Forest into a Single Repository304: Garbage-Col…

linux主机常用管理命令
1.杀掉MYSQL SHELL ps aux|grep mysql|grep -v grep|awk {print $2}|xargs kill -9 2.删除当前目录下0字节的文件 find -type f -size 0 -exec rm -rf {} \; 3.匹配当data里包含"donald",输出第4列 awk /donald/ {print $4} data 扩展1: awk /…

【Qt】新安装的虚拟机,使用QtCreator第一次编译时报错:g++: Command not found
1、问题描述 新安装的虚拟机,使用QtCreator第一次编译时报错:g: Command not found (或着报,make执行失败之类的错误) 2、原因分析 新安装的虚拟机中,没有g。一般默认情况是,只安装了gcc 3…

爬一爬那些年你硬盘存过的“老师”
作者 | PayneLi 转载自Python全家桶(ID: python-0321) 人工智能的现状及今后发展趋势如何? https://edu.csdn.net/topic/ai30?utm_sourcecsdn_bw 最近在Github发现一个基于google浏览器的爬虫项目,此项目是由美国大神2018年开源…

python 打印调用栈
import tracebackdef BBQ():traceback.print_stack() 引入 traceback 包,在某个函数中执行 traceback.print_stack()。 转载于:https://www.cnblogs.com/yourstars/p/8448471.html
(转)修改ETM,用Ogre实现《天龙八部》地形与部分场景详解(附源码)
本文主要讲的是《天龙八部》游戏的地形和一部分场景的具体实现,使用C, Ogre1.6,我摸索了段时间,可能方法用的并不是最好的,但好歹实现了。文章可能讲得有点罗嗦,很多简单的东西都讲了。我是修改了ETM(Edita…

【Qt】错误GL/gl.h: No such file or directory的解决方法(以及cannot find -lGL解决方法)
1、问题描述 QtCreator第一次编译时,报错GL/gl.h: No such file or directory 错误信息如下: /home/Qt5.6.3/5.6.3/gcc_64/include/QtGui/qopengl.h:136: error: GL/gl.h: No such file or directory include <GL/gl.h> ^2、原因分析 说明系统里…

java并发之同步辅助类CyclicBarrier和CountDownLatch
CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会…

投稿近2000,NAACL 2019接收率仅为22.6%|附录取论文名单
整理 | 若名 出品 | AI科技大本营(ID:rgznai100) 人工智能的现状及今后发展趋势如何? https://edu.csdn.net/topic/ai30?utm_sourcecsdn_bw 最近真是学术界公布论文产出结果的火热时期,距离计算机视觉领域的顶级盛会 CVPR 2019…

Lucene.Net无障碍学习和使用:索引篇
项目中可能需要再次用到Lucene.Net,利用空闲时间写了个demo,主要涉及到索引的创建、删除、更新和一个简单查询。在本文示例中,Lucene.Net的版本是2.4.0,某些类和方法与最新版本或者较旧的版本有较多不同,希望您阅读顺利…

【ubuntu】vim中鼠标选中时变成 可视模式,不能复制的解决方法
1、问题描述 配置好vim后,打开一个文件,鼠标选中文本时,选中的内容变成可视模式。 可视模式,不能将选中内容复制到剪切板 2、解决方法 在用户根目录下,打开 .vimrc ~$ vi .vimrc 将set mousea 删除或注释掉 3、我的…

Ruby11 拾遗
Agenda LoopExpressionFile Read/WriteDebugProcess & ThreadLoop while a 10 while a > 0puts aa - 1 enduntil a 100until a 0puts aa - 1 endloop a 10loop dobreak if a < 0puts aa - 1 end循环控制 breaknextbreak for x in 1..10break if x 5puts x endne…

CVPR2019|微软、中科大开源基于深度高分辨表示学习的姿态估计算法
作者 | 周强(CV君) 来源 | 我爱计算机视觉(公众号id:aicvml) 如何挑战百万年薪的人工智能! https://edu.csdn.net/topic/ai30?utm_sourcecsdn_bw 昨天arXiv出现了好几篇被CVPR 2019接收的论文。 其中来自…

本地连接受限制或无法连接怎么办?
一个非常常见的问题,就是我们家用电脑安装宽带后,任务栏上的“本地连接”图标有一个的叹号。查看状态:“受限制或无连接”,点“修复”却无法修复,显示无法获取IP地址,获得私网地址!但ADSL又可以…

糟心!苹果无人车裁员190人,程序员却首当其冲
整理 | 琥珀 出品 | AI科技大本营(ID:rgznai100) 60s测试:你是否适合转型人工智能? https://edu.csdn.net/topic/ai30?utm_sourcecxrs_bw 仅过了一个多月,苹果公司自动驾驶部门裁员的真相便已浮出水面,该…

【工具】Internet Download Manager( IDM )抓取站点
软件说明: 扒网站的好东西,免费,支持中文 下载地址(官网) http://www.internetdownloadmanager.com/ 使用方法 https://jingyan.baidu.com/article/a681b0de0be10b3b1943465d.html

2010-12-30
I want to invest in stocks to make a quick buck.我想炒股,尽快赚点儿钱花1、Which company are you going to invest in?那你打算买什么股?2、Dont put all your eggs in one basket造成不要孤注一掷。3、You need…

PFLD:简单、快速、超高精度人脸特征点检测算法
作者 | 周强(CV君) 来源 | 我爱计算机视觉(公众号id:aicvml) 60s测试:你是否适合转型人工智能? https://edu.csdn.net/topic/ai30?utm_sourcecxrs_bw 什么样的算法才是好算法? 真…