跳到主要内容

hi_venc_attr

hi_venc_stream

说明

定义帧码流类型结构体。

定义

typedef struct {
hi_venc_pack ATTRIBUTE* pack;
hi_u32 ATTRIBUTE pack_cnt;
hi_u32 seq;

union {
hi_venc_h264_stream_info h264_info;
hi_venc_jpeg_stream_info jpeg_info;
hi_venc_h265_stream_info h265_info;
hi_venc_prores_stream_info prores_info;
};

union {
hi_venc_h264_adv_stream_info h264_adv_info;
hi_venc_h265_adv_stream_info h265_adv_info;
};
} hi_venc_stream;

成员

成员名称描述
pack帧码流包结构。
pack_cnt一帧码流的所有包的个数。
seq码流序列号。 按帧获取时,此处为帧序号;按包获取时,此处为包序号。
h264_info/h265_info码流特征信息。
jpeg_info/prores_info码流特征信息,暂不支持。
h264_adv_info/ h265_adv_info码流高级特征信息。

父主题: VENC视频/JPEGE图像编码

hi_venc_pack

说明

定义帧码流包结构体。

定义

typedef struct {
union {
hi_u64 phys_addr;
hi_u64 input_addr;
};
hi_u8 ATTRIBUTE* addr;
hi_u32 ATTRIBUTE len;
hi_u64 pts;
hi_bool is_frame_end;
hi_venc_data_type data_type;
hi_u32 offset;
hi_u32 data_num;
hi_venc_pack_info pack_info[HI_VENC_MAX_PACK_INFO_NUM];
} hi_venc_pack;

成员

成员名称描述
phys_addr码流包物理地址。
input_addr用户输入码流数据的内存地址。
addr码流包首地址。
len码流包长度。 当len=0,表示视频/图像编码失败。
pts时间戳。单位:us。
is_frame_end帧结束标识。 取值范围:
- HI_TRUE:该码流包是该帧的最后一个包。
- HI_FALSE:该码流包不是该帧的最后一个包。
data_type码流类型,支持 H.265/H.264/JPEG协议类型的数据包。
offset码流包中有效数据与码流包首地址addr的偏移。
data_num当前码流包(当前包的类型由 data_type 指定)数据中包含码流包的个数。
pack_info[HI_VENC_MAX_PACK_INFO_NUM]当前码流包数据中包含码流包数据信息。
text<br>#define HI_VENC_MAX_PACK_INFO_NUM 8<br>

父主题: VENC视频/JPEGE图像编码

hi_venc_chn_attr

说明

定义编码通道属性结构体。

定义

typedef struct &#123;
hi_venc_attr venc_attr;
hi_venc_rc_attr rc_attr;
hi_venc_gop_attr gop_attr;
&#125;hi_venc_chn_attr;

成员

成员名称描述
venc_attr编码器属性。 编码器属性中除通道宽高(pic_width和pic_height)外都是静态属性,一旦创建编码通道成功,静态属性不支持被修改,除非该通道被销毁,重新创建。
rc_attr码率控制器属性。 码率控制器属性首先需要配置RC(Rate Control)模式,JPEG不需要配置码率控制器属性,其它协议类型通道(H.264/H.265)都必须配置。码率控制器属性RC模式必须与编码器属性协议类型匹配。
gop_attrGOP Mode类型的结构体。 对于H264、H265协议,需要配置该参数。

父主题: VENC视频/JPEGE图像编码

hi_venc_attr

说明

定义编码器属性结构体。

定义

typedef struct &#123;
hi_payload_type type;
hi_u32 max_pic_width;
hi_u32 max_pic_height;
hi_u32 buf_size;
hi_u32 profile;
hi_bool is_by_frame;
hi_u32 pic_width;
hi_u32 pic_height;
union &#123;
hi_venc_h264_attr h264_attr;
hi_venc_h265_attr h265_attr;
hi_venc_jpeg_attr jpeg_attr;
hi_venc_prores_attr prores_attr;
&#125;;
&#125;hi_venc_attr;

成员

成员名称描述
type编码协议类型。
max_pic_width编码图像最大宽度,静态属性,必须是2的整数倍。 取值范围:[MIN_WIDTH, MAX_WIDTH],以像素为单位。MIN_WIDTH、MAX_WIDTH,分别表示编码通道支持的最小宽度、最大宽度,参见表1
max_pic_height除jpeg协议外,编码图像最大高度,静态属性,必须是2的整数倍。 取值范围:[MIN_HEIGHT, MAX_HEIGHT],以像素为单位。MIN_HEIGHT、MAX_HEIGHT分别表示编码通道支持的最小高度、最大高度,参见表1
buf_size码流buffer大小,单位为Byte,静态属性。
- 调用hi_mpi_venc_send_jpege_frame接口发送原始图像进行图像编码时,在创建通道时,buf_size参数值必须设置为0。
- 调用hi_mpi_venc_send_frame接口发送原始图像进行视频或图像编码时,在创建通道时,buf_size参数值必须设置为64的整数倍,取值范围:[Min, Max],以Byte为单位。 (1)视频编码场景下,Min当前表示32*1024,Max当前表示1*1024*1024*1024。 用户可以在创建通道时,合理设置每个通道的buf_size,以节省内存使用开销,推荐将buf_size设置为:原图宽*原图高*3/2后再64对齐,但buf_size依然需要在[Min, Max]范围内。 视频编码场景下,若buf_size设置的不合理,可能出现以下异常情况: - 反复重编,进而导致编码时延变长、性能下降、图像质量下降; - 编码失败,获取不到编码结果。 (2)图像编码场景下,如果原图格式为YUV420,Min值为原图宽16对齐*原图高16对齐*3/2 ;如果原图格式为YUV422 Packed,Min值为原图宽16对齐*原图高16对齐*2。Max当前表示1*1024*1024*1024。 用户可以在创建通道时根据业务场景中图片的实际最大分辨率,合理设置每个通道的buf_size,以节省内存使用开销,推荐将buf_size设置为**:原图宽*原图高*倍数**,倍数推荐为5。 例如:用户图片的分辨率有720p(1280*720)、1080p(1080*1920)、4K(3840*2160)大小的图片,需要的buf_size应按照4k配置:3840*2160*5。 图片编码场景下,buf_size最小值为320*240*5 ,防止小分辨率场景下,buffer容易被占满,影响编码功能执行,例如:用户图片的最大分辨率为128*128,推荐用户将buf_size设置为320*240*5。
profile编码的等级,数字越大编码质量越好,静态属性。
- H.264 取值范围:[0, 3]。
- 0:Baseline。当取值为该值时,不支持编码B帧。
- 1:Main Profile。
- 2:High Profile。
- H.265 取值范围:[0,1]。
- 0:Main Profile。
- 1:Main 10 Profile,预留值,暂不支持。
- Jpeg 取值范围:0(表示Baseline)。
is_by_frame帧/包模式获取码流,静态属性。
- HI_TRUE:按帧获取。
- HI_FALSE:按包获取。
pic_width编码通道宽度,必须是MIN_ALIGN的整数倍。通道创建后,不支持修改。 取值范围:[MIN_WIDTH, MAX_WIDTH],以像素为单位。MIN_WIDTH、MAX_WIDTH、MIN_ALIGN分别表示编码通道支持的最小宽度、最大宽度、最小对齐单元(像素),参见表1。 JPEG通道宽高的设置要满足:pic_width*pic_height<= max_pic_width*max_pic_height。
pic_height除jpeg协议外,编码通道高度,必须是MIN_ALIGN的整数倍。通道创建后,不支持修改。 取值范围:[MIN_HEIGHT, MAX_HEIGHT],以像素为单位。MIN_HEIGHT、MAX_HEIGHT、MIN_ALIGN分别表示编码通道支持的最小高度、最大高度、最小对齐单元(像素),参见表1。 JPEG通道宽高的设置要满足:pic_width*pic_height<= max_pic_width*max_pic_height。
h264_attr编码协议的属性。
h265_attr编码协议的属性。
jpeg_attr编码协议的属性。 预留参数,暂不支持。
prores_attr编码协议的属性。 预留参数,暂不支持。

参考信息

MIN_WIDTH、MAX_WIDTH、MIN_HEIGHT、MAX_HEIGHT、MIN_ALIGN分别表示编码通道支持的最小宽度、最大宽度、最小高度、最大高度、最小对齐单元(像素)。

表1 编码通道宽高

W/H (pixel)H.264H.265JPEG
MIN_WIDTH12812832
MAX_WIDTH409640968192
MIN_HEIGHT12812832
MAX_HEIGHT409640968192
MIN_ALIGN222

父主题: VENC视频/JPEGE图像编码

hi_venc_rc_attr

说明

定义编码通道码率控制器属性。

定义

typedef struct &#123;
hi_venc_rc_mode rc_mode;
union &#123;
hi_venc_h264_cbr h264_cbr;
hi_venc_h264_vbr h264_vbr;
hi_venc_h264_avbr h264_avbr;
hi_venc_h264_qvbr h264_qvbr;
hi_venc_h264_cvbr h264_cvbr;
hi_venc_h264_fixqp h264_fixqp;
hi_venc_h264_qpmap h264_qpmap;

hi_venc_mjpeg_cbr mjpeg_cbr;
hi_venc_mjpeg_vbr mjpeg_vbr;
hi_venc_mjpeg_fixqp mjpeg_fixqp;

hi_venc_h265_cbr h265_cbr;
hi_venc_h265_vbr h265_vbr;
hi_venc_h265_avbr h265_avbr;
hi_venc_h265_qvbr h265_qvbr;
hi_venc_h265_cvbr h265_cvbr;
hi_venc_h265_fixqp h265_fixqp;
hi_venc_h265_qpmap h265_qpmap;
&#125;;
&#125; hi_venc_rc_attr;

成员

成员名称描述
rc_modeRC模式。
- CBR(Constant Bit Rate)固定比特率。即在码率统计时间内保证编码码率平稳。
- VBR(Variable Bit Rate)可变比特率,即允许在码率统计时间内编码码率波动,从而保证编码图像质量平稳。
- AVBR(Adaptive Variable Bit Rate) 自适应可变比特率,即允许在码率统计时间内编码码率波动,从而保证编码图像质量平稳。码率控制内部会检测当前场景的运动静止状态,在运动时用较高码率编码,在静止时主动降低目标码率。
- QVBR (Quality Variable Bit Rate)基于主观图像质量的可变比特率,该码控调节方式是利用实时统计的 PSNR(图像质量客观评价指标)的大小来动态调整码率,从而保证编码图像质量平稳。在PSNR较小时主动升高目标码率,PSNR较大时主动降低目标码率。
- CVBR (Constrained Variable Bit Rate) 是以VBR为基础,旨在提供平稳的图像质量的码控算法,同时对VBR的码率进行限制,以满足传输带宽以及存储空间的要求。具体来说, CVBR设置了瞬时,短期与长期码率的限制。其中,瞬时码率的限制保证了网络带宽对传输的要求;长期码率限制保证了在长时间视频录制时,存储设备有足够的空间储存数据;同时,短期码率会根据长期码率的设置和实际使用情况进行调节,以在场景复杂的情况下提供更加平稳的图像质量,并在场景简单时节省码率。
- FIXQP(Fix Quantisation Parameter)固定QP值。在码率统计时间内,编码图像所有宏块QP值相同,采用用户设定的图像QP值,I帧和P帧的QP值可以分别设置。
并且对于不同协议,相同 RC 模式的属性变量基本一致。表1介绍了几种RC模式的公共的属性。
h264_cbrH.264协议编码通道CBR模式属性。
h264_vbrH.264协议编码通道VBR模式属性。
h264_avbrH.264协议编码通道AVBR模式属性。
h264_qvbrH.264协议编码通道QVBR模式属性。
h264_cvbrH.264协议编码通道CVBR模式属性。
h264_fixqpH.264协议编码通道FIXQP模式属性。
h264_qpmapH.264协议编码通道QPMAP模式属性。预留参数,暂不支持。
mjpeg_cbrMjpeg协议编码通道CBR模式属性。预留参数,暂不支持。
mjpeg_vbrMjpeg协议编码通道VBR模式属性。预留参数,暂不支持。
mjpeg_fixqpMjpeg(Motion Joint Photographic Experts Group)协议编码通道FIXQP模式属性。预留参数,暂不支持。
h265_cbrH.265协议编码通道CBR模式属性。
h265_vbrH.265协议编码通道VBR模式属性。
h265_avbrH.265协议编码通道AVBR模式属性。
h265_qvbrH.265协议编码通道QVBR模式属性。
h265_cvbrH.265协议编码通道CVBR模式属性。
h265_fixqpH.265协议编码通道FIXQP模式属性。
h265_qpmapH.265协议编码通道QPMAP模式属性。预留参数,暂不支持。

参考信息

表1 码率控制器属性的约束

RC 模式GOPStatTime(s)FrmRate(src_frame_rate/dst_frame_rate)
CBR≥1≥1src_frame_rate ≥ dst_frame_rate
VBR≥1≥1src_frame_rate ≥ dst_frame_rate
AVBR≥1≥1src_frame_rate ≥ dst_frame_rate
FIXQP≥1≥1src_frame_rate ≥ dst_frame_rate
QPMAP≥1≥1src_frame_rate ≥ dst_frame_rate

父主题: VENC视频/JPEGE图像编码

hi_venc_rc_mode

说明

定义编码通道码率控制器模式。

定义

typedef enum &#123;
HI_VENC_RC_MODE_H264_CBR = 1,
HI_VENC_RC_MODE_H264_VBR,
HI_VENC_RC_MODE_H264_AVBR,
HI_VENC_RC_MODE_H264_QVBR,
HI_VENC_RC_MODE_H264_CVBR,
HI_VENC_RC_MODE_H264_FIXQP,
HI_VENC_RC_MODE_H264_QPMAP,

HI_VENC_RC_MODE_MJPEG_CBR,
HI_VENC_RC_MODE_MJPEG_VBR,
HI_VENC_RC_MODE_MJPEG_FIXQP,

HI_VENC_RC_MODE_H265_CBR,
HI_VENC_RC_MODE_H265_VBR,
HI_VENC_RC_MODE_H265_AVBR,
HI_VENC_RC_MODE_H265_QVBR,
HI_VENC_RC_MODE_H265_CVBR,
HI_VENC_RC_MODE_H265_FIXQP,
HI_VENC_RC_MODE_H265_QPMAP,

HI_VENC_RC_MODE_BUTT,
&#125; hi_venc_rc_mode;

成员

成员名称描述
HI_VENC_RC_MODE_H264_CBRH.264 CBR模式。
HI_VENC_RC_MODE_H264_VBRH.264 VBR模式。
HI_VENC_RC_MODE_H264_AVBRH.264 AVBR模式。
HI_VENC_RC_MODE_H264_QVBRH.264 QVBR模式。
HI_VENC_RC_MODE_H264_CVBRH.264 CVBR模式。
HI_VENC_RC_MODE_H264_FIXQPH.264 FIXQP模式。
HI_VENC_RC_MODE_H264_QPMAPH.264 QPMAP模式。预留参数,暂不支持。
HI_VENC_RC_MODE_MJPEG_CBRMJPEG CBR模式。预留参数,暂不支持。
HI_VENC_RC_MODE_MJPEG_VBRMJPEG VBR模式。预留参数,暂不支持。
HI_VENC_RC_MODE_MJPEG_FIXQPMJPEG FIXQP模式。预留参数,暂不支持。
HI_VENC_RC_MODE_H265_CBRH.265 CBR模式。
HI_VENC_RC_MODE_H265_VBRH.265 VBR模式。
HI_VENC_RC_MODE_H265_AVBRH.265 AVBR模式。
HI_VENC_RC_MODE_H265_QVBRH.265 QVBR模式。
HI_VENC_RC_MODE_H265_CVBRH.265 CVBR模式。
HI_VENC_RC_MODE_H265_FIXQPH.265 FIXQP模式。
HI_VENC_RC_MODE_H265_QPMAPH.265 QPMAP模式。预留参数,暂不支持。

父主题: VENC视频/JPEGE图像编码

hi_venc_h264_cbr

说明

定义H.264编码通道CBR属性结构。

定义

typedef struct &#123;
hi_u32 gop;
hi_u32 stats_time;
hi_u32 src_frame_rate;
hi_u32 dst_frame_rate;
hi_u32 bit_rate;
&#125; hi_venc_h264_cbr;

成员

成员名称描述
gopGroup Of Pictures, 视频序列由若干时间连续的图像构成,在对其进行编码时,先将该视频序列分割成若干个小的图像组,该参数即指一个图像组的帧数;由于GOP结构仅支持Normalp(第一帧为I帧,其余帧为P帧),此参数也为I帧间隔,默认值65535;由于编码I帧不需参考之前的帧,之前帧的编码质量影响从此帧开始不再传递,故该值越小,编码质量越好;但不建议小于帧率,因为I帧仅有帧内预测块,大部分场景需要有一定的P帧(有帧间预测块)才能保证编码质量。 取值范围:[1, 65536]。
stats_timeCBR码率统计时间,以秒为单位,一般场景下,stats_time= gop / dst_frame_rate,编码质量较好。 码率统计时间越长,每帧图像的码率波动对于码率调节的影响越弱,码率的调节会更缓慢,图像质量的波动会更轻微;码率统计时间越短,每帧图像的码率波动对于码率调节的影响越强,图像码率的调节会更灵敏,图像质量的波动会更剧烈。 取值范围:[1, 60]。
src_frame_rate编码器输入帧率,以fps为单位,即每秒进入编码器的帧数,默认值为30;码率一定的情况下,该值越小,编码质量越好,但小于25播放时画面会不连贯。 该参数取值范围:[1, 240]。
dst_frame_rate编码器输出帧率,以fps为单位,即每秒编码器输出的帧数,默认值为30;码率一定的情况下,该值越小,编码质量越好,但小于25播放时画面会不连贯。 取值范围:[1, src_frame_rate]。 暂不支持分数帧率。
bit_rate编码器输出平均码率,以kbps为单位,即编码码流每秒比特数,该值越大,编码质量越好;默认值2000。 该参数取值范围:[2, 614400]。 平均比特率的设置与编码通道宽高以及图像帧率都有关系。典型的平均比特率的设置如表1所示。注意,表1中的平均比特率的设置是在通道编码帧率为满帧率(30fps)时的设置。当用户设置编码输出帧率不为满帧率时,可以对下表中的码率按用户设置帧率与满帧率(30fps)的比例进行换算。

表1 典型平均比特率配置

图像宽高/码率等级1080p(1920x1080)4K(3840x2160)
低码率<2Mbps<8Mbps
中码率2Mbps~8Mbps8Mbps~30Mbps
高码率>8Mbps>30Mbps

父主题: VENC视频/JPEGE图像编码

在线提单