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

简介: 带宽是直播运营中最大的成本,根据前瞻网估算全行业2020年的CDN费用支出将超过300亿元,在2025年接近1000亿规模(https://bg.qianzhan.com/trends/detail/506/200715-ec767b9b.html),可以说降低带宽是成本控制中至关重要的一环。

原创 淘系音视频技术 淘系技术  2020-12-08


带宽是直播运营中最大的成本,根据前瞻网估算全行业2020年的CDN费用支出将超过300亿元,在2025年接近1000亿规模https://bg.qianzhan.com/trends/detail/506/200715-ec767b9b.html,可以说降低带宽是成本控制中至关重要的一环。


与此同时,降低带宽不应以牺牲体验为代价,当我们在观看直播时第一要求是画面清晰没有马赛克,可清楚的看到主播和直播间的各种商品。怎样确保画质高清的同时成本又可控,这里核心技术是视频编解码;


image.png

image.png

相机采集到的视频数字信号通常是yuv格式,每个像素点需要1.5个Byte来表示,以720p 25fps为例,带宽有263.67Mbps,直播1小时总流量有124.4GB,如有100万人同时观看这场直播,CDN费用会超过1亿元。好在视频图像内部帧与帧之间存在非常高的相关性,采用视频压缩技术去除相关性后,可以将带宽降低到原来的1/100-1/400。


视频压缩标准主要由ISO(国际标准组织)制订的MPEG系列和ITU(国际电信联盟)制订的H.26X系列,从1990年代开始,视频压缩行业经历了三代主要标准,分别是H.262/MPEG-2、H.264/AVC、H.265/HEVC,每隔十年时间,视频压缩标准升级带来的压缩率会提升一倍。HEVC(H.265) 作为比AVC(H.264)更新一代的视频压缩标准,提供了更灵活的编码结构和划分方式,并在运动补偿、运动矢量预测、帧内预测、变换、去块滤波、熵编码等方面进行了大量改进与优化,得益于这些新的编码工具和特色技术,相同画质下最高可以比H.264节省一半码率。


现有的hevc编码器存在诸多问题,不能满足需求。比如手机芯片的硬编码画质较差,开源的软编码器X265速度慢且压缩性能也不理想,在业界闻名的MSU编码器2019比赛中,X265相比X264的码率节省23.4%,PSNR指标排名第一的编码器(腾讯V265)相比X264可以节省52.3%的码率。


S265是淘系技术团队联合阿里云开发的高性能H.265编码器,具有高压缩,高效率,适应场景广三大特点,以2019年比赛的100个1080p视频10个码率点为测试基准,S265相比X264可以节省56%的码率,领先腾讯V265 4个百分点。目前S265已在淘宝直播、优酷视频、阿里云MTS、VMate、钉钉会议等业务中上线使用,经过档位调教的S265对比开源X265可实现BDrate 20%以上的增益且编码速度提升100%-600%;淘宝直播相对于去年,在线规模增加超过一倍,年总成本几乎未增加,S265也起到了至关重要的作用。


S265 JCTVC class B~F sequence


Ali265 VS   X265(RC=ABR)

Ali265 VS   X264(RC=ABR)

速度档次

BitSaving@

Same quality

SpeedRatio@

same bitrate

BitSaving@

Same   quality

SpeedRatio@

same bitrate

Veryfast

-20.2%

210%

-40.7%

55%

Medium

-18%

396%

-42.3%

66%

veryslow

-21.5%

620%

-50.4%

62%


目前淘宝直播已全量支持S265,在800kbps下实现720p的高画质压缩。今年双十一,在PC直播中还上线了1080p高清直播。为了满足实时流量调控和低延时直播需求,S265还支持秒级码率调控和极低延时压缩模式。在优酷点播中,S265实现了10bit HDR,并实现非实时极致压缩能力,为优酷双十一节省大量带宽成本;


S265的优化思路,从码率控制、编码工具两个方向优化编码质量,并从快速算法及工程算法两个方向进行速度优化,分别在编码质量、编码速度和编码延时3个方面得到大幅改善。


image.png



基于感知模型的编码质量优化



码率控制的目标是把码字分配到更有价值的地方, 从而在目标码率下使得编码失真降到最低,或者在失真固定的前提下使码率降到最低。


在帧级别码控中,传统方法统计所有已编码帧的长期复杂度, 根据单一因素算出的QP不能及时响应画面的变化。我们基于cutree理论准确估计预分析长度中IBP帧的码率占比和预期编码大小,从而在编码前获得更准确的量化系数。


ABR是常用一种码率控制方法。但HM中基于𝑅 − 𝜆模型的码率控制方法没有考虑图像块之间的参考强度关系,编码质量比较差。X265,X264中采用的MB-tree方法帧的QP定制不合理,码控的准确度比较差,平均只有89%。我们根据“每1个bit被分配到任何一个CU,产生的边际价值都相同”这样一个原则,对MB-tree方法进行了理论创新,使得编码精度提升到了97%,且编码质量提升了0.65db,对应17%的码率节省。


第1个,I帧的QP推导,X265使用了一个经验值,没有考虑到视频本身的特性,这样做很不合理,我们用预分析中低分辨率图像的复杂度和目标码率,经过多次迭代搜索得到准确的QP;


第2个,随着时间的推移,历史帧的复权重越来越高,新产生的帧权重越来越低,导致其不能很快的响应复杂度的变化,我们根据新产生的帧的参考强度计算出一个Qlamda,跟原来的Q做加权得到真正的Q,可以及时的反应新产生帧及其后续帧的复杂度;


第3个,原算法采用基于Viterb的P帧决策算法,每个帧都需要跟历史帧比较,复杂度很高,并在判决P帧时没有考虑QP的影响,准确率也不高。我们的算法只需要计算相邻帧的变化率,并引入QP来作为判决阈值,大幅降低了计算复杂度并提高了准确度。


块级码控分配则受时域cutree和空域AQ影响,s265在时域上越统计噪声能量,运动强度,纹理边缘强度,以及编码配置等参数与信息传递比例之间的关系;  在空域上,则从人眼视觉系统出发,计算不同块在感知模型中的价值,将更多码率分配给人眼更具注意力的区域。


我们有一篇CCFA类论文介绍码率控制方面的优化:


An Exploration of Lookahead in Frame Bit Allocation and Slice Type Decision,

10.1109/TIP. 2018.2887200 , Zhenyu Liu, Member, IEEE, LiboWang, Xiaobo, Li, and Xiangyang Ji, Member, IEEE


image.png


在编码工具上,S265对传统的场景切换检测,帧类型决策,SAO,DEBLOCK, 两遍编码,RDOQ等编码工具算法做了改进,并实现了长期参考帧等一批编码工具。


智能码控是淘系自研的码率控制算法,普通ABR或CBR码率控制为了追求目标码率,在低复杂度场景浪费了大量码率,根据人眼主观质量模型,当psnr高于一定阈值后,再提高质量,人眼无法察觉,只会消耗过多码字。我们使用机器学习方法,根据17种历史编码信息和待编码帧的复杂度,预估出待编码帧在质量阈值以上的量化系数,并限定在ABR目标码率以下,确保每个帧都能以最合适的码率编码。


image.png


经过淘宝直播线上验证,可达到15%的省流,在钉钉直播中使用更是节省了52%的带宽并降低了62%的推流侧卡顿。


由于当前淘宝直播种类的丰富性,各种场景下的纹理,光照,背景,运动程度都是不一样的。户外主播经常走动,画面帧变化幅度频率高。美妆主播大多坐在室内,光照基本上比较偏亮。珠宝类主播主要是拍摄物品,画面多静止不动。单一的编码器配置并不能满足当前淘宝直播的需求,如何针对内容选择最佳参数成为业界研究的方向。


image.png


在此需求下,我们提出了基于不同场景的编码参数配置策略。首先,我们通过多个深度学习与机器学习模型对数万条各种内容的直播视频进行了数据训练分类,使用大规模服务器集进行最佳编码参数搜索,自动化高效地搜索到适合当前视频编码的最佳编码参数组合,在提升画质的同时能尽可能地减少码率消耗。并最终根据编码参数集进行聚类分为多个参数配置项。通过此方法,我们在淘宝直播里面获得了7-10%的BDrate收益,在淘拍生产中获得了大于10%的BDrate收益。



编码速度优化,实现全量H265



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


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


image.png


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


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


image.png

RDO-CU划分决策

PixeIEstModedecision

CNNModedecision决策准确率72%提高到96%

Coih

(dn+dy

20ooo

O0od

M杰

EM-max(d+dyr)

0O

Er-mar(Qp2,Q)

ooo

5.4KOPS

Homo:Ep<2Et&&EKQP

CNN

OutCheck

Others

Comp:Ep>4Et&&E>2QP

Comple

HOMO

HOMO

Weak

Complex

Homo

Nx2N

Edge

Start

PixelEst

CTU

Complex

Strong

NxN

Edge

Output


这个成果我们在 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。


image.png

RDO-失真估计

问题陈述

在RDo过程中需要计算失真,失真

ssE-Li(P-p)

一般用SSE-Z;(Ppii-p)来表达

DistortionByPass

其中pij表示原始图像,pl表示重

lnput

DCT.9

建图像,为了获得重建图像,需要

完成对此图像块的编码和解码过程,

非常占用计算资源.

Pred

Entropy

解决方案

DCT变换具有能量不变性,可在频

IDCT.1Q

域中直接计算失真,只要得到量化

ByPass

残差即可,避免反量化,反变换,

重建,SSE计算操作.

SSE-Li()

EOcodERMODE

bd-psnr

10%

100%

0.023db


RDO的另一个部分是码率。


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


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


image.png


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


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


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


image.png

RDO-AZB决策

身高Ih

问题陈述

AZB(AIlzeroblock)是全零块的简

称.

通过顿内幢间预测后,失真非常

小的块再经过量化残差系数为0,

但事先并不知道量化后系数为全

0,还是会经过复杂的RDO计算;

解决方案

预测完成后,提前计算SATD,根

据闽值预判全零块

EOCODERMODEBDPSNR

SATDb*Qstep42?

5%

0.01db

50%


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


image.png

运动搜索优化

TX1PUFME60点全摸172032147456加法24576将344064nstuctions

5745nstructions

优化后:

问题陈述

R(oyAr+By+Cay+Dia+

ME-IME+FME,耗时比例2:8

全搜索:

(-1.-1)

60point

(0,-1)

(1,-1)

横+三源味星味源品品车品店

普通快速搜索:8point

我们的方法:

1point

整像素

解决方案

(-1.0)

(0.0)

建立二元二次误差平面方程,用9

R

个整像素点来的预测误差来求解方

晖晖澡

A9

上盟

9

程的5个系数,再对方程求偏导,

e

一均日汤

可得到最佳分像素点的位置.只需

15个分像素

计算1个1/4像素点.

(1.1)

bd-psnr

Mode

Eocoder

2AE-CD

2BD-CE

OR

R

12%

0.016db

600%

CO-AABUWAN

C2-AAB

0

D

YMEGZHEYLCAO


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


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


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


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

 

image.png

顿内预测优化

问题陈述

33种角度预测

H.265幢内预测模式的方向有33

种,如果全部遍历这些模式会消耗大

量计算资源

解决方案

采用基于贝叶斯模型的快速快策

方法,先根据图像特征决策

横向和竖向的两个方向,减少50%计

算量,再在选定方向采用快速搜索.

总次数从33计算减少为9次

VHC

RDO

CandList

bd

Eocoder

Mode

-psnr

17->6

33->17

2%

300%

-0.012db

专利A14257-IP172548一种基于分类的图像顿内预测方法



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


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


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



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



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


image.png

image.png


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


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

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

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


    image.png

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

image.png

经过以上多种方法结合,我们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%以下。


image.png


许多人觉得优化只是写写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实时通信业务;
  3. 钉钉会议和群直播,S265对比open264 scc模式可以进一步降低一半码率;


下一代压缩标准VVC(H.266)已经公布,我们也已经如火如荼的投入到VVC编码器的建设中。预期在下一年双十一将有基于VVC的自研编码器上线,再次降低40%的带宽成本,届时大家可以欣赏到更低码率,更高质量的直播画质。

相关文章
|
6月前
|
开发工具
链游开发的成本考量因素解析
链游开发的成本考量因素解析
|
弹性计算 Cloud Native 数据可视化
企业云原生IT成本治理案例解析 - 中华财险云原生上云IT成本治理之路
从某种角度而言,中华财险基础设施团队的架构优化策略是非常朴素和实用的,通过数字化、模型化、可视化企业IT成本,用数据指导和优化IT成本治理,将集群的闲置资源率从上云前的30%优化到10%以内。企业IT成本治理向来不是新技术的试验场,选择合适自身情况的方案,用数据量化结果,有理有据地驱动企业降本增效。
企业云原生IT成本治理案例解析 - 中华财险云原生上云IT成本治理之路
|
Kubernetes 监控 Cloud Native
直播预告|企业云原生 IT 成本治理方案解析
云原生技术作为时下最先进的上云方式,成为了大多数企业进行IT信息化转型的最佳选择,如何通过云原生技术有理有据地降本增效是困扰每个IT资产管理员的难题,在本次直播中会为大家解析阿里云云原生企业IT成本治理方案的理念与思路,让企业上好云,用省云。
直播预告|企业云原生 IT 成本治理方案解析
|
数据建模
4种软件成本估算方法解析
当下行业内在进行软件成本估算时,常用的有4种估算方法。这4种软件成本估算方法分别是:以“估”为主的——经验法和类推法。以“算”为主的——类比法和方程法。
1644 0
|
3天前
|
Java Android开发
Android12 双击power键启动相机源码解析
Android12 双击power键启动相机源码解析
12 0
|
3天前
|
分布式计算 Java API
Java8 Lambda实现源码解析
Java8的lambda应该大家都比较熟悉了,本文主要从源码层面探讨一下lambda的设计和实现。
|
4天前
|
算法 Java Go
ArrayList源码解析
ArrayList源码解析
9 1
|
4天前
|
存储 安全 Java
【HashMap源码解析(一)(佬你不来看看?)】
【HashMap源码解析(一)(佬你不来看看?)】
10 1
|
11天前
|
缓存 Java 开发者
10个点介绍SpringBoot3工作流程与核心组件源码解析
Spring Boot 是Java开发中100%会使用到的框架,开发者不仅要熟练使用,对其中的核心源码也要了解,正所谓知其然知其所以然,V 哥建议小伙伴们在学习的过程中,一定要去研读一下源码,这有助于你在开发中游刃有余。欢迎一起交流学习心得,一起成长。

推荐镜像

更多