字节新一代解码器 BVC ,助力 H.266/VVC 标准商业落地
随着网络环境的优化和移动设备性能的提升,高清流畅的极致观影体验吸引着更多的终端用户。高分辨率视频资源也给压缩标准提出了新的要求。从 H.264/AVC 标准到 H.265/HEVC 标准,虽然压缩效率提升一倍,但依然无法满足高清视频的压缩需求。因此,拥有更高压缩效率的 H.266/VVC 标准诞生。诞生初期,由于 H.266/VVC 编码标准复杂,且缺少对应的终端设备硬解码,让商业落地显得遥不可及。
用户通过高清、超高清视频获得极致的观看体验
01
H.266/VVC 标准的压缩效率比 H.265/HEVC 提升一倍
多功能视频编码 ( Versatile Video Coding , VVC ,也称为 H.266 ) 是联合视频专家组制定的最新一代视频编码标准,于 2020 年 7 月正式定稿。作为 HEVC 的继任者, H.266/VVC 能够在相同的质量下将压缩效率再提升一倍。 H.266/VVC 标准的推动将能为未来视频内容的发展提供巨大的潜力。
H.266/VVC 的前一代标准是 H.265/HEVC 。随着近几年移动终端的蓬勃发展,H.265/HEVC 已经得到广泛应用,但其压缩效率仍无法满足大量 4K/1080P 等高清视频资源的需求。过大的视频资源压缩文件,占据了存储空间并吞噬着网络带宽,导致用户观看视频时频繁卡顿。
而在相同的编码质量下, H.266/VVC 标准的压缩率可以比 H.265/HEVC 标准提升一倍!
举个例子,使用 H.265/HEVC 编码标准,用户观看一部电影需要 1GB 的流量,换成 H.266/VVC 编码标准后,仅需 500MB 的流量,并且在智能终端播放的时候,画质可以保持不变。 H.266/VVC 标准,使高清在线视频不再是流量吞噬者。
尽管 H.266/VVC 标准的压缩性能非常优异,但其解码复杂度显著高于 H.265/HEVC 标准。终端设备解码过程中会出现设备发热、耗电增加以及视频卡顿的现象,影响用户观看体验。在硬件解码芯片尚未问世的背景下,如何设计并实现一款超高性能的 VVC 软件解码器成为我们的重要目标。
02
BVC 解码器,打通 H.266/VVC 标准落地的最后一公里
BVC 是字节跳动自研的新一代解码器,已正式支持 H.266/VVC 标准。 BVC 解码器可应用于 Android 、 iOS 、 Linux 、 MacOS 和 Windows 等多种平台。
针对移动端用户众多、设备性能参差不齐的问题,我们在 Android 和 iOS 的 Arm 平台上,对 BVC 解码器进行了特别的优化,在部分设备上的解码速度达到参考软件的数十倍。 BVC 的高效解码,使 H.266/VVC 标准的商业落地不再遥不可及。
看一组详细数据,根据国际会议提案 JEVT-V128,在搭载 A14 处理器的 iPhone 12 上,对于 4K 分辨率标准测试码流, BVC 单线程平均解码速度达到了 22fps ;2 线程可以实现 4K 视频的实时解码。对于 1080p 分辨率标准测试码流,BVC 单线程平均解码速度是 86 fps ,即单线程可实时解码 1080p 视频。因此,在高端手机上,BVC 解码器支持流畅播放高清甚至超高清视频。
图 1 对比不同线程的 BVC 与 VTM-11.0 的解码速度
图 1 展示了在 iPhone12 上,BVC 和参考软件 VTM-11.0 解码不同分辨率视频的速度对比。横轴依次代表解码 4K 、1080p 、480p 和 240p 分辨率的视频;纵轴表示使用 VTM-11.0 解码和 BVC 分别使用 1 、2 、4 、6 线程解码的平均帧率,数值越大表明解码速度越快。虚线表示各分辨率视频实时播放的常用帧率。可以看出, BVC 仅单线程的解码速度相较于 VTM-11.0 就有着 6-10 倍的巨大优势。
除了上述标准测试码流外,我们还测试了使用 BVC 编码器生成的抖音视频码流, BVC 解码器表现出了强大的解码性能。在性能逊于 iPhone 12 的小米 6 手机上, BVC 单线程即可完成 1080p 视频的实时解码;在其它中低端手机上, BVC 单线程即可完成对 720p 视频的实时解码。 BVC 解码器的出现,使得在各种性能的设备上均可实现对 H.266/VVC 标准视频资源的解码,并为用户带来流畅的观看体验。
03
BVC 解码器如何实现技术突破
为了有效降低 BVC 解码器的计算复杂度,加快解码速度,我们从并行性、代码框架、汇编指令和访存效率等方向进行了优化,性能改善显著。
细粒度的并行算法
BVC 支持不同层次的并行算法,包括帧级并行、块级并行和模块级并行。帧级并行即同时解码多个视频帧,可以充分利用多核 CPU 的性能,并行程度最高;块级并行即同时解码多个解码块;模块级并行即利用 CPU 的剩余资源,同时处理多个较复杂的模块。块级与模块级相结合可以高效降低视频帧的输出时延,保障视频会议和直播等实时场景的流畅体验
对流水线友好的代码框架
BVC 有着非常轻量级的代码框架,更加迎合空间较小、性能较差的移动端设备。针对各个功能模块特性, BVC 有不同的算法实现,尽可能减少了分支跳转,提升了 CPU 流水线的饱和度
高吞吐量的汇编优化
我们采用高吞吐量的 SIMD 指令,针对像素帧内预测、帧间插值、量化、变换、重建和环路滤波等复杂模块做汇编优化,均达到了数倍的模块加速比,最大程度提升 CPU 的计算效率
高效的访存设计
移动设备内存和缓存空间较小,访存效率有限,这极大地制约了解码器的性能。为此,我们针对 BVC 解码器的访存进行了优化,包括减少内存读写次数、集中内存使用和提高缓存命中率。优化后,访存不再成为在移动设备上解码超高清视频的瓶颈
04
详细性能数据
我们使用 VVC 官方参考软件 VTM-11.0 做了一组测试。在通用配置下,生成若干组 8 比特码流,打开标准测试条件下的全部工具,包括较复杂的 DMVR 、 BDOF 和 ALF 等。测试的序列为标准通用测试序列,包括 class A 、 B 、 C 、 D 、 F 五类。其中, class F 是屏幕内容场景,分辨率从 480p 到 1080p 不等; class A-D 为自然场景,视频的分辨率分别为 4K 、 1080p 、 480p 和 240p 。
在 iPhone 12 ( A14 处理器)上, BVC 单线程解码 4K 分辨率、8 比特标准测试码流的速度平均达到了 22fps ,是参考软件 VTM-11.0 解码速度的 10 倍;在使用全部 6 个线程后解码速度甚至可达 55 fps,最高达到 78fps 。对于 1080p 分辨率、8 比特标准测试码流, BVC 解码器的单线程平均解码速度是 86 fps ,达到参考软件的 8.8 倍。
表 1 解码器速度对比详细数据
05
总结
BVC 解码器可以实现超清、高质视频的实时快速解码,展现出在移动端上卓越的解码能力,对视频行业的发展和 H.266/VVC 标准的落地起到积极的推进作用。
接下来,基于实际应用中的问题和挑战,我们的技术团队将持续发力,不断优化 BVC 解码器的性能,旨在为新一代标准的落地做出更多贡献。
评论 1 条评论