---
title: buf_size参数设置不合理导致视频编码异常
description: "视频编码场景下，需通过hi_venc_attr结构体中buf_size参数值来设置编码缓冲区的内存大小，buf_size参数值设置得不合理，可能会导致视频编码耗时长或编码失败。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/maintenref/troubleshooting/troubleshooting_0201.html
sourcePath: /source/zh/canncommercial/900/maintenref/troubleshooting/troubleshooting_0201.html
indexId: f037526c894e7eb0ab0a8d284bf37bed8feff808d662156e8d78f18b9995549b82
---
# buf_size参数设置不合理导致视频编码异常

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

#### 现象及可能原因（ Ascend RC ）

视频编码耗时长或编码失败的场景下，使用proc命令排查问题，proc查询结果中关键信息含义如下：EncStart表示启动编码的帧数，EndSuccessed表示成功编码的帧数，Lost和Disc（discard）表示编码失败的帧数，Recode表示重编的次数。

1. 编码进程运行过程中，登录Device。
2. 执行命令cat /proc/umap/h265e或者cat /proc/umap/h264e。

  - 出现类似下面红框的现象：Lost和Disc的数量为0或很低，但是Recode的数量比较大，表示大部分帧能够编码成功，但是重编次数太多。
    当实际的编码结果大小大于编码缓冲区中的可用内存大小时，编码模块会自动调整参数重编，减小编码结果数据大小。因此buf_size设置得太小，缓冲帧数少，导致出现重编的概率高，进而导致编码时延增加，帧率变低，性能下降。

  - 出现类似下面红框的现象：Lost和Disc的数量比较大，同时Recode的数量也比较大，表示有比较多的帧编码失败了。
    当实际的编码结果大小大于编码缓冲区中的可用内存大小时，编码模块会自动调整参数重编，减小编码结果数据大小。如果重编次数全部用完，但是编码结果大小依然大于编码缓冲区中的可用内存大小，此时编码模块会将该帧丢弃。因此buf_size设置得太小，缓冲帧数少，导致出现重编的概率高，丢帧概率高。


#### 现象及可能原因（ Ascend EP ）

视频编码耗时长或编码失败的场景下，使用dvpp的proc信息排查问题，proc信息中关键信息含义如下：EncStart表示启动编码的帧数，EndSuccessed表示成功编码的帧数，Lost和Disc（discard）表示编码失败的帧数，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成员的说明。
