谷沉沉:专注视频技术十几年

2021-09-02 11:31:47 浏览数 (1)

和许多编解码器玩家一样,谷沉沉在视频领域深入探索了很多年。在腾讯十年从间,历经各个产品的,但都没有离开音视频领域。这是『下一代编解码器』系列采访的第7篇,LiveVideoStack采访了腾讯微信多媒体团队专家研究员谷沉沉,向我们讲述了自己的“音视频”十几年。

策划 / LiveVideoStack

责编 / 包研

LiveVideoStack:请简要介绍下自己,以及目前主要的工作方向,对哪些技术或领域感兴趣?

谷沉沉:谢谢LiveVideoStack的采访。我目前在腾讯微信多媒体团队任专家研究员,负责微信视频通话、朋友圈视频/图片、微信视频图片消息等业务相关的视频图像技术研究和应用开发,涉及的技术包括视频编解码、图像处理、视频传输等方面。

我做视频技术是从2004年在学校做课题研究开始的,当时在ViLab和JDL实验室主要做AVS, H264 SVC等视频编码标准方面的学术研究,加入腾讯后的这十年时间里曾参与过PC QQ、QQGame视频斗地主、手机QQ,微信等产品的视频通话功能,以及腾讯视频播放器的技术研发工作。很荣幸这十几年来能一直专注坚持在自己喜欢的视频技术上,也因此能在这个方向上获得持续深入的积累。

LiveVideoStack:能否简要介绍下,从2012年微信视频通话服务开通到现在,微信视频编解码器的演进。

谷沉沉:视频编解码是影响视频通话质量的非常关键的技术环节,微信视频通话不断发展的这五年时间里,其中的视频编解码器大致也经历了三个阶段的技术突破:

第一个阶段是编解码速度优化,为了让视频通话在移动设备上跑起来。在2010-2012年我们研发第一个微信视频通话版本的这段时期,移动设备的计算能力比较低,单核主频1.0GHz的手机已经是市面上性能比较好的手机了,而视频编码就是整个视频通话过程中计算资源消耗最大的瓶颈模块,所以我们当时的工作重点就是视频编解码速度优化,通过快速算法研究、ARMv6/ARMv7平台汇编优化、代码流程优化等手段提高编解码速度,使压缩效率和编解码速度达到最佳平衡,当时我们的视频编解码器在同等压缩效率下的编解码速度就达到了业界领先水平,保证视频通话在当时各种主流设备上都能较为流畅地“跑起来”。

第二个阶段的重点是适应视频通话传输需求的码率控制优化。随着移动设备硬件性能的发展,性能较好的设备可以支持更高帧率的视频通话,视频的发送数据量也相应增大,网络传输的问题就逐步显现,短时较大的数据量冲击会给很多移动网络带来丢包、延时等问题,造成视频卡顿,而视频通话实时性要求较高,通常没有较大的缓冲,这就要求视频编码生成的码流数据量尽可能平稳。我们针对这种实时视频传输需求,自主完成了大量的码率控制算法研究工作,从每秒码率平稳到每半秒数据量平稳,再到降低单帧数据量冲击,从常规帧率到极低帧率下的码率控制……目前我们的编码器在同等压缩效率和编码速度下,码率平稳性和时域质量平稳性都是处于业界领先水平的,极大地保障了视频数据流畅地在移动网络上传输。

第三个阶段是为了提升视频质量的压缩效率提升和主观质量优化。随着移动设备性能的进一步发展,近两年市场上出现了很多4核、8核的手机,许多设备可能比早年很多PC机的CPU处理能力都要强,这就允许视频编码器采用更高的计算复杂度来提高压缩效率。我们在原来快速档次的基础上,通过研究高复杂度的高压缩效率算法,以及基于视觉特征的主观质量提升算法等,建立了高压缩率档次,在高性能设备上采用这个高压缩率档次,提高同等带宽下的主观视频质量。

目前,我们仍然在不断研究尝试新的视频编解码技术,同时也持续研究优化与视频编解码密切相关的前后处理、容错保护、网络适配等模块技术,努力做好视频通话每一个环节的技术细节,希望以尽可能低的带宽、尽可能低的功耗,让不同网络和设备环境下的数亿微信用户都能体验到尽可能最优的视频通话质量。

LiveVideoStack:微信视频通话、图片压缩、朋友圈视频压缩这些不同应用中的编码器有什么不同的特点?

谷沉沉:我们微信多媒体团队通过多年的技术积累,自主研发了多媒体应用综合引擎——WAVE(微信多媒体引擎,WeChat Audio & Video Engine)。WAVE引擎最早应用于微信视频通话功能,经过多年的发展,目前WAVE引擎已经完整覆盖语音、图片、视频等各种媒体文件的编解码和前后处理,广泛应用于微信的音视频通话、多人通话、多媒体消息、朋友圈、公众平台等各项功能。WAVE引擎每天支撑了数亿的视频通话、数十亿的视频播放、数百亿的图片查看,在编解码速度、压缩效率上都经过了微信亿万用户的考验,是目前业界领先的多媒体引擎。

WAVE引擎的底层包含了实时通话(RealTime Profile)、图片压缩(Picture Profile)、低复杂度文件压缩(LowComplexity Proifle)和高压缩率文件压缩(HighEfficiency Profile)三个不同档次的自研视频图像编码器,以适应视频通话、图片压缩、客户端和后台视频文件压缩三类不同应用:

  1. 视频通话需要保证视频数据的实时传输,同时还有码率平稳性等传输适应性上的要求,所以只能采用低延时、低复杂度的RealTime Profile编码器,压缩效率相对视频文件压缩也较低。
  2. 图片压缩包含静态图片压缩和动态图片压缩两类应用,动态图片压缩类似视频压缩,静态图片压缩则可采用视频压缩中的I帧编码技术,由于图片压缩没有实时性要求,所以Picture Profile编码器复用了视频文件压缩中的部分技术。在此基础上,该档次还加入了图片格式相关特性的支持,比如对图片的透明通道压缩,由于其内容特点不同于自然视频,我们采取特殊的编码算法来提升压缩效率,加快编码速度,另外通过设计合适的图片容器格式支持不同应用场景的图片显示需求,以及各种图片格式之间高效互转等。
  3. 视频文件压缩有客户端和后台压缩两类应用场景。由于客户端计算能力有限,采用了低复杂度的LowComplexity Proifle编码器,压缩效率低于后台视频文件压缩,但是由于允许一定的延时和缓冲,压缩效率比实时通话档次高。后台视频文件压缩由于计算资源充足,同时又没有严格的延时要求,因此采用HighEfficiency Profile编码器,包含了各种高复杂度、高压缩效率视频编码算法,以尽可能提高压缩效率,节约海量视频文件传输的带宽成本。

关于编解码器

LiveVideoStack:什么样的编解码器是一个好的编解码器?视频质量、码率、算法复杂度、对数据丢失或错误的鲁棒性等。

谷沉沉:不同应用场景对编解码器的性能要求有所不同,对我们互联网视频应用来说,编解码器的关键指标概括起来有三点——编码效率、编解码速度和特性支持:编码效率可以用同等视频质量下的视频码率节省或增加百分比来表示,业界一般用PSNR或者SSIM等客观指标来表示视频质量,用BD-Rate来衡量编码效率对比;编解码速度与算法本身复杂度和实现方式、实现优化水平都有关系;特性支持比如流媒体点播和视频文件播放时的随机访问,实时通话应用中的传输鲁棒性、码流数据量平稳性等。

但这三方面的指标之间是存在矛盾的,比如编码效率的提升往往伴随算法复杂度的提升,这样编码速度就会下降;一些特性支持也会影响编码效率,举一个最简单的例子,I帧解码不依赖其他帧,在传输时前面的帧数据丢失不影响I帧的解码,所以传输时比P帧具有更强的鲁棒性,但是I帧的压缩效率远不如P帧。因此,一个好的编解码器是要适应应用需求,做到这三个指标的合理平衡。

LiveVideoStack:当下对于编解码器的研发,业界主要的研究方向是什么?其难点是什么?有没有一些典型或您十分看好的应用场景?

谷沉沉:我觉得一个在成熟的互联网产品中使用的视频编码器,其完整的研发过程一般包括三个阶段,每个阶段的研究工作会有不同的侧重点:

第一阶段是标准/格式的制定。这个阶段主要是一些标准组织或公司制定通用的视频编码标准,比如MPEG、H.26x、AVS、VPx、AV1等一系列标准,当然也有一些公司会根据自己的需求制定私有的编码格式,这个阶段主要是新的编码框架和编码算法研究,每一代的视频编码标准,压缩效率不断提高,当然计算复杂度也相应的增加,这是跟硬件的计算性能不断提升相适应的。在标准制定过程中,除了基准档次外,往往还有针对不同应用场景的扩展档次,比如屏幕内容编码、立体视频编码、多视点视频编码、全景视频编码、可伸缩视频编码等。近几年工业界各类视频应用的飞速发展离不开标准技术的进步,同时标准的制定也为学术研究提供了很好的平台,很多学术研究都是基于最新的视频编码标准,而一些优秀学术研究成果也会加入到标准或者影响标准发展的进程,比如最近比较流行的基于深度学习的视频图像编码,在学术界和标准组织上都是热点研究方向。

第二个阶段是实现优化阶段。这个阶段的实现优化是在遵循特定标准/格式的前提下进行,主要有两类工作方向,一类是通过快速算法和特定平台的代码实现优化来提升编解码速度,同时控制压缩效率损失,如常见的x264、x265开源工程就是H.264/AVC、H.265/HEVC标准的软件编码优化实现,此外还有一些公司自研优化实现的非开源商业编解码器,这些优化实现的编解码器编码速度相对标准参考软件往往能提升数十倍甚至百倍,可以满足各种视频编解码应用的编解码速度要求。另一类是针对不同的应用场景做一些定制的特性需求,比如x264中的multi-pass、mb-tree等选项,在离线视频文件压缩场景下,压缩效率显著提升;而前面提到的微信视频通话中的自研码率控制算法优化,也是针对视频通话应用中的视频实时传输的要求而定制的码率控制算法,提高视频发送数据量的平稳性,同时保证时域质量的平稳性。

第三个阶段是打磨稳定。虽然前两个编解码器研发阶段中都会验证编解码匹配、码率控制准确性等一系列编码器离线测试,但是在视频编解码器合入产品应用之后,还是会出现一些编解码器离线测试时难以发现的缺陷问题,特别是在海量用户环境下,任何一个极低概率出现的问题实际已经影响了千万用户,因此在这一阶段的主要任务就是提升编解码器的稳定性,进一步完善、提升编解码器的性能,保障视频服务的稳定运营。比如在微信视频通话中,我们会根据海量用户通话反馈的错误信息,对解码器做一些鲁棒性的保护,在遇到不能正常解码的“脏”数据能及时终止解码,避免crash发生等。另外,也能从线上产品应用中发现一些细节研究方向,比如前面提到我们自研的极低帧率下码率控制算法,就是在我们的编码器上线后弱网环境下视频通话时发现的,针对这些实际问题进行研究、解决问题,使我们的编码器支持场景进一步完善,性能进一步提升。经过这一阶段打磨稳定的编码器,才能支撑起海量用户稳定的视频服务。

LiveVideoStack:对于应届生或从其他研发领域转行学习编解码、多媒体开发的技术人,有哪些建议?能否推荐一些系统学习编解码、多媒体开发的图书、资料?

谷沉沉:关于视频编解码技术学习的方法,我觉得对不同学习需求的技术人可以有不同的方法:

首先,对于希望快速搭建包含视频编解码技术的应用开发者来说,x264、x265、FFmpeg等开源软件提供了视频编解码器非常好的实现方案,可以通过查阅接口文档、调用demo、阅读代码等快速了解开源软件的使用方法,完成视频应用的基本开发任务。

进一步地,对于希望学习视频技术的基础知识,以进一步优化视频业务体验的技术研发人员来说,需要首先掌握一些视频图像基础知识,可以从网络上搜索到,也可以阅读数字图像处理、数据压缩相关的书籍以更加系统的学习掌握。而像H.264/AVC、H.265/HEVC这样已有较为成熟的标准技术,网上很多技术文章、overview类型的学术论文等都可以帮助快速了解基本的技术思路,另外,加入一些技术论坛、邮件群组等加强与同行互相交流也是学习提升技术的一个很好的捷径。如果在工作中要准确了解具体的技术细节,就需要查阅标准文档、标准参考软件。

更深一层,对于希望长期从事视频技术研发的人来说,在掌握上述基本知识的基础上,还可以定期阅读国际视频领域相关的知名学术会议、期刊文献等,以及跟踪标准组织的工作进展,查阅标准技术提案,获得前沿的技术进展信息跟踪标准组织的会议情况。这是一个长期的积累过程,初次接触阅读标准技术提案可能会有点困难,因为提案不像论文那样具有对一个问题的完整描述,有时一个提案只是对上次会议上某个提案结果的一个优化,如果对这个提案技术背景不太了解,就需要追溯查阅前一次甚至前面多次的提案。这就好像从“半路”开始看电视剧,或者中间有一段时间不看了,再来继续看就需要翻出前面几集了解一下剧情,但是当跟踪了几次会议之后,如果对技术感兴趣的话也可能会像看电视剧一样上瘾,每一次会议之后都会有一种好奇心迫不及待地想去看看提案。

虽然视频编解码技术已经发展了数十年,但无论是学术界、标准组织还是工业界,依然还有很多需要深入研究、也很有意思的方向,欢迎感兴趣的同行朋友加入我们微信多媒体团队,一起来为数亿微信用户提升各类视频图像业务体验!

LiveVideoStack招募全职技术编辑和社区编辑

LiveVideoStack是专注在音视频、多媒体开发的技术社区,通过传播最新技术探索与应用实践,帮助技术人员成长,解决企业应用场景中的技术难题。如果你有意为音视频、多媒体开发领域发展做出贡献,欢迎成为LiveVideoStack社区编辑的一员。你可以翻译、投稿、采访、提供内容线索等。

0 人点赞