腾讯技术开放⽇保障视频连线画质清晰且流畅,腾讯会议有这些
优化实践
腾讯会议⾃去年12⽉底推出,在疫情期间极速扩容,⽇活跃⽤户超过1000万。⾯对数量庞⼤的⽤户,以及他们背后⽹络、设备的多样性,该如何针对各个场景进⾏优化以提升⽤户体验?在【腾讯技术开放⽇ · 云视频会议专场】中,腾讯多媒体实验室视频技术专家王诗涛针对视频编码技术优化实践进⾏了分享,讲述如何利⽤视频技术达到清晰流畅,低延时的⽤户体验。
屏幕分享场景编码技术优化实践
在视频会议中,视频的应⽤场景分两部分:屏幕分享和摄像头视频。屏幕内容是由电⼦设备⽣成的图像,摄像头内容是由摄像头采集的视频,两种视频内容的特征差异巨⼤。
传统的视频编码采⽤的是预测加变换的混合编码结构,这种⽅式适合摄像头采集的视频。但是对于屏幕内容,它的编码效率不太好。为了提升压缩效率, HEVC (High Efficiency Video Coding)针对屏幕内容专门推出了HEVC-SCC编码标准,可以⼤⼤提升屏幕内容的编码效率。
HEVC-SCC在HEVC原有标准的基础上,增加了帧内块拷贝、调⾊板模式、⾃适应⾊彩转换、⾃适应运动⽮量精度⼏个编码⼯具集。这⼏个⼯具集中,帧内块拷贝(IBC)和调⾊板模式(Palette Mode)对视
频压缩效率的提升最为明显。IBC采⽤当前帧已重建块作为预测块,可以认为是基于当前编码图像内的运动补偿;Palette Mode枚举颜⾊值⽣成颜⾊表,然后为每个样本传递⼀个索引以指⽰它属于颜⾊表中的哪种颜⾊,它特别适合颜⾊数⽐较少的编码块。根据官⽅统计,对于屏幕内容,在HEVC的基础上增加IBC和Palette Mode两个⼯具集,可以带来50%以上的压缩效率的提升。
1. TSE兼顾压缩效率与编码复杂度
腾讯会议多少钱一个月加⼊SCC(屏幕内容编码技术, Screen Content Coding)虽然可以提升压缩效率,但是同时也带来了编码复杂度的急剧增加。对于腾讯会议这种实时通信场景,编码复杂度过⾼会影响实时性,⽆法得到应⽤。因此,我们在实现了IBC和Palette编码后,也做了⼤量性能优化,推出了屏幕内容编码器TSE (Tencent Screen Encoder)。
我们在算法实现、模式选择、汇编优化等⽅⾯对TSE编码器做了全⽅位优化:
对于IBC编码模式,采⽤了基于hash表搜索的运动估计代替传统的基于块匹配的运动估计。对于8x8块,我们将其分成4个4x4个⼩块,计算它的hash值,然后将这个块的坐标存⼊该hash值对应的链表。另外,对于hash查的顺序也做了优化,位置较近的点先计算,⼤⼤提升hash搜索速度。
对于Palette编码,最复杂的模块就是颜⾊表的⽣成和查颜⾊表,我们在YUV数据⽣成颜⾊表数据以及根据YUV数据快速查到颜⾊表中最匹配的颜⾊数据⽅⾯做了⼤量优化,提升调⾊板编码速度。
除了IBC和Palette本⾝的算法优化,在模式选择、快速算法⽅⾯也做了很多优化,⽐如通过帧内帧间预测结果提前退出Palette模式判决等。
此外也加⼊了SIMD优化,进⼀步提升速度。
经过优化之后,TSE编码器相⽐开源的X265编码器在各⽅⾯都具有明显优势。⾸先来看压缩效率,对于摄像头采集的数据,TSE的压缩效率有20%左右的提升。对于屏幕内容,TSE的提升更加明显,相⽐X265(ultrafast)的压缩效率可以提升70%以上,对它的medium模式也可以提升50%以上。
在编码速度⽅⾯,TSE也相⽐X265有明显优势。对于屏幕内容序列,TSE的编码速度不到X265的⼀半,对于摄像头序列,也是⽐它要快10%以上。
除了客观质量数据的提升,TSE在图像主观质量⽅⾯的提升也是⽐较明显的。左边上⾯是⽤X265编码的,下⾯是⽤TSE编码的。可以看到采⽤X265编码,⽂字周边噪点⾮常多,整体质量较差。⽤TSE编码之后,⽂字周边⾮常清晰⼲净,图像质量明显优于x265。除了⽂
字,TSE在纹理⽅⾯保真度⽅⾯也有优势,右边这两个图中,采⽤TSE编码后,很好的保留了原图的纹理轮廓,线条会更加细腻清晰。
2. YUV444编码解决颜⾊失真、⽂字模糊问题
对于屏幕分享场景,除了采⽤SCC相关编码技术,我们也推出了YUV444编码技术。
我们⼀般的视频编码都是采⽤YUV420格式,这种编码模式会对UV⾊度分量进⾏下采样,⽽下采样会导致颜⾊出现失真。⽐如下⾯这张图,上⾯是发送端,这张图是彩⾊的,但是经过屏幕分享到接收端后,它变成了⼀张灰度图。
为了解决⾊彩失真的问题,我们在TSE⾥⾯采⽤了YUV444编码格式,来解决因为⾊度降采样导致的颜⾊失真。⽽且,根据相关资料,在YUV444编码模式下,SCC更能发挥压缩效率⽅⾯的优势。
这⾥有⼏个对⽐图,可以看到YUV444编码的图像,⽂字会更加清晰,颜⾊也会更加接近原图。
摄像头场景编码技术优化实践
1. SVC编码
前⾯我们介绍了屏幕分享场景下的优化,接下来我们来介绍在摄像头场景下的编码优化。我们都知道视频编码⾥有三种帧类型,I帧、P帧、B帧。在实时通讯场景下,⼀般是IPPP的编码结构,逐帧参考,也就是参考前⼀帧,⼀般不会使⽤B帧。
对于视频会议场景,多⼈会议中各个⽤户的⽹络情况可能各不相同,有的⼈⽹络⽐较好,有的⼈⽹络条件差⼀些。如何适配不同⽤户的⽹络状况,在各种⽹络状态下都能获得⼀个⽐较好的视频体验呢?
举个例⼦,视频会议有三个接收端,下⾏带宽分别为1M、2M和4M,那么发送端应该编码多⼤的码率呢?如果只使⽤1M的码率发送,可以满⾜接收端1的要求,但是⽹络⽐较好的接收端3本来有4M的下⾏带宽,也只能收到1M的码率,他的视频体验就会被影响。那么如果发送端直接下发4M的话,接收端1可能会卡死,⽽它卡死之后会申请I帧,发送端发I帧,也会影响其他⽤户的体验。
为了解决多⼈视频会议中的这个问题,优化体验,腾讯会议采⽤了SVC灵活分层编码技术。SVC采⽤分层参考机制,以上图为例,会把所有的帧分成三层,D0层只能参考D0层的帧,D1层可以参考D0层或者D1层的帧,D2层可以参考所有层的帧。
这样做的好处是,如果⽤户⽹络⽐较差的话,只需要发D0层的帧过去,这样即使只收到0、4、8号帧,也可以正常的解码。同时对于那些⽹络⽐较好的⽤户,可以把所有的帧都发过去。SVC灵活分层编码技术既保证了⽹络好的⽤户的视频⾼清流畅体验,⼜能保证⽹络带宽⽐较差的⽤户的基本的视频体验,⽽有效的解决了多终端⽹络适配的问题。
这⾥有⼀个采⽤SVC编码和普通编码的对⽐效果。左边这个采⽤普通的IPPP参考模式,它基本上是卡死的,⽤户体验⾮常差。右边这个采⽤SVC编码,可以看到虽然相对全帧率它的帧率有些损失,但是能够保证基本的视频通讯体验。
2. ROI编码
ROI (Region of Interest) 编码很多⼈⽐较了解,是基于感兴趣区域的编码。在摄像头场景下,我们主要关注的⼀般还是在⼈脸区域,对背景区域的关注低。腾讯会议加⼊了⼈脸检测算法和基于ROI的编码算法,实时检测出⼈脸区域,然后将它传⼊编码器,编码器进⾏帧内的码率重分配,对⼈脸区域增加码率,提升编码效果,对⾮ROI区域降低码率,保证总的码率不超出。
视频会议对实时性能要求很⾼,所以对算法的复杂度也⽐较敏感,所以我们研发了⼀套⾼效的检测算法,可以把⼀帧1080P的图像检测耗时控制在0.5毫秒以内。基于ROI区域优化码率控制算法,可以在低带宽下提升主观质量,在⾼带宽下可以保证主观质量基本不变的情况下,降低20%到30%左右的码率。
灵活多变的编解码策略
前⾯我们介绍了⼀些腾讯会议在视频编解码⽅⾯的优化技术。最后我想说的是,视频编解码的优化,不单单是编解码内核的优化,还有与之配套的⼀系列编解码策略的优化,编解码模块与采集,渲染,⽹络等模块是深度耦合的,只有系统级的优化,才能获得最佳的视频效果。
在视频会议场景下,除了软件编解码,还有硬件编解码。两种编解码各⾃的优劣⾮常明显,软件编解码压缩效率⾼,硬件编解码功耗低,省电。在不同的场景、不同的平台上,需要选⽤不同的软硬件⽅案。
另外,编码分辨率,帧率的选择也是影响视频效果的重要⽅⾯。⽐如到底是选择⾼帧率低分辨率还是⾼分辨率低帧率?在固定码率下,如何根据场景运动剧烈程度来动态调整帧率、分辨率,⽐如PPT场景,屏幕静⽌的时候,我们可以降帧率。
针对不同的机器性能配置,在编码的时候也需要选⽤不同的preset档位。对于性能好的机器就会以复杂度优先考虑,以提升编码质量;对于性能⽐较差的机器,就会以速度优先来牺牲部分的编码质量,保证基本的视频体验。
SVC编码的策略调整也是⾮常重要的。SVC虽然多⼈视频场景下,⽹络适应性好,但是SVC编码相对普通参考帧模式,压缩效率是有损失的。所以什么时候采⽤SVC,什么时候采⽤普通参考帧模式也是很有讲究的。我们需要根据⽤户⽹络下⾏带宽动态的开关SVC。⽽如果⽤SVC的话,也要根据⽤户的⽹络,动态调整SVC下发层数。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论