buf_size参数设置不合理导致视频编码异常

视频编码场景下,需通过hi_venc_attr结构体中buf_size参数值来设置编码缓冲区的内存大小,buf_size参数值设置地不合理,可能会导致视频编码耗时长或编码失败。

现象及可能原因

视频编码耗时长或编码失败的场景下,使用dvpp的proc信息排查问题,proc信息中关键信息含义如下:EncStart表示启动编码的帧数,EndSuccessed表示成功编码的帧数,Lost和Disc(Disacrd)表示编码失败的帧数,Recode表示重编的次数。

  1. 运行编码进程后,登录Host,在有读、写、执行权限的目录下执行msnpureport -a命令,导出Device的日志信息。
  2. 按导出时间,进入对应时间戳的目录下,打开“module_info\dev-os-0\dvpp\dvpp_proc.log”日志:
    • 出现类似下面红框的现象:Lost和Disc的数量为0或很低,但是Recode的数量比较大,表示大部分帧能够编码成功,但是重编次数太多。

      当实际的编码结果大小大于编码缓冲区中的可用内存大小时,编码模块会自动调整参数重编,减小编码结果数据大小。因此buf_size设置的太小,缓冲帧数少,导致出现重编的概率高,进而导致编码时延增加,帧率变低,性能下降。

    • 出现类似下面红框的现象:Lost和Disc的数量比较大,同时Recode的数量也比较大,表示有比较多的帧编码失败了。

      当实际的编码结果大小大于编码缓冲区中的可用内存大小时,编码模块会自动调整参数重编,减小编码结果数据大小。如果重编次数全部用完,但是编码结果大小依然大于编码缓冲区中的可用内存大小,此时编码模块会将该帧丢弃。因此buf_size设置的太小,缓冲帧数少,导致出现重编的概率高,丢帧概率高。

处理步骤

创建编码通道时,合理设置buf_size参数,具体参见hi_venc_attr结构体中buf_size成员的说明。