新闻中心

EEPW首页 > 消费电子 > 业界动态 > 腾讯多媒体实验室:视频编码技术在多场景下的应用实践

腾讯多媒体实验室:视频编码技术在多场景下的应用实践

作者:时间:2020-09-24来源:腾讯技术工程收藏

大家好,首先感谢TLC大会组委会的邀请,有这个机会在这里跟大家一起交流分享。我先做个简单的自我介绍。我叫王诗涛,目前就职于腾讯多媒体实验室,我的主要研究方向是视频编解码和图像压缩。我是2013年入职腾讯,先后负责 QQ视频通话,腾讯云互动直播SDK,腾讯会议和云游戏等实时音视频场景下的视频技术开发,同时我也负责图片压缩技术的研发,主导开发了TPG图片压缩格式。

本文引用地址:http://www.eepw.com.cn/article/202009/418708.htm

今天我给大家分享的主要内容分为三大部分,第一部分是腾讯会议的技术优化介绍。第二部分是介绍我们将用于图像压缩的探索实践。最后一部分会介绍我们近两年在云游戏场景上面的一些技术的优化。

1. 腾讯会议视频编码技术攻坚战

首先我们来看我们在腾讯会议上做的一些视频技术优化,2020年,对大家来讲是一个很不平凡的一年,这一年因为疫情的爆发,改变了大家的工作和生活方式,也正是因为疫情让腾讯会议这一款产品备受关注,成为了爆款。其实腾讯会议推出的时间并不长,我们是在2019年底的时候才发布这款产品,发布不到一个月,疫情就爆发了。我记得我们发布之初的DAU才几千人,疫情爆发之后,不到两个月的时间DAU就突破了1000万。因为用户的爆炸式增长导致我们的流量带宽也呈现指数级增长,为了节省带宽成本,我们在视频编码这一块做了大量的优化。

1.1 H.265编码技术优化

首先就是优化H.265编码技术。我们知道现在主流的视频编码格式是H.264和H.265, H.265比H.264的压缩效率要高50%左右,但是它的编码复杂度也会比H.264高很多。如果要在腾讯会议这种实时场景下应用的话,肯定是要做大量的性能优化的。我们对编码算法的各个模块,比如说块划分,帧内帧间预测等都做了大量的算法优化,包括模式选择快速算法和提前退出算法,同时也做了很多工程类优化。比如说优化数据结构,减少内存拷贝,汇编优化以及多线程优化等。经过优化之后,我们的编码器相比于开源的X265,无论是在压缩效率,还是在编码速度方面都是有很大的优势的。我们的编码速度比X265-Ultrafast还要快一倍以上,同时压缩效率高30%以上。

1600904152566027.png

1.2 摄像头视频场景下的编码优化

除了编码内核优化,我们也针对视频会议这个场景做了很多专项优化,第一个是ROI编码,ROI编码也叫感兴趣区域编码,对于会议里面的摄像头视频,大家可能更关注的是人脸区域,而对背景区域关注度较低。所以我们采用ROI编码来提升人脸区域清晰度,提升主观质量。ROI编码包含两个模块,一块是人脸检测,或者说肤色监测,另外一块是ROI编码。对于人脸检测模块,我们采用了快速高效的检测算法,每帧1080p图像的检测耗时可以控制在0.3ms以内,对整体编码性能影响非常小。完成人脸检测之后,我们会在编码前对码率控制进行调整,对于ROI区域增加码率,提升编码质量,对于非ROI区域则适当降低码率,以保持总体码率的平衡。我们的ROI编码效果是非常明显的,在低码率下可以明显提升视频主观质量,高码率下可以节省20%以上码率,同时保持主观质量基本不变。


除了通过ROI提升编码效果,我们也在提升视频网络抗性方面做了很多工作。比如SVC编码技术。通常视频会议是多方接入的,参会人可能有三五人甚至更多,每个接入用户的网络状态是不一样的,有的用户网络好,有的网络状况很差,这就给编码端带来了难题,如果发送端为了确保网络差的用户能正常通信而发送一个低码率视频,就会影响到网络好的用户的视频体验,而如果为了保证网络好用户的视频效果发送高清视频的话,网络差的用户的视频就会卡死。

1600904437672539.png

为了解决这个问题,我们在编码端采用了SVC编码技术。我们将编码视频分成三层,其中基本层只能参考基本层,增强层可以参考基本层也可以参考增强层,这样的话,只要基本层不丢失,那所有的基本层的视频帧都能正确解码,不需要申请I帧。这样做的好处是,对于网络很差的用户,我们只给他下发基本层码流就可以了,保证他的基本通信,而对于网络好的用户,我们会下发所有层,确保用户能够享受到高清流畅的视频体验。SVC编码技术很好的适配了各种网络状况的用户,避免了一个接收端的网络不好影响到其他接收端的视频效果。

1.3 屏幕分享场景下的编码优化

前面介绍的是我们在摄像头视频这个场景上做的一些优化,接下来我再介绍一下我们在屏幕分享这个场景上面的一些优化。屏幕分享是视频会议的一个主流场景,屏幕分享的内容是计算机生成的屏幕图像,屏幕图像和我们用摄像头采集的视频,是有很大的不同的。比如说屏幕内容图像通常是没有噪声,色调比较离散,线条比较细腻,而传统的摄像头视频是有噪声,色调连续的,而且纹理通常比较复杂。

传统的视频编码技术采用的预测+变换的混合编码结构,它主要针对的是摄像头视频,而对于屏幕内容,它的压缩效率是不太高的,经过变换编码后,很多高频分量会损失,导致细节丢失、为了提升屏幕内容的编码效率,HEVC在16年的时候专门推出了一个针对屏幕内容编码的档次,叫HEVC-SCC。SCC极大的提升了屏幕分享这种场景下的编码效率。

SCC里面有两个关键技术,一个是帧内块拷贝技术,也叫IBC编码,IBC编码的时候,可以用当前帧已经重建好的块作为参考块,也就是基于当前帧的运动补偿。另一个技术是调色板编码(Palette Mode)技术,调色板编码利用颜色表和颜色索引来完成每个像素的重建。IBC和Palette编码对于屏幕内容的压缩效率的提升效果非常显著,压缩效率相比H.265可以提升50%以上。为了提升屏幕分享场景下的压缩效率,我们在原有编码器基础上加入了这两个工具集,推出了一个专用于屏幕内容压缩的TSE编码器。

1600904458230414.png
1600904467744162.png

IBC和Palette编码虽然压缩效率很高,但是编码复杂度也是挺高的,为了能在视频会议这种实时场景应用,我们对TSE编码器做了大量的性能优化工作,比如基于hash的运动估计,快速颜色表生成及查找算法,提前退出算法以及汇编优化等。经过优化之后,我们的TSE编码器的总体性能达到了业界领先的水平。我们这里有组对比数据,编码效率方面,我们的TSE编码器比X265-Ultrafast高70%以上,编码速度不到X265-Ultrafast的一半。除了客观质量方面的提升,TSE对主观质量的改善也是很明显的,采用TSE编码生成的图像,文字效果要明显好于X265的编码效果,另外,TSE编码输出的图像的线条也更加的清晰细腻。


1600904497893525.png

1600904697262090.png

1600904509578789.png

除了屏幕内容编码技术,我们在屏幕内容的编码方面,还增加了YUV444编码模式的支持。由于人眼对色度分量不太敏感,通常摄像头视频一般会在编码前对色度分量进行一个下采样,编码的时候采用YUV420格式,这样可以节省带宽,同时整体的主观质量影响不大。但是对于屏幕内容序列,因为本身它的色彩是非常丰富的,如果我们对色度分量进行下采样的话,会严重影响图像的重建效果。而且这种损失是不可逆的,它没法通过后面的编解码环节补偿回来。为了解决色度下采样带来的颜色失真问题,我们支持了YUV444编码模式,YUV444编码由于没有色度下采样,它编码之后的图像视觉质量和原图非常接近。相比于YUV420编码,主观质量有很大提升。

2. 视频编码在图像压缩领域的探索实践

前面介绍了我们实验室在视频会议这个场景上面的一些视频编码技术的优化,接下来第二部分我将介绍一下我们在图片压缩这一块的一些探索实践。

我们在前几年的时候推出了一个名为TPG的图片压缩格式,它是一个基于avs2的图片压缩格式,我先简单介绍一下我们TPG格式产生的背景。我们早在14年、15年的时候,就开始了图片压缩的优化工作。当时收到很多业务的反馈说图片的流量带宽成本比较大,看我们能不能帮忙节省图片带宽流量成本。当时互联网行业用的比较多的图片格式是jpeg和webp,jpeg是一个很古老的格式,它的压缩效率是比较低的,webp是谷歌在10年左右推出的一个基于VP8的图片编码格式。

我们当时就想,VP8是和H264同一时代的标准,既然可以用VP8来做图像压缩,那为什么不用最新的H.265编码标准呢,为了验证H.265方案的可行性,我们做了大量实验,发现采用H.265进行图像压缩,其压缩效率要远远高于jpeg,也大幅领先于webp,也就是说采用H.265进行图片压缩是完全可行的。考虑到H.265的专利风险性,我们就采用了压缩效率和H.265相当的AVS2作为内核,推出了TPG图片压缩格式。

我们的TPG图片编码系统包括RGB转YUV模块,编码模块,TPG格式封装几个模块。为了支持一些图片特有信息,我们的TPG加入了很多功能扩展。比如对Alpha通道的支持,传统的视频编码是没法编码RGBA数据的,为了能够加入Alpha通道信息,我们将RGBA数据分离成RGB数据和Alpha数据,然后将两个通道的数据分别进行编码,最后将编码后的数据合成在一起输出一个TPG码流。还有就是对于动态图片格式的支持,我们知道传统的gif图像编码由于没有利用图像之间的相关性信息,它的压缩效率是很低的,我们的TPG采用视频编码的模式对动图进行压缩,在保持主观质量基本不变的情况下,编码效率大大提升,同时,为了和gif保持特性一致,我们在TPG里面加入了颜色表、延迟时间等信息,确保TPG的图片展示效果和gif完全一致。

1600904546927599.png

经过不断完善,TPG格式的功能不断健全,压缩效率优势明显,根据我们的对比测试结果,在同等主观质量下,TPG的压缩效率比jpeg高45%以上,比png高60%以上,比gif高85%以上。

我们除了优化TPG编码内核提升压缩效率,也实现了一整套TPG转码方案。在h5页面接入方面,我们和公司内的X5内核团队合作,推出了一个CDN+X5内核的无痛接入方案,X5内核里面原生支持我们的TPG格式,在请求图片的时候,请求头里面会带上image/tpg标识,只要业务是用的X5内核,业务上层不需要做任何改造就可以轻松接入TPG图片格式;在腾讯云开发接入方面,腾讯云数据万象和微信小程序内核已集成TPG的转码方案,接入云开发就直接使用TPG格式;除了H5接入和腾讯云开发的方案,我们也实现了终端native接入的方案,提供全平台的TPG解码器,业务只要集成了我们的解码器,就可以解码出RGB数据,之后完成渲染。

在服务端,当用户请求图片的时候,首先会判断终端是否支持TPG,如果支持TPG的话,就看OC节点是否有TPG缓存,有缓存就下发TPG,否则回源查看是否有 TPG副本,如果有就缓存到OC节点下发TPG,否则启动TPG的转码同时下发原图。

前面介绍了我们TPG格式的一些特性以及转码方案,这里总结一下TPG的优势。首先它的压缩效率高,相比jpeg,png和gif优势明显;TPG有完整的解决方案,支持CDN+X5内核的H5接入和终端native SDK接入,支持linux、windows,mac,ios,android全平台,另外为了支持浏览器,我们也推出了TPG的js版解码器;功能方面,TPG增加了对alpha通道和动画的支持。

正是由于TPG有这么多的优点,TPG格式推出后,在公司内外得到了广泛的应用。目前公司内已经有超过60家业务接入了我们的TPG图片格式。我们可以看下业务接入TPG格式后的效果对比。手Q H5页面为例,采用tpg图片格式后,手Q H5页面的流量节省了50%以上,除了带来流量的节省,TPG在体验优化这一块的效果也是比较明显的。这里有一组业务的页面测试数据,采用TPG格式后,页面的总图片大小,减少了近50%,同时页面加载速度提升了近1/3。

1600904583811621.png

为了在行业内进一步推广TPG格式,我们也做了TPG的标准化工作,我们在17年的时候向AVS组织提出了建立互联网图像标准的提案,并且成功将TPG纳入AVS2的第7部分图像容器,目前AVS2-P7已经在国家标准的申报流程中,相信在不久的将来就会正式发布为国家标准。

3. 云游戏场景下编码技术优化

前面介绍的是我们在会议和图片压缩场景的一些技术优化,最后一部分我会介绍一下我们在云游戏场景下的一些研究。

首先简单介绍下什么是云游戏?云游戏是一种以云计算和串流技术为基础的一个在线游戏技术,它将游戏渲染放到了服务器端,而不是在用户的终端设备上进行本地渲染。云游戏把游戏玩家的操作指令直接发送到云端,由云端来完成图像渲染,渲染后的图像会被编码成一个视频流,然后把这个视频流发到用户的手机或者终端设备上面,完成解码显示。也就是在玩游戏的时候,其实你看到的是一个视频,由于视频编码质量高,延时小,所以效果和本地渲染看起来一样。

1600904604400239.png

云游戏有什么好处呢?首先,云游戏即开即玩,不需要下载。以前我们玩一个游戏,比如lol或者王者荣耀,我们需要先去下载一个安装包,而安装包一般比较大,这样既浪费用户时间,也占用设备存储空间。以前试玩一个游戏的成本比较高,现在的话,我可以随时随地打开就玩,轻松体验各种游戏。

其次,本地游戏需要在本地渲染,对游戏玩家的硬件设备配置要求比较高,采用云游戏后,将渲染搬到云端,对用户的终端设备的配置要求会大大的降低,以前为了玩一个重度游戏,需要去网吧,现在在家用一个普通笔记本,就可以在上面轻松的玩各种大型游戏。

还有一点,云游戏解决了跨平台兼容的问题。现在MAC电脑的用户越来越多,但是很多游戏是不支持MAC平台的。云游戏采用的视频流方案,解决了各平台终端互通的问题,MAC,手机甚至TV都可以玩端游。

云游戏有这么多好处,为什么之前一直没有发展起来呢?这里简单介绍下云游戏发展历史。云游戏的概念在2000年左右的时候就提出来了。2009年OnLine公司推出了第一款云游戏孤岛危机,接下来的近10年的时间里面,云游戏发展比较缓慢。从2018年开始,云游戏进入了快速发展时期,各大巨头开始发力, Google微软都推出了自己的云游戏,在腾讯内部也有好几个云游戏团队,比如 start云游戏,GameMatrix,腾讯即玩,腾讯云也推出了云游戏解决方案。

1600904622919304.png

为什么近两年云游戏发展突然加速了呢?我觉得主要有以下几个方面的原因,一个是云计算的普及以及边缘计算的发展,包括我们GPU虚拟化技术的成熟。另一个关键原因是随着5G时代的到来,用户的网络带宽越来越好,而且带宽成本越来越低,可以很好的满足云游戏对于高带宽的要求;还有就是我们的音视频技术的不断发展,现在硬件编解码技术越来越成熟了,而且压缩效率越来越高,为云游戏的发展提供了支撑。

云游戏它有几大模块,一块是在云端,云端主要是负责渲染和编码,第二大模块网络传输,然后再加上终端的解码渲染过程,音视频编解码技术在云游戏里面是一个比较核心的模块,云游戏的图像压缩质量,带宽成本,游戏时延等均和编解码技术息息相关,为了提升云游戏用户体验,我们联合公司内的云游戏团队,一起针对云游戏场景做了大量视频技术优化,我们也自研了一套云游戏视频引擎。

我们的云游戏引擎采用了全链路硬件的实现方案。在云端编码这块,我们采用H.265编码来提升压缩效率,支持DX纹理输入,避免CPU和GPU之间大量的数据拷贝。为了节省流量带宽,我们在编码策略这一块做了大量的优化,比如说采用动态码率,我们会在编码前对视频场景进行预分析,如果当前画面属于比较静止的场景,我们会适当降低它的码率,因为静止场景通常图像的PSNR比较高,比如在45dB以上,对于这类图像,即使降低部分码率,人眼一般感觉不出来。

而对于复杂运动区域,则会适当的提升码率,这样可以改善大运动场景下画面模糊的问题。采用动态码率技术,不但能够节省码率,视频主观质量还能得到一定提升。除了动态码率,我们还加入了一些视频前处理技术比如视频增强来提升主观质量。另外,我们也使用了ROI编码技术,可以在主观质量基本不变的情况下,节省10%左右的码率。

1600904641480320.png

客户端方面,我们windows、mac、ios、android全平台支持了H.264、H.265 1080p@60fps硬件解码,并针对各平台的解码性能做了大量优化。比如针对Android硬件解码兼容性差,延时大等问题,我们通过优化解码出帧机制,处理囤帧问题降低延时,针对不同芯片下发不同配置参数,挖掘最大潜能,同时完善我们的硬件能力检测机制,尽可能覆盖更多机型。

同时,我们也做了解码渲染一体化工作,避免GPU和CPU的数据拷贝,提升性能。另外,我们也加入了客户端能力上报,异常监测机制,云端和客户端能力协商机制,根据客户端反馈动态调整编码策略。

1600904663113386.png

经过优化之后,我们的云游戏视频引擎整体性能达到了业界领先水平。我们的采集+编码整体耗时控制在5ms以内,客户端的解码+渲染的总耗时,windows平台在5ms以内,MAC在8ms左右,Android手机的平均耗时在12ms左右,我们整体的端到端延时已经做到了行业内最低。

目前我们的云游戏视频方案已经在公司内最大的云游戏平台START全平台上线,支持了PC,移动和TV端,目前可以做到玩云游戏与玩本地游戏在体验上已经没有差别了。

以上就是我这次分享的主要内容,谢谢大家!




关键词: 视频编码

评论


相关推荐

技术专区

关闭