基于 H.266/VVC 的移动平台 8K 超高清实时解码实践字节跳动火山引擎多媒体实验室 / 王杰西1字节跳动 火山引擎多媒体实验室 资深视频算法工程师王杰西 本硕毕业于北京大学计算机系,目前主要参与视频、图像编解码及处理相关研发和优化工作。2017年加入字节跳动,是编解码方向最早的成员之一,负责了自研编解码器大量 0 到 1 的工作,在架构设计、工具开发、算法优化、汇编加速、测试集成等方面都作出了众多独创性的贡献,并在端侧性能优化上成果显著。参与的项目服务于字节跳动每日亿级上传处理和数千亿级播放流程,应对日益增加的巨大计算挑战。3超高清视频行业进展与H.266/VVC标准简介4场景极大丰富•点播•直播•通话/会议•VR/AR•云游戏多元化生产•OGC•PGC•UGC多终端消费•电视•PC•手机/平板•汽车•头盔/眼镜5品质极致追求•超高清画质 (4K到8K)•零卡顿•超低延迟超高清视频的挑战•采集设备昂贵、稀缺•处理速度极慢,难以生产•码率过高,不能实时传输•终端解码不支持或解码卡顿•带宽成本太高•存储成本太高68K视频行业进展2019.1CES 2019大会上,8K联盟正式成立。友达光电、海信、松下、三星、TCL等加入8KA。致力于加速8K生态的发展和8K产品的普及IBC2019上,杭州当虹科技和上海海思技术联合发布了一个基于AVS3的8K端到端解决方案,包含海思Hi3796CV300芯片支持的8K机顶盒、当虹视频编码器2019.3国产标准AVS3基准档完成定稿2019.92020.22020.7三星S20手机发布,成为首个支持8K视频录制的手机新一代编码标准H.266/VVC v1完成定稿,主要面向4K/8K视频,相比上一代标准压缩率提高一倍2021.2央视牛年春晚首次采用8K直播2021.7Spin Digital与HHI合作展示基于VVC的8K60fps编解码demo2021.8东京奥运会基于Intel至强处理器平台完成8K直播7VVC应对4K/8K视频的挑战• 采集设备昂贵、稀缺• 处理速度极慢,难以生产• 终端解码不支持或解码卡顿• 码率过高,不能实时传输• 带宽成本太高• 存储成本太高•各大硬件厂商加速8K拍摄设备、播放设备的发行与普及•芯片厂商加速终端8K解码芯片的普及•8K60P + H.264/AVC 需要 100-200Mbps •8K60P + H.265/HEVC 需要 50-80Mbps•8K60P + AV1 需要 35-60Mbps•8K60P + H.266/VVC 需要 25-40Mbps8视频编码基本框架 —— 基于“块”的编码视频编码压缩核心理论基础:• 时域信息冗余 —— 帧间预测• 空域信息冗余 —— 帧内预测• 统计信息冗余 —— 熵编码• 感知信息冗余 —— 变换量化9视频编码基本框架预测时域/空域变换量化熵编码熵解码反量化反变换像素重建像素重建码流1 0VVC(Versatile Video Coding/多功能视频编码) 新技术•块划分:更加灵活的块划分形状+大小•帧内预测:更精细的预测角度选择,更准确的预测像素计算•帧间预测:进一步预测/压缩运动矢量,更精细的分像素插值计算,多个预测调优技术•变换量化:非正方形变换,多个变换核可选,新增二次变换,DQ量化决策算法1 1VVC(Versatile Video Coding/多功能视频编码) 新技术•熵编码:更精准的概率估计模型用于二值编码,优化系数编码流程•环路滤波:更细化的去块效应滤波,新增基于维纳滤波的自适应环路滤波工具•屏幕视频编码:调色板模式、帧内块拷贝、变换跳过•上层应用功能:参考图像重采样(支持灵活切换分辨率),时域空域可伸缩1 2VVC 核心技术 —— 灵活的块划分•增加5倍编码复杂度•解码复杂度影响较小VVCHEVC1 3VVC 核心技术 —— 更复杂的帧内预测•增加少量编码复杂度 (10% ~ 15%)•解码复杂度影响较小 更多角度模式(含广角)依赖具体位置和两侧参考像素做加权平均根据亮度像素预测色度像素多行参考像素可选1 4VVC 核心技术 —— 运动矢量的预测、推导、编码•新增基于历史信息的运动矢量预测(HMVP)(HEVC中只有空域和时域)•双向MVD编码利用对称性(SMVD),MVD精度可自适应(AMVR)•合并模式(merge/skip)扩展candidate列表,新增可选MVD(MMVD),新增帧内/帧间预测融合模式(CIIP),非矩形划分模式(GEO)•对编码复杂度影响较大(增加接近一倍编码复杂度),对解码复杂度影响较小1 5VVC 核心技术 —— 子块级运动推导、帧间预测调优• 新增仿射变换(Affine)、子块级时域运动矢量预测(sbTMVP)•新增基于双向光流的像素级调优技术(BDOF):根据梯度计算每个像素的调优偏移量•新增解码端运动矢量调优技术(DMVR):解码端在一定范围内进行运动搜索,优化运动矢量• 编码器复杂度增加30%以上,解码复杂度增加40%以上1 6VVC 核心技术 —— 多变换核、二次变换、 Dependent Quantization量化决策• DCT2、DCT8、DST7可选可组合(MTS),非正方形变换,可选二次变换(LFNST)• DQ允许在编码端通过控制量化系数的奇偶性,实现两个QP之间切换(DQ)•变换技术增加约30%的编码复杂度,解码复杂度影响较小•量化技术增加约25%的编码复杂度,解码复杂度影响较小1 7VVC 核心技术 —— 更复杂去块效应滤波(Deblocking)、新增自适应环路滤波(ALF)•Deblocking支持更大块、4x4像素维度滤波、更复杂的滤波强度/长度推导,长滤波等• ALF提供一种像素级基于维纳滤波的一种图像重建增强技术•Deblocking对编码复杂度影响较小,解码复杂度增加10%左右 (受小块影响)•ALF增加约10%的编码复杂度,解码复杂度增加40%左右1 8VVC 的优势与挑战优势:• 码率节省30%~50%,特殊场景 >70%• 为实时通信、会议、VR、云游戏等场景提供更灵活丰富的工具集挑战:• 编码复杂度(相比同HEVC增加10倍以上)(快速迭代中,增加服务器解决)• 格式、协议、生态不完善(自定义格式/协议)• 没有硬件解码支持• HEVC的经验:硬解覆盖大部分用户需要5~7年• VVC的软件解码对生态的构建至关重要1 9VVC移动平台超高清实时解码优化实践20VVC解码器设计的难点•完整性:标准细节复杂、编码工具多,需要完整呈现 (VVC相比HEVC新增几十项新工具或技术更新)•正确性:任何编码工具组合下,输出结果完全准确•鲁棒性:遇到任何错误码流,做最好的兼容(不能crash)•高性能:中等移动设备也能流畅播放高清视频,不卡顿发热21字节跳动BVC解码器进展2018.11启动BVC2.0项目,编解码器联合开发完成ARM CPU平台第一版,启动GPU优化专项2020.3启动BVC2.0独立解码器项目,性能导向,采用轻量级架构完全重写2020.112021.32021.9在ARM CPU平台完成30%性能优化,JVET/MPEG会议上完成BVC解码器性能汇报ARM CPU平台在推荐编码配置下再完成25%性能优化,追平HEVC解码速度2021.10完成GPU优化版,实现10%~30%不等的加速比22字节跳动BVC解码器性能分析iPhone 12(A14处理器),标准测试序列,打开所有编码工具(包括ALF、BDOF、DMVR)详细数据:https://mp.weixin.qq.com/s/xC4eR-zEo50pUko9J-0MrQ238K视频播放体验与对比BVC-EncBVC-Dec8K播放对比 —— VVC vs AV1•25Mbps码率下对比标准/解码器4K + 60fps8K + 60fpsAV1 / dav1d流畅+偶尔卡顿非常卡顿VVC / BVC非常流畅流畅使用M1芯片的Macbook Air视频源使用采用BVC编码器离线编码24性能优化方法论•性能瓶颈在哪里?——计算、判断、数据访问存储•主要关注单线程执行时间 —— 和实际计算量匹配•多个型号的设备进行测试调优 (不同soc的计算和访存瓶颈不同)•定位热点函数/代码(perf),在汇编层面进行代码分析•做细 ! BVC解码器总共完成超过50个有效优化点25整体工程架构:•和编码器完全独立,基于context完全面向过程的极简工程架构•Objective-Oriented: x265, HM, VTM, VVenc, VVdec•Context-based: x264, BVCCommonEncoderDecoderCUTUSliceParser……decode_CTUdecode_CUdecode_PURecon……Decoder ContextObjective-Oriented26计算优化举例:•算得少:去除不必要的计算,除去重复计算•案例1:基于矩阵乘法设计免矩阵转置的SIMD算法,DCT2利用对称性减少一半的乘法,利用非零系数区域减少计算X非零系数区域27计算优化举例:•算得快:优化计算算法减少时钟周期,提高指令并行度•案例1:•运动补偿插值计算,根据每一套系数特点构造加法移位组合来实现乘法•案例2:•在具体计算中,提前判断数据范围减少位宽使用(int16能满足就不用int32),提高SIMD的并行度28分支判断优化举例:•避免不必要判断:逻辑上提高精简度和确定性,消除不必要和重复性判断•合理分流:减少判断树层数 —— 案例:为I/B/P slice 或者不同大小的块单独实现判断逻辑•保存复杂判断结果,重复使用 —— 案例:判断某个位置像素能否被读取参考,结论可以重复使用•将判断转化为数据,使用提前生成查找表避免复杂判断•将大概率情况单独提出来实现精简判断逻辑29访存优化举例:•减少内存的申请和释放:提前计算好需要的内存大小一次申请,并回收利用内存•案例:为解码缓冲区设计帧内存缓存,可以进行回收和置换CallerFrame MemoryFrame MemoryFrame MemoryFrame MemoryFrame MemoryFrame MemoryMalloc回收分配输出DPBFrame Cache30访存优化举例:•提高数据locality:相邻访存地址尽可能连续•案例:精巧设计解码信息数据结构,频繁访存的信息放置在相邻位置•提高寄存器利用率:尽可能多直接使用寄存器,避免出入栈•案例1:将多个变量打包在一个int64变量中•案例2:合理使用inline函数31汇编优化举例:•不断优化SIMD计算算法,减少指令数,按理论时钟周期评估优化收益•消除数据依赖等待,判断分支尽可能转化为数据操作•优化访存和计算的排布顺序,流水线利用更饱满•根据实际数据范围,不浪费位宽,SIMD寄存器宽度用满32汇编优化举例:•案例1:流水线优化:下一批计算需要的数据load + 当前批计算指令穿插,流水线更饱满•案例2:耗时的指令提前做,避免临近直接依赖加载段0计算段0加载段N存储段N-1计算段N存储段M循环体33GPU异构并行优化:•基本框架:•将计算量大的任务批量offload到GPU执行•CPU/GPU计算任务尽可能负载均衡•GPU/CPU相互通信/等待尽可能最少CPU JobCPU JobCPU JobCPU JobCPU JobGPU JobGPU JobCPU Job34ALF模块GPU优化:•尝试各种大小Work-Item方案,在不同设备和机型中寻找最优解•使用GPU异构并行优化ALF之后,在不同序列中解码速度预期提高10%~30%35鲁棒性优化:•错误数据生成与测试:•定义错误码流类型:丢帧、丢参数集、丢中间数据、多套参数集、参数集不匹配、各种字段超出范围、脏数据等•自动化随机生成大量错误码流•自动化随机模拟播放器错误行为:create、decode、seek、close等操作乱序出现•鲁棒性优化策略:•变量合理范围严格校验+提...
发表评论取消回复