视频编码场景下,需通过hi_venc_attr结构体中buf_size参数值来设置编码缓冲区的内存大小,buf_size参数值设置地不合理,可能会导致视频编码耗时长或编码失败。
视频编码耗时长或编码失败的场景下,使用dvpp的proc信息排查问题,proc信息中关键信息含义如下:EncStart表示启动编码的帧数,EndSuccessed表示成功编码的帧数,Lost和Disc(Disacrd)表示编码失败的帧数,Recode表示重编的次数。
当实际的编码结果大小大于编码缓冲区中的可用内存大小时,编码模块会自动调整参数重编,减小编码结果数据大小。因此buf_size设置的太小,缓冲帧数少,导致出现重编的概率高,进而导致编码时延增加,帧率变低,性能下降。
当实际的编码结果大小大于编码缓冲区中的可用内存大小时,编码模块会自动调整参数重编,减小编码结果数据大小。如果重编次数全部用完,但是编码结果大小依然大于编码缓冲区中的可用内存大小,此时编码模块会将该帧丢弃。因此buf_size设置的太小,缓冲帧数少,导致出现重编的概率高,丢帧概率高。
创建编码通道时,合理设置buf_size参数,具体参见hi_venc_attr结构体中buf_size成员的说明。