腾讯云直播全线支持新一代视频编码标准H.266

H.266是继H.265之后的新一代视频编码标准,于2020年正式发布[1],由ISO/IEC MPEG和ITU-T VCEG联合制定,代表目前业界最先进成熟的视频压缩编码技术。全球范围内包括腾讯、高通、HHI、华为、三星、索尼、Intel、诺基亚、爱立信、字节、快手等企业均有参与其中。H.266标准相比H.265标准,在相同主观质量前提下,可实现约50%的码率节省,进而能够降低传输带宽、节省存储成本等。除此之外,还支持更高的分辨率(16K)、支持360°全景视频编码、支持HDR等。

 在H.266生态中,一方面,支持H.266硬件解码的端侧芯片业界已经开始有所行动 [2];另一方面,端侧软件解码速度逐渐提升,已经可以覆盖绝大部分的端侧场景。随着H.266应用于直播场景的时机日趋成熟,腾讯云率先在业界实现了H.266在直播业务的全线支持,助力客户节省带宽成本,提升播放体验。

腾讯云直播全线支持H.266

云端支持H.266,主要包括两部分:H.266的传输分发和H.266编解码的支持。

H.266的传输和分发

多媒体领域应用最广泛的MP4格式和MPEG-TS格式,在最新版标准文档中都新增了H.266的封装支持[3][4]。因此,HLS、DASH等协议已具有传输H.266视频的能力(具体使用受HLS、DASH标准和播放端生态等条件的约束)。

HLS、DASH主要用于分发,并且延迟一般较高。业界上行推流和低延时的场景,普遍采用RTMP协议或者HTTP传输FLV的方式;其都使用了FLV容器格式。但FLV标准已停止更新,目前缺少H.266编码格式支持。类似H.265的处理方式,我们可以定义一套扩展标准来支持H.266。另外,在不久的将来,腾讯云也会在其业界领先的超低延时直播产品 —— 快直播中支持H.266,为客户提供更低延时、更高画质的直播体验

FLV封装H.264的方式参考了MP4标准,H.264、H.265和H.266的比特流格式具有相似性,我们可以参照FLV封装H.264的方式以及MP4封装H.266的方式,来实现H.266 in FLV的扩展。扩展包括三个部分:

1. CodecID的分配

业内使用CodecID 12代表H.265,使用CodecID 13代表AV1(腾讯云直播、点播、媒体处理等多媒体产品2020年已全线支持AV1,率先使用了CodecID 13),现分配CodecID 14代表H.266。

2. H.266 packet type的定义

使用带外传输参数集的方式,用0代表packet payload是参数集,1代表packet payload是视频帧数据。其中参数集格式是VvcDecoderConfigurationRecord。

3. packet payload的定义

根据packet type不同,payload为VvcDecoderConfigurationRecord或者VVC NALU。

具体实现如下表所示:

VvcDecoderConfigurationRecord的定义见[3],方便起见摘录部分内容如下:

代码语言:javascript
复制
aligned(8) class VvcPTLRecord(num_sublayers) {  bit(2) reserved = 0;  unsigned int(6) num_bytes_constraint_info;  unsigned int(7) general_profile_idc;  unsigned int(1) general_tier_flag;  unsigned int(8) general_level_idc;  unsigned int(1) ptl_frame_only_constraint_flag;  unsigned int(1) ptl_multi_layer_enabled_flag;  unsigned int(8*num_bytes_constraint_info - 2) general_constraint_info;  for (i=num_sublayers - 2; i >= 0; i--)    unsigned int(1) ptl_sublayer_level_present_flag[i];  for (j=num_sublayers; j<=8 && num_sublayers > 1; j++)    bit(1) ptl_reserved_zero_bit = 0;  for (i=num_sublayers-2; i >= 0; i--)    if (ptl_sublayer_level_present_flag[i])      unsigned int(8) sublayer_level_idc[i];  unsigned int(8) ptl_num_sub_profiles;  for (j=0; j < ptl_num_sub_profiles; j++)    unsigned int(32) general_sub_profile_idc[j];}
aligned(8) class VvcDecoderConfigurationRecord {  bit(5) reserved = '11111'b;  unsigned int(2) LengthSizeMinusOne;  unsigned int(1) ptl_present_flag;  if (ptl_present_flag) {    unsigned int(9) ols_idx;    unsigned int(3) num_sublayers;    unsigned int(2) constant_frame_rate;    unsigned int(2) chroma_format_idc;    unsigned int(3) bit_depth_minus8;    bit(5) reserved = '11111'b;    VvcPTLRecord(num_sublayers) native_ptl;    unsigned_int(16) max_picture_width;    unsigned_int(16) max_picture_height;    unsigned int(16) avg_frame_rate;  }  unsigned int(8) num_of_arrays;  for (j=0; j < num_of_arrays; j++) {    unsigned int(1) array_completeness;    bit(2) reserved = 0;    unsigned int(5) NAL_unit_type;    if (NAL_unit_type != DCI_NUT  &&  NAL_unit_type != OPI_NUT)      unsigned int(16) num_nalus;    for (i=0; i< num_nalus; i++) {      unsigned int(16) nal_unit_length;      bit(8*nal_unit_length) nal_unit;    }  }}

为FFmpeg添加H.266 in FLV封装、解封装能力的patch见:GitHub - tencentyun/flv: 腾讯云FLV扩展(https://github.com/tencentyun/flv)

腾讯云媒体处理MPS、直播极速高清等服务也即将上线H.266直播功能,敬请期待。(腾讯云媒体处理MPS在2021 已率先在业界支持了H.266的点播功能)

H.266视频编码

腾讯自研的H.266编码器O266,作为行业领先的VVC编码器,相比开源H.266编码器vvenc,在相同压缩速度下,其慢速档相比vvenc可额外节省15%带宽,快速档可额外节省30%带宽。这得益于腾讯在H.266编码算法上的深入优化。在H.266新编码工具复杂度更分散,优化难度更大的挑战之下,我们采用算法与工程结合的优化思路,一方面,使用了超过300种快速算法分别优化VVC不同的新工具;另一方面,充分优化线程模型以解决H.266中的CTU128不利于并行的问题,结合帧级并行、WPP并行、模块任务并行,获得了远优于x265的并行编码能力;同时,细致设计的数据结构和内存访问,使得O266可以进一步大幅降低访存与拷贝的开销。

H.266/VVC视频解码

在2020年H.266/VVC最终定稿后的三个月内,腾讯在国内率先开源发布了实时 H.266/VVC播放器O266player,内置腾讯自研的H.266/VVC解码器O266dec,能够在客户端上完成4K H.266/VVC视频的实时解码,性能指标国际领先。

腾讯H.266/VVC解码器O266dec核心技术领先性源于其H.266/VVC解码加速技术采用了不同维度的并行处理方式,从而达到大幅利用多核多线程技术的目的。具体包括以下四个方面:一是视频帧层级并行,帧内预测帧以及没有依赖性的帧间预测帧能够并行独立解码,同时不同帧之间的熵解码和像素处理也可以并行。二是CTU层级并行,Wavefront技术可以实现不同CTU行之间的CTU级的并行解码。其次是模块层级并行,对像素的操作(如运动矢量推导、预测、反量化、反变换和重建等)和环路滤波操作可以并行处理。最后是亚CTU层级并行,所有帧间预测CU都可以并行解码,并最大程度的利用SIMD指令。

总结

作为国内头部的视频云服务商,腾讯云音视频在持续推进视频H.266的标准商业应用,助力国内外视频产业的发展与完善。未来,腾讯云也将潜心深耕音视频领域,不断完善自身产品体系,利用自身技术优势、行业影响力,与万千开发者一起,为用户提供更便捷、高效的服务。

参考文献

[1] H.266 : Versatile video coding, 

https://www.itu.int/rec/T-REC-H.266-202008-S/en

[2] wiki: Versatile Video Coding,

https://en.wikipedia.org/wiki/Versatile_Video_Coding

[3] ISO/IEC 14496-15:2022 Information technology — Coding of audio-visual objects — Part 15: Carriage of network abstraction layer (NAL) unit structured video in the ISO base media file format

https://www.iso.org/standard/83336.html

[4] ISO/IEC 13818-1:2022 Information technology ——  Generic coding of moving pictures and associated audio information —— Part 1: Systems 

https://www.iso.org/standard/83239.html

腾讯云音视频在音视频领域已有超过21年的技术积累,持续支持国内90%的音视频客户实现云上创新,独家具备 RT-ONE™ 全球网络,在此基础上,构建了业界最完整的 PaaS 产品家族,并通过腾讯云视立方 RT-Cube™ 提供All in One 的终端SDK,助力客户一键获取众多腾讯云音视频能力。腾讯云音视频为全真互联时代,提供坚实的数字化助力。