智能编码自适应 使用说明
前言
本文档主要介绍智能编码自适应控制的内部实现、参数意义和使用方法。对智能编码自适应参数调控中的注意事项做了介绍。
说明:
本文以Hi3519DV500为例,未有特殊说明,Hi3516DV500完全一致。
与本文档相对应的产品版本如下。
本文档(本指南)主要适用于以下工程师:
- 技术支持工程师
- 软件开发工程师
修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。
智能编码自适应概述
智能编码
智能编码(Smart Video Coding,简称:SVC)技术包括编码更低码率与前景保护的控制机制。用户可在方案层引入码率质量自适应调节策略,通过结合码控算法、智能编码算法整体调节,以达到用户对码率节省或前景保护的目的。
智能编码自适应sample框架图介绍
智能编码自适应Sample给用户提供了码率质量调节策略参考。
用户如果认可Hi35xxVxxx提供的智能编码自适应调节策略,可直接使用该sample中的接口,以达到快速开发的目的;如果希望自己实现满足自己产品的特殊要求,可参考Sample中的调节策略自行实现。
Sample的框架结构如图1所示,分为四个部分:
-
智能编码自适应的核心算法有两个部分:
- 根据当前的编码压力自适应的调节背景及前景区域的QPMap的设置QP值;
- 用户可在AVBR码控下,根据当前的运动复杂程度等统计信息(需要用户根据检测框的信息自行规定算法,本sample由于无法获取到检测信息,只是给了简单的示意)动态的调整目标码率。
-
loadparam为读取配置文件参数的部分,用于加载自适应算法需要的参数配置。
- ini为参数部分,如果用户不希望对算法的流程进行更改,但是需要进行效果微调,可通过修改ini部分实现。
- main为函数的入口,可以类比为用户的业务代码入口部分。

智能编码自适应sample文件架构
智能编码自适应Sample在SDK发布包中的路径为:
Hi35xxVxxx_SDK_Vx.x.x.x/package/smp/xxx_linux/source/mpp/sample/svc_rate_auto
目录结构如表1所示。
表 1 文件架构说明
智能编码自适应算法说明
编码自适应核心调节策略在ot_bitrate_auto.c中实现,提供了外部接口可供用户直接在产品层调用,如果用户希望对算法流程做更改,也可参考内部接口说明对算法的流程进行改动。
外部接口
API接口
编码自适应提供对外API:
- ot_rate_auto_init:初始化编码自适应模块,包括上下文初始化,创建编码自适应策略调节线程。
- ot_rate_auto_deinit:去初始化编码自适应模块,包括上下文去初始化,销毁编码自适应策略调节线程。
ot_rate_auto_init
【描述】
初始化编码自适应模块,包括上下文初始化,创建编码自适应策略调节线程。
【语法】
【参数】
【返回值】
【需求】
- 头文件:ot_bitrate_auto.h
- 库文件:Null
【注意】
init_param不能为空。
ot_rate_auto_deinit
【描述】
去初始化编码自适应模块,包括上下文去初始化,销毁编码自适应策略调节线程。
【语法】
【参数】
无。
【返回值】
【需求】
- 头文件:ot_bitrate_auto.h
- 库文件:Null
【注意】
无。
数据类型
相关数据类型、数据结构定义如下:
- SVC_RECT_TYPE_NUM:检测前景目标类型数量,最多支持五种类型。
- rate_auto_param:编码自适应调节参数总集。
SVC_RECT_TYPE_NUM
【说明】
检测前景目标类型数量,最多支持五种类型。
【定义】
【成员】
无
【解决方案差异】
无。
【注意事项】
无
【相关数据类型及接口】
无
rate_auto_param
【说明】
编码自适应调节参数总集。
【定义】
typedef struct {
td_u8 avbr_rate_control;
td_u8 svc_fg_qpmap_val_p[SVC_RECT_TYPE_NUM];
td_u8 svc_fg_qpmap_val_i[SVC_RECT_TYPE_NUM];
td_u8 svc_fg_skipmap_val[SVC_RECT_TYPE_NUM];
td_u8 svc_bg_qpmap_val_p;
td_u8 svc_bg_qpmap_val_i;
td_u8 svc_bg_skipmap_val;
td_u8 svc_roi_qpmap_val_p;
td_u8 svc_roi_qpmap_val_i;
td_u8 svc_roi_skipmap_val;
td_u32 max_bg_qp;
td_u32 min_fg_qp;
td_u32 max_fg_qp;
td_u8 fg_protect_adjust;
} rate_auto_param;
【成员】
|
1:码率降低模式(目前仅调优AVBR码控,降低码率,在前景质量相当的情况下降低背景质量以节省码率); 2:码率升高模式(目前仅调优AVBR码控,升高码率,在背景质量相当的情况下提升前景质量,在低码率情况下提高升高码率,可改善前景图像质量)。 |
|
【解决方案差异】
无。
【注意事项】
Hi3519DV500不支持SVAC3.0。
【相关数据类型及接口】
内部接口
API接口
编码自适应提供的内部API如下:
- Init_svc_param:初始化SVC调节时需要的配置参数。
- adjust_qpmap_based_on_max_bgqp:根据max_bg_qp值自适应调节各区域的QpMap值。
- adjust_qpmap_based_on_max_fgqp:码率模式调节前景QP,根据max_fg_qp值自适应调节前景区域的QpMap值。
- adjust_qpmap_based_on_min_fgqp:码率模式调节前景QP,根据min_fg_qp值自适应调节前景区域的QpMap值。
- adjust_fg_quality_based_on_max_bgqp:质量模式调节QP,根据max_bg_qp值自适应调节前景质量。
- adjust_bg_quality_based_on_min_fgqp:质量模式调节QP,根据min_fg_qp值自适应调节背景质量。
- adjust_avbr_bitrate:仅针对AVBR码控模式下的码率质量进行调节。其他码控对SVC的参数自适应不影响。
- qpmap_to_deltaqp:格式转换,将QpMap的值转换为Venc内部的DeltaQp值。
- deltaqp_to_qpmap:格式转换,将DeltaQp值转换为Venc内部的QpMap值。
- add_qp:对Venc内部的QpMap格式的值进行加法操作,加数可以为正负数。
Init_svc_param
【描述】
初始化SVC调节时需要的配置参数。
【语法】
【参数】
智能编码调节参数。ot_venc_svc_param结构参见《MPP 媒体处理软件 V6.0 开发参考》“6 视频编码”章节。 |
【返回值】
无。
【需求】
- 头文件:Null
- 库文件:Null
【注意】
无。
adjust_qpmap_based_on_max_bgqp
【描述】
根据max_bg_qp值自适应调节各区域的QpMap值。
【语法】
static td_void adjust_qpmap_based_on_max_bgqp(td_u32 max_bg_qp, td_u32 start_qp, ot_venc_svc_param *svc_param)
【参数】
智能编码调节参数。ot_venc_svc_param结构参见《MPP 媒体处理软件 V6.0 开发参考》“6 视频编码”章节。 |
【返回值】
无。
【需求】
- 头文件:Null
- 库文件:Null
【注意】
max_bg_qp限制了在使用智能编码时的背景区域和可能背景区域的最大QP,由此避免背景区域质量过差。
adjust_qpmap_based_on_max_fgqp
【描述】
码率模式调节前景QP,根据max_fg_qp值自适应调节前景区域的QpMap值。
【语法】
static td_void adjust_qpmap_based_on_max_fgqp(td_u32 max_fg_qp, td_u32 start_qp, ot_venc_svc_param *svc_param)
【参数】
智能编码调节参数。ot_venc_svc_param结构参见《MPP 媒体处理软件 V6.0 开发参考》“6 视频编码”章节。 |
【返回值】
无。
【需求】
- 头文件:Null
- 库文件:Null
【注意】
max_fg_qp限制了在使用智能编码时的前景区域的最大QP,由此避免前景区域质量过差。
adjust_qpmap_based_on_min_fgqp
【描述】
码率模式调节前景QP,根据min_fg_qp值自适应调节前景区域的QpMap值。
【语法】
static td_void adjust_qpmap_based_on_min_fgqp(td_u32 min_fg_qp, td_u32 start_qp, ot_venc_svc_param *svc_param)
【参数】
智能编码调节参数。ot_venc_svc_param结构参看《MPP 媒体处理软件 V6.0 开发参考》“6 视频编码”章节。 |
【返回值】
无。
【需求】
- 头文件:Null
- 库文件:Null
【注意】
min_fg_qp限制了在使用智能编码时的前景区域的最小QP,由此避免前景区域质量过好。
adjust_fg_quality_based_on_max_bgqp
【描述】
质量模式调节QP,根据max_bg_qp值自适应调节前景质量。
【语法】
static td_void adjust_fg_quality_based_on_max_bgqp(td_u32 max_bg_qp, td_u32 start_qp, ot_venc_svc_param *svc_param)
【参数】
智能编码调节参数。ot_venc_svc_param结构参看《MPP 媒体处理软件 V6.0 开发参考》“6 视频编码”章节。 |
【返回值】
无。
【需求】
- 头文件:Null
- 库文件:Null
【注意】
当帧级start_qp已经高于max_bg_qp(通常为场景复杂,码率不足的情况),且前景和ROI区域的qpmap_value_i, qpmap_value_p取值在32到63之间时,增加qpmap_value_i, qpmap_value_p的值,从前景区域节省码率,避免背景区域质量过差。
adjust_bg_quality_based_on_min_fgqp
【描述】
质量模式调节QP,根据min_fg_qp值自适应调节背景质量。
【语法】
static td_void adjust_bg_quality_based_on_min_fgqp(td_u32 min_fg_qp, td_u32 start_qp, ot_venc_svc_param *svc_param)
【参数】
智能编码调节参数。ot_venc_svc_param结构参看《MPP 媒体处理软件 V6.0 开发参考》“6 视频编码”章节。 |
【返回值】
无。
【需求】
- 头文件:Null
- 库文件:Null
【注意】
当帧级start_qp已经低于min_fg_qp(通常为场景简单,码率非常充足的情况),且背景区域、ROI区域的qpmap_value_i, qpmap_value_p取值在1到31之间时,减小背景区域、ROI区域的qpmap_value_i, qpmap_value_p的值,优先提高背景区域质量,避免前景区域质量过好。
adjust_avbr_bitrate
【描述】
仅针对AVBR码控模式下的码率质量进行调节。其他码控对SVC的参数自适应不影响。
【语法】
【参数】
编码的通道属性。ot_venc_chn_attr结构参看《MPP 媒体处理软件 V6.0 开发参考》“6 视频编码”章节。 |
||
【返回值】
无。
【需求】
- 头文件:Null
- 库文件:Null
【注意】
当 rate_control使能且当前码控为AVBR时,该函数会通过AVBR的参数min_still_percent对AVBR的码率进行调节。目前提供3种模式:
- AVBR码控不调节:rate_control = 0;
- 码率模式(rate_control:1):在没有检测到前景物体时降低码率,有前景物体时则不作调整,以在保持前景质量的情况下降低总体码率,但背景区域的质量会下降。
- 质量模式(rate_control:2):在检测到前景物体的时候提高码率,以在保持背景质量的情况下为前景提供更好的质量。总体码率会有所上升。
具体调节方法为:用户可通过当前检测的目标面积大小等统计信息(目前无接口获取,由客户自己保证),根据统计信息(值越大表示场景中前景物体越多,通常需要的码率也越大)对min_still_percent进行调整(min_still_percent值越大表示码率越大)。
注意:调整的AVBR参数不限于min_still_percent,也可以根据调整力度的需要使用MaxBitrate和ChangPos参数。
qpmap_to_deltaqp
【描述】
格式转换,将QpMap的值转换为Venc内部的DeltaQp值。
【语法】
【参数】
【返回值】
无
【需求】
- 头文件:Null
- 库文件:Null
【注意】
Venc内部的QpMap值60转换为DeltaQp值-4,具体的转换方法请参看Sample。
deltaqp_to_qpmap
【描述】
格式转换,将DeltaQp值转换为Venc内部的QpMap值。
【语法】
【参数】
【返回值】
无
【需求】
- 头文件:Null
- 库文件:Null
【注意】
DeltaQp值-4转换为Venc内部的QpMap值60,具体的转换方法请参看Sample。
add_qp
【描述】
对Venc内部的QpMap格式的值进行加法操作,加数可以为正负数。
【语法】
【参数】
【返回值】
整数类型td_s32,表示操作结果(例如成功或错误码)。
【需求】
- 头文件:Null
- 库文件:Null
【注意】
无。
智能编码自适应参数说明
本章主要说明Hi35xxVxxx_SDK_Vx.x.x.x/package/smp/xxx_linux/source/mpp/sample/svc_rate_auto/param/config_rate_auto_base_param.ini 相关参数的说明及使用方法。
说明:
Hi3519DV500不支持SVAC3.0。
智能编码自适应参数
智能编码自适应参数如表1所示。
表 1 智能编码自适应参数
注意事项
-
背景区域QPMAP的设置:
- 在降码率模式下,svc_bg_qpmap_val_i比svc_bg_qpmap_val_p设置的值要小2~4个QP,保证I帧的图像质量。若I帧的QP加得过多,会有呼吸效应产生。在一般_视频采集_设备固定场景下,svc_bg_qpmap_val_i可默认设置为2,svc_bg_qpmap_val_p设置在[4,6]范围内;
- 在图像质量模式下,若要保证整体的图像效果,背景QP可不设置,默认为0。
- QPMAP绝对模式请谨慎使用。
-
前景区域QPMAP的设置:
- 根据前景的重要程度设置QP,非常重要的前景(如人脸,需要看清细节),可适当减小QP,若不是特别重要的区域(如人型等不需要注重细节),可适当加QP;
- 在降码率模式下,svc_fg_qpmap_val_i比svc_fg_qpmap_val_p设置的值要小2~3个QP,保证I帧的图像质量,有个好的参考结果。一般_视频采集_设备固定场景下,svc_fg_qpmap_val_i可设置为[0,2]之间,svc_fg_qpmap_val_p可设置为[0,4]之间。
- 另外需要用户自己斟酌前景的面积与QP的关系,若前景面积过大并且设置为QP保护,需要考虑到码率过冲的情况。
- QPMAP绝对模式请谨慎使用。
-
SkipMAP的设置:
只是提供了一种前景设置skip倾向性节省码率的方式,但为了图像质量效果,一般建议设置为0或略微调整,[0,1]范围之内。
-
ROI区域的设置:为了应对在检测不准确时的情况,保留之前的检测区域结果,存在一定的误差,建议ROI相关参数不要设置过大。一般_视频采集_设备固定场景下,svc_roi_qpmap_val_p、svc_roi_qpmap_val_i取值在[0,1]范围内,svc_roi_skipmap_val设置为0。
场景适用性说明
-
码率优先模式:
- 在背景较为复杂的场景,使用码率优先模式会造成运动过后拖尾、背景糊及呼吸效应等现象,若QP设置不合理,会导致图像副作用明显;对于在背景简单的场景,副作用不大。
- 适用于运动速度适中的场景,暂时不适用镜头固定且目标运动速度过快的场景。
-
质量优先模式:
- 对于运动面积过大场景,由于本身目标图像质量比较好,因此即便是质量优先模式在图像主观感知上提升也不明显,这类场景QP无需调整过多;
- 若在CBR帧级码控下使用质量优先模式,背景的图像质量会有不同程度的下降,需要根据具体需要做权衡。