7.3.9 视频编码
概述
视频编码模块实现 H.264/H.265/JPEG/MJPEG 协议硬件编码。该模块支持多通道实时编码,各通道相互独立,常见的使用场景,包括单路录像、多路录像、单路 VIO 视频流、多路 VIO 视频流、录像+VIO 视频流等。
功能描述
基础规格
X3 支持的编码规格如下:

H264/H265 协议编码性能如下:
- H.264 编解码支持最大分辨率为 8192 x 8192,最小为 256 x 128,解码最小为 32 x 32
- H.265 编解码支持最大分辨率为 8192 x 8192,最小为 256 x 128,解码最小为 8 x 8
- H.264/H.265 的 stride 是 32 字节对齐,width 和 height 都是 8 字节对齐,如果不是对齐的建议使用 VIDEO_CROP_INFO_S 去对应裁剪
- H.264/H.265 均具备多码流实时编码能力
- 最高能力支持 4K@60fps
- 带 QP map 的 ROI 编码(让用户选择画面中感兴趣的区域,启用 ROI 功能后,重要的或者移动的区域将会进行高质量无损编码,而对那些不移动,不被选择的区域降低其码率和图像质量,进行标准清晰度视频压缩,甚至是不传输这部分区域视频)
- 支持旋转和镜像
- Multi-instance 处理,最多 32 个
JPEG 协议编码能力如下:
- 编解码分辨率最大 32768 x 32768,最小 16 x 16
- MJPEG、JPEG 的 stride 是 32 字节对齐,width 是 16 字节对齐,height 是 8 字节对齐
- 对于 YUV 4:2:0 格式(例如:NV12),最高能力达到 4K@30fps
- JPEG Baseline and Extended sequential ISO/IEC 10918-1
- 支持一个或三个颜色分量,每个分量可以 8 位或 12 位采样
- 支持 YUV 4:0:0,4:2:0,4:2:2,4:4:0 和 4:4:4 颜色格式
- 支持编解码 ROI
- 支持 slice encoding
- 支持旋转和镜像
- Multi-instance,最高支持 64 个
编解码通道
编解码通道即一个特定类型的编解码实例,不同编解码通道的用户参数配置和资源可以相互独立,这样就可以实现多路不同规格的视频编解码,覆盖多种业务场景。
码率控制
码率控制主要指的是对编码码率的控制。码率控制针对连续的视频编码码流而言,对于一个变化的场景,如果要达到图像质量稳定,则编码码率会抖动;如果要达到编码码率稳定,则图像质量会波动。X3 针对 H264、H265 和 MJPEG 协议支持以下码率控制方式:
- H264/H265 支持编码通道的 CBR、VBR、AVBR、FixQp 和 QpMap 五种码率控制方式
- MJPGE 编码通道的 FixQp 码率控制方式。
CBR 能够保证整体的编码码率稳定;
VBR 则是保证编码图像的质量稳定;
AVBR 会兼顾码率和图像质量,产生码率和图像质量相对稳定的码流;
FixQp 是固定每一个 I 帧、P 帧和 B 帧的 QP 值;
QPMAP 是为一帧图像中的每一个块指定 QP 值,其中 H264 块大小为 16x16,H265 块大小为 32x32。
对于 CBR 和 AVBR 来说,编码器内部会为每一帧图片找到合适的 QP 值,从而保证恒定码率。
编码器内部支持三种级别的码率控制,分别为帧级别、CTU/MB 级别和 subCTU/subMB 级别。其中帧级别的控制主要会根据目标码率为每一帧图片产生一个 QP 值,从而保证码率恒定;CTU/MB 级别的控制则根据每一个 64x64 的 CTU 或 16x16 的 MB 的目标码率为每个 block 产生一个 QP 值,能够得到更好的码率控制,但是频繁的 QP 值调整会造成图像质量不稳定的问题;subCTU/subMB 级别的控制则为每一个 32x32 的 subCTU 或 8x8 的 subMB 产生一个 QP 值,其中复杂的块会得到较高的 QP 值,静态的块则会得到较低的 QP 值,因为相比于复杂的区域人眼对于静态的区域更敏感,复杂和静态区域的检测主要依赖于内部硬件模块,这个级别控制主要是为了提高主观图像质量同时保证码率恒定,该模式控制下 SSIM 得分较高,但是 PSNR 得分会降低。
CBR、VBR、AVBR 可以使能 QPMAP,则每个块区域的实际值由以下公式得到:

其中 MQP 为 ROI map 中的值,RQP 为编码器内部码率控制得到的值,ROIAvaQP 为 ROI map 中 QP 的平均值。
GOP 结构
GOP 结构表可定义一组周期性的 GOP 结构,该 GOP 结构将用于整个编码过程。单个结构表中的元素如下表所示,其中可以指定该图像的参考帧,如果 IDR 帧后的其他帧指定的参考帧为 IDR 帧前的数据帧,编码器内部会自动处理这种情况使其不参考其他帧,用户无需关心这种情况。用户在自定义 GOP 结构时需要指明结构表的数量,最多可定义 8 个结构表,结构表的顺序需要按照解码顺序排列。
| Element | Description |
|---|---|
| Type | Slice type(I,P or B) |
| POC | Display order of the frame within a GOP,ranging from 1 to GOP size |
| QPoffset | A quantization parameter of the picture in the custom GOP |
| NUM_REF_PIC_L0 | Flag to use multi reference picture for P picture It is valid only if PIC_TYPE is P |
| temporal_id | Temporal layer of the frame. A frame cannot predict from a frame with a higher temporal id(0~6). |
| 1st_ref_POC | The POC of the 1st reference picture of L0 |
| 2nd_ref_POC | The POC of 1st reference picture of L1 in case that Type is equal to B The POC of 2nd reference picture of L0 in case that Type is equal to P Note that reference_L1can have the same POC as reference in B slice. But for compression efficiency it is recommended that reference_L1 have a different POC from reference_L0 |
GOP 预置结构

下表所示为预置的 8 种 GOP 结构
| Index | GOP Structure | Low Delay (encoding order and display order are same) | GOP Size | Encoding Order | Minimum Source Frame Buffer | Minimum Decoded Picture Buffer | Intra Period (I Frame Interval) Requirement |
|---|---|---|---|---|---|---|---|
| 1 | I | Yes | 1 | I0-I1-I2… | 1 | 1 | |
| 2 | P | Yes | 1 | P0-P1-P2… | 1 | 2 | |
| 3 | B | Yes | 1 | B0-B1-B2… | 1 | 3 | |
| 4 | BP | No | 2 | B1-P0-B3-P2… | 4 | 3 | Multiple of 2 |
| 5 | BBBP | No | 4 | B2-B1-B3-P0… | 7 | 4 | Multiple of 4 |
| 6 | PPPP | Yes | 4 | P0-P1-P2-P3… | 1 | 2 | |
| 7 | BBBB | Yes | 4 | B0-B1-B2-B3… | 1 | 3 | |
| 8 | BBBBBBBB | No | 8 | B3-B2-B4-B1-B6-B5-B7-B0… | 12 | 5 | Multiple of 8 |
其中
-
GOP Preset1
- 只有 I 帧,没有相互参考帧
- 低延时

-
GOP Preset2
- 只有 I 帧和 P 帧
- P 帧参考两个前向参考帧
- 低延时

-
GOP Preset3
- 只有 I 帧和 B 帧
- B 帧参考两个前向参考帧
- 低延时

-
GOP Preset4
- 有 I 帧、P 帧和 B 帧
- P 帧参考两个前向参考帧
- B 帧参考一个前向参考帧和一个后向参考帧

-
GOP Preset5
- 有 I 帧、P 帧和 B 帧
- P 帧参考两个前向参考帧
- B 帧参考一个前向参考帧和一个后向参考帧,后向参考帧可为 P 帧或 B 帧

-
GOP Preset 6
- 只有 I 帧和 P 帧;
- P 帧参考两个前向参考帧;
- 低延时;

-
GOP Preset 7
- 只有 I 帧和 B 帧;
- B 帧参考两个前向参考帧;
- 低延时;

-
GOP Preset 8
- 只有 I 帧和 B 帧;
- B 帧参考一个前向参考帧和一个后向参考帧;
