主页 > 澳门金沙 > 每日数亿次微信视频通话背后,靠什么技术支撑?

每日数亿次微信视频通话背后,靠什么技术支撑?

2019-04-07 09:38


2012年7月,微信4.2版本首次加入了视频通话功能,如今已发展了5年,在面对亿级微信用户复杂多变的网络和设备环境,微信多媒体团队在每个技术细节上不断地深耕细作,为微信用户提供了高质量的视频通话。今年腾讯全球合作伙伴大会上发布的《2017微信数据报告》显示,到2017年9月,微信日成功通话次数2.05亿次,月人均通话时长 139分钟,月人均通话次数19次。无论是通话次数还是通话时长都比去年增加了一倍多,这个增长速度远远高于微信用户量的增长,这与微信多媒体团队在音视频技术上的努力是分不开的。与很多互联网视频应用类似,互联网视频通话的应用目标也是希望用尽可能低的成本使视频更加清晰与流畅。上图右边互联网视频应用的代价成本包含两个维度:一是带宽成本,包括客户端用户的流量成本,以及服务器端带宽成本;二是计算资源开销,表现在服务器端的设备投入量,以及客户端的CPU占用、耗电量等,而对于性能较差的客户端设备,控制客户端的计算资源还可以保障这些设备也能支持基础质量的视频通话。第二,由于视频通话是高度实时的应用,决定了视频数据一般采用不可靠传输,这就要求视频传输具有一定的鲁棒性,比如抗丢包的特性,另外,由于没有缓冲机制,视频发送码率要尽可能平稳;下图是WAVE微信视频引擎的框图,在发送端,摄像头采集的原始视频数据,一路直接在本地小窗口渲染,另一路先经过视频前处理,再进行视频编码,之后对编码生成的码流进行容错保护,最后发送到网络上。相应地,在接收端,对收到的码流先进行错误恢复,对正确恢复的数据进行视频解码,而后通过后处理增强提升视频质量,最后经过播放控制流畅地显示在接收端屏幕主窗口上。其中QoS的反馈模块会收集接收视频的质量、网络状况等信息,通过服务器处理反馈到发送端,发送端再根据这些信息选择合适的视频编码的参数,这样就能实时适应不同的网络状况。目前,很多网络适配算法都是在QoS服务器上执行的,这样,如果新算法发布后发现问题,不用等到下一个客户端版本的发布,就可以快速地在服务器端进行修改控制,加快算法的迭代进度。上图列出了视频引擎中最关键的六大模块的技术,其中最核心的是决定整个引擎基础性能的视频编解码模块,与之密切相关的有前后处理、容错保护、网络适配模块,还有设备层的采集与显示,以及对海量用户通话情况的评价和运营体系,这六个模块技术协同配合,任何一个模块的短板都会影响整体视频通话质量。第一阶段是基础框架的搭建和性能优化,2010-2012年,第一个微信视频通话发布前后的这段时间,当时大部分主流移动设备CPU主频只有单核1GHz,为了在这样的设备上能流畅运行视频通话,微信多媒体团队在视频编解码速度优化上下了很大的功夫,当时优化后的编解码速度在同等压缩效率下已经达到了业界领先水平;在采集显示环节也采用了快速、高质量的方案,并做了大量代码流程优化以提高处理速度,如减少内存的拷贝,优化格式转换流程等;由于当时客户端计算能力是整个视频通话的瓶颈,视频帧率、码率较低,发送数据量对于大部分网络不会造成太大压力,所以第一阶段的容错保护策略非常简单,只对关键帧做保护。经过这些基础性能的优化,第一个微信视频通话版本跟业界同类产品相比,同等带宽下的视频清晰度和流畅度都是非常不错的。第二阶段是随着移动设备硬件性能的逐渐提升,一些性能较好的移动设备可以支持更高帧率的视频通话,发送码率也随之增大,于是网络适配策略就成为这一阶段的研发重点,由于实验模拟网络环境与海量用户真实的网络环境总是存在差异,所以很多网络适配算法在经过模拟环境下的验证后,还必须进行线上灰度测试,通常会随机抽取大量样本做算法的对照实验,如果在大规模样本上新算法的各项技术指标均优于现网算法,才会逐步放开到所有的通话。在这个灰度测试过程中,海量用户通话质量的评价运营体系也逐步建立和完善。第三阶段是在近两年,移动设备性能大幅度地提升,很多4核8核手机的性能甚至比早些年的PC机都要好,设备的计算性能已经可以支撑更高复杂度的计算,因此微信多媒体团队开始研发视频前后处理技术以提高主观质量,同时在视频编解码上也加入了一些高复杂度、高压缩效率的算法,使视频通话在同等带宽下可以达到更高的视频质量。在互联网视频应用中,视频编解码的核心指标概括起来一般有三个:编码效率、编解码速度和传输适应性,而这些指标之间是相互制约的,编码效率的提升往往是以牺牲编码速度为代价,传输适应性也会影响编码效率,比如容错保护时增加冗余会导致编码效率下降。所以一个好的视频编解码器需要在这些指标之间找到合理的平衡点。1)微信视频通话的场景非常多样,除了类似传统视频会议那样整体内容比较静止的场景外,还有很多运动剧烈的场景。可能很多人认为微信视频聊天通常都是手持手机摄像头对着人脸,应该都属于比较静止的视频场景,但在摄像头距离人脸较近时,人脸在视频画面中占据了较大部分,这样人脸的一点轻微运动对于整个视频来说已经是属于运动比较剧烈的内容场景,同时手持设备不稳定时还会造成视频画面的抖动,使运动更加复杂,因此微信视频通话中的编码算法必须适应多种不同的场景。2)历史版本互通兼容性,新的编码技术必须要考虑旧版本的解码兼容性,所以一旦编解码格式确定就不能频繁更新,只有当技术积累到一定程度,压缩效率有突破性的提升,才会考虑升级替换。3)主观质量是王道,对互联网应用来说,普通用户不会关注PSNR等客观质量指标,只会用眼睛来看,所以任何的客观数据都只是技术上一种便捷的衡量方式,最终的衡量标准还是人眼的主观感受。其次,在编解码速度方面,编解码算法复杂度和实现优化程度都是影响编码速度的重要因素。实现优化包括软件的快速算法和代码级优化,也包括硬件加速。随着一代又一代的视频编码标准的发展,编码效率的提升往往伴随着算法复杂度的增加,CPU难以支撑高复杂度的软件编解码计算,如果硬件视频编解码各方面性能可以满足视频通话的需求,利用硬件来加速视频编解码就可以极大地缓解CPU计算资源压力。此外,还要考虑帧级复杂度的均匀性,因为视频通话能支持的最高帧率是由序列中编码最慢的帧的时间消耗决定的。第三,在传输适应性上,要求视频码流的码率尽可能平稳,更严格地,还要控制帧级瞬时数据量冲击,以减少瞬时数据量冲击造成网络拥塞而出现丢包、延时等问题。此外,视频码流还需要具有一定的抗丢包能力。第一阶段是格式的确立,主要是根据应用的计算复杂度要求选择合适的编码标准格式,或者开发私有格式,这一阶段主要考虑编码效率,评价方式类似标准组织的通用测试条件。第二阶段是实现优化,主要是通过代码优化和快速算法优化等提高编解码速度,同时控制编码效率损失,在满足应用要求的条件下,达到编码效率和编解码速度的合理平衡。第三阶段是应用定制,针对特定的应用场景需求做一些定制的研发,达到合入产品预发布的要求。比如微信视频通话中的码率平稳性要求,以及编码参数切换支持等,都是在这个阶段通过码率控制算法优化来实现的。码率控制的难点是平衡码率平稳性和压缩效率、质量平稳性。虽然学术上有很多码率控制的研究,但实际工程应用中还是有很多问题需要考虑,如码率控制的时间单位,极低帧率、极小I帧间隔下的码率控制,单帧瞬时冲击等。上图的第一张设置目标码率360kbps的每秒数据量波动图中,紫色线是微信自研视频编解码器的码率波动情况,可以看出每秒的码率基本都稳定在360kb左右,而蓝色线表示的同等编码效率下x264码率波动情况,在一些运动比较剧烈的场景,码率会上升到420kb,明显高于目标码率,这对我们实时视频通话应用就会有很大的冲击。虽然第一张图中微信自研视频编解码器的每秒数据量波动已经非常平稳了,但第二张图中红色线表示的半秒数据量波动曲线还是呈锯齿状,这在传输中依然会对网络产生一定的冲击,为了进一步提升码率平稳性,微信多媒体团队又进行了第二轮更加严格的码率控制优化,可以看出绿线所示的现网微信视频通话版本半秒数据量波动明显比第二轮优化前的红线平稳。第四个阶段是打磨稳定,虽然前面每个阶段都会对编解码器进行编解码匹配、编解码各项指标性能等编解码器离线测试验证,但在合入产品应用后,尤其是在海量用户实际应用环境中,还是会出现一些编解码器离线测试时发现不了的问题,如主观质量的缺陷问题,需要逐一分析尽可能优化主观质量,以及当解码器接收到不能正常解码的脏数据时,需要加强解码器的鲁棒性保护,及时终止解码防止crash等。一个优化方向是码率分配微调。包含帧级和帧内两个方面:帧级码率分配微调是针对码率平稳性优化造成运动剧烈场景下视频质量损伤明显的问题。因此在完成码率控制算法之后需要根据主观质量情况对码率分配做一些微调,适当增加运动剧烈场景下码率分配以提高质量;帧内率分配微调是指,由于人眼对平坦区域更加敏感,所以也会多为平坦区域多分配一些码率。在上面这个视频中,左面是优化之前,右面是优化之后,在运动剧烈场景中,如挥手的时候,手的部位较平坦区域块效应明显减轻。前后处理的增强效果毋庸置疑,但在很多场景下副作用也比较大,比如去噪容易造成细节模糊甚至缺失,锐化可能带来锯齿效应因此研究前后处理算法的关键是要消除副作用,微信多媒体团队就是按照宁缺毋滥的原则,即每次前后处理算法的更新可以只对部分场景增强,增强的幅度也可以较小,但必须保证不会出现质量变差的场景。在算法研究阶段需要设计好场景自适应策略,对于算法无法完全解决的情况,再辅以运营策略,比如白名单、黑名单机制,对特定型号设备开启或关闭相应的算法等。光照增强问题的发现来源于微信多媒体团队的一次视频通话测试体验,在晚上室内日光灯环境下,不同手机摄像头采集的视频质量差异较大,有些手机的采集视频与真实环境光照基本一致,而有些手机采集的视频就偏暗,甚至连人脸都无法看清。针对这种情况,微信多媒体团队自主研究了一种低照度视频增强方法,先通过对单帧平均亮度和最大、最小亮度等信息的分析和统计,推导出单帧的亮度增强和对比度增强的自适应约束;为避免视频连续播放出现亮度闪烁,算法还考虑了前后帧亮度变化的一致性约束;最后对三个方面的约束做联合优化求解,由于优化项中只包含二次项,再进行快速算法实现优化,求解过程计算复杂度较低,因此整个光照增强技术可以在视频通话中实时处理。上图左上角子图(a)为低光照的输入源视频截图,(f)为微信自研光照增强算法处理后的视频截图,增强后可见脸部更多细节和背景环境的纹理,而从其余几个现有视频图像增强对照算法处理后的截图中,可以看出存在不同程度的颜色异常或增强效果不明显等问题。在信道容错方面,有分组异或、RS编码等FEC前向纠错技术。可以根据每一帧的重要性等级增加不同的冗余保护,上图中红色越深的帧表示重要性越高,它的丢失会造成更多帧解码失败,可以对这些越重要的帧增加越多的冗余保护。另外,对低延时网络,如果遇到丢包导致解码失败,可以向发送端主动请求编码I帧,避免长时间的卡顿。未来,微信多媒体团队将继续坚持以专业、专注的精神,研发实用的多媒体技术,也欢迎对视频图像技术感兴趣的优秀人才加入或开展技术研究合作,一起来不断提升数亿用户的微信视频通话等各类视频图像相关业务体验!

服务支持

我们珍惜您每一次在线询盘,有问必答,用专业的态度,贴心的服务。

让您真正感受到我们的与众不同!