成本更低、更优观看体验——自研S265编解码器解析


在速度方面,s265添加了快速算法与工程两个层次上的优化。

HEVC可以将图像块从64x64划分到4x4,同时块的类型模式激增,备选的编码模式数量是h264的数倍,块划分及模式决策因此成为一个重要的瓶颈。s265从参考块及画面纹理获取先验信息, 通过层级预判,提前跳出算法以及CNN模型辅助决策三步,减少了很大比例的计算量。

我们把CU划分决策模块分成两个步骤,一是纹理强度决策,通过计算CU的纹理梯度来判别平坦块和复杂块,如果是平坦块就直接退出,如果是复杂块就继续向下划分。第一步可以解决大部分划分决策问题,但是对于模棱两可的块,则需要依靠CNN模型来辅助划分。

我们使用了一个5层网络的小模型把决策的准确度从72%提升到了96%;

这个成果我们在 DCC会议上有相关介绍:

Enhance the HEVC Fast Intra CU Mode Decision Based on Convolutional Neural Network by Corner Power Estimation

Liangliang Chang†, Zhenyu Liu⋆, Libo Wang ‡, Xiaobo Li ‡ , 2018 Data Compression Conference

我们知道,RDO包含两个变量,一个是失真,另一个是码率;

失真的计算是对原图和重建图像求误差的平方和,也就会SSE。这里首先要得到重建图像,这是一个相对漫长的计算过程,需要经过运动估计,变换,量化,反变换,反量化,重建等步骤,计算量相当大。

我们注意到DCT变换具有能量不变性,可以在变换后的频域中直接计算失真。这样就可以把后面的反变换,反量化,重建,SSE等过程Bypass掉,节省大量计算。通过此方法,可将整个失真估计模块的速度提升1倍,而bd-psnr损失只有0.023db。

RDO的另一个部分是码率。

H265在量化后会将残差系数分成4x4的sub-block,每个子块包含16个系数一起编码,编码内容包含两个部分,一是系数分布的描述,包括SCF,GTR1,GTR2,对这个部分,我们建立起统计信息的线性估计模型,根据系数特征估算其大小;另一个部分是非零系数的哥伦布码字,每个码字的阶数k是不一致的,这里我们假设每个码字都采用最佳k阶编码,再根据最大码字的分布,给予一个拖尾系数补偿。

通过这项技术,可将码率估计模块加速35.6%,而bd-psnr损失只有0.057db。

AZB (All zero block)是全零块的简称。

通过帧内帧间预测后,失真非常小的块再经过量化残差系数为0,但事先并不知道量化后系数为全0,还是会经过复杂的RDO计算;

有没有办法事先判决它是全零块?答案是可以,根据率失真理论,失真与Q的平方成正比,可以在预测后用SATD估算失真,当其小于一定阈值后就可以判别为全零块。

运动搜索是从参考帧寻找最佳匹配块的过程,包含整像素搜索和分像素搜索,分像素需要做7抽头或8抽头插值滤波,计算量大;整像素搜索已经有比较多的快速算法,但分像素搜索一直没有什么好的方法。在图中矩形的整像素周围,分布着60个分像素点,我们建立二元二次误差平面方程,用9个整像素点来的预测误差来求解方程的5个系数,再对方程求偏导,可得到最佳分像素点的位置。只需计算1个1/4像素点,避免其余59个分像素点的计算;

讲完运动搜索我们来看一下帧内预测,帧内预测利用当前块相邻的上面一行和左边一列来预测当前块的像素值;

H265有35种帧内预测模式,其中有33种角度预测,如果对这33都做计算的话代价非常大。

我们采用采用基于贝叶斯模型的快速决策方法,先计算10,18,26三个方向的代价,通过这3个方向的代价分布决策出最优角度是横向还是竖向,这里就直接把计算量减少一半,再用常规的快速算法5步法对剩下的17种方向进行计算,得到最佳预测角度。

通过这个方法,我们把33个角度计算减少到9次,提高了该模块300%的计算速度。

在rdo之外,我们还改进了slicetype决策算法,动态拉格朗日因子调整算法,快速deblock和sao决策等。

在工程优化方面我们也添加了多项优化, 首先是C函数优化,我们通过优化流程逻辑,拆分特殊路径,合并分支,查表,循环优化等方法给rdoq模块,系数解析,deblock等模块带来了接近一倍的提升;其次针对密集计算的函数我们simd化并优化汇编代码的执行速度。

在移动端设备上,我们还为S265编写了大量armv7和arm64 汇编代码,相比C版本有至少1倍的提速,在低端手机iphone 6S上实现了720P 30帧每秒的实时编码。

低时延编码,画质不降提升互动能力


在直播中,低时延意味着沟通高效率和高体验,降延时意义重大。在直播端到端延迟中,编码延迟占了很大比重。但是编码延时与与压缩效率是一对矛盾体,延时越低压缩效率也随之下降,经过我们对X264,X265的测试,在低延时(300ms)模式下,编码效率比不限定延时降低30%,在零延时模式下,编码效率比不限定延时降低50%以上。

为了提升低延时和零延时模式下的编码效率,我们采取了以下手段来优化:

  1. Cu-tree的前向短距传播技术:s265通过对缓存长度建模,得到缓存长度-时域传递关系模型,可以实现很短的缓存,仍然保留长缓存带来的质量优势。测试结果lookahead4优化后比优化前可以节省13.5%的码率,有效的降低了编码延迟,结果示意图如下。

  1. Cu-tree后向传播技术:在零延时模式下,我们没有前向参考帧可用,但可以借用后向帧来预测传播代价,通过与短距传播类似的技术来提升压缩效率。

  2. GPB技术:在零延时模式下由于没有后向参考帧,传统B帧已不可用,此时可采用GPB来代替,提高压缩效率

  1. WPP并行:帧级并行可以极大提高并行效率但会增加延时,帧内并行的wpp技术,不仅可以充分利用多核cpu的优势,而且可做到零延时。

经过以上多种方法结合,我们S265的低延时(300ms)模式对比不限定延时,压缩效率仅降低4%,零延时模式下压缩效率仅降低15%;

高性能解码器,解决客户端兼容性问题


解码面临的最大问题是兼容性和性能,要解决这里两个问题,首先需要做硬解码适配,我们将android,ios硬解h265的支持率提高到了95%和75%,剩下的5%和25%怎么办?还有web端完全不支持硬解,怎么办?

这就依赖于我们高性能的解码器;

我们开发了极致优化的h.265软解码器,手工编写汇编代码2.5万行,将解码速度提升到ffmpeg的240%,1Mbps 720p h265在小米5手机上解码速度>240fps,CPU占比控制在20%以下。

许多人觉得优化只是写写c和汇编这么简单,但实际上需要对计算机的体系结构非常了解。

举一个例子,这是一个block的滤波计算,经过SIMD优化后提高了3倍的速度;

但是我们通过内存对齐加载,计算合并,CacheMiss优化,数据预取,多核并行,分支优化,寄存器优化,延迟槽优化,最终达到63倍的提速;

总结


淘宝直播全面使用S265,实现了画质不降,码率下降超过50%,直接带来带宽成本的下降,同时,卡顿率、秒开数据也因此优化,卡顿vv下降了25%,秒开率绝对值提升了1%。

带宽压缩是编码器一贯追求,S265除了服务淘宝直播之外,还覆盖阿里视频生态中直播、点播、会议各个业务,节省大量带宽成本。

  1. 优酷长视频点播,上线S265带来了大量的码率节省,目前S265生产的视频每日播放vv超过1亿次。S265还为优酷提供10bit HDR功能支持;

  2. 阿里云MTS转码,S265在速度和画质不变的前提下,降低MTS短视频转码码率,并赋能RTC实时通信业务;

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

完结

Redis基于内存,常用作于缓存的一种技术,并且Redis存储的方式是以key-value的形式。Redis是如今互联网技术架构中,使用最广泛的缓存,在工作中常常会使用到。Redis也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一,因此作为Java开发者,Redis是我们必须要掌握的。

Redis 是 NoSQL 数据库领域的佼佼者,如果你需要了解 Redis 是如何实现高并发、海量数据存储的,那么这份腾讯专家手敲《Redis源码日志笔记》将会是你的最佳选择。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
va开发者,Redis是我们必须要掌握的。

Redis 是 NoSQL 数据库领域的佼佼者,如果你需要了解 Redis 是如何实现高并发、海量数据存储的,那么这份腾讯专家手敲《Redis源码日志笔记》将会是你的最佳选择。

[外链图片转存中…(img-v4xEA2Jv-1712924071688)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值