摘要:本期就分享几个关于DVPP视频编码问题的典型案例,并给出原因分析及解决方法

本文分享自华为云社区《DVPP媒体数据处理视频编码问题案例》,作者:昇腾CANN。

DVPP(Digital Vision Pre-Processing)是昇腾AI处理器内置的图像处理单元,通过AscendCL媒体数据处理接口提供强大的媒体处理硬加速能力,主要功能包括图像编解码、视频编解码、图像抠图缩放等。

本期就分享几个关于DVPP视频编码问题的典型案例,并给出原因分析及解决方法:

  1. 参数设置不合理,导致视频编码耗时长或编码失败
  2. 发送待编码帧成功,但视频编码无输出
  3. 发送待编码帧失败

01 参数设置不合理,导致视频编码耗时长或编码失败

问题现象描述

视频编码耗时长或编码失败。运行编码应用进程后,使用dvpp的proc信息排查问题,步骤如下:登录运行编码应用进程的环境,在有读、写、执行权限的目录下执行msnpureport -a命令,导出proc日志信息。按导出时间,进入对应时间戳的目录下,打开“module_info\dev-os-0\dvpp\dvpp_proc.log”日志。proc信息中关键信息含义如下:EncStart表示启动编码的帧数,EndSuccessed表示成功编码的帧数,Lost和Disc(Disacrd)表示编码失败的帧数,Recode表示重编的次数。

1、日志中出现类似下面红框的信息:Lost和Disc的数量为0或很低,但是Recode的数量比较大,表示大部分帧能够编码成功,但是重编次数太多。

2、日志中出现类似下面红框的信息:Lost和Disc的数量比较大,同时Recode的数量也比较大,表示有比较多的帧编码失败了。

原因分析

视频编码耗时长或编码失败可能与编码缓冲区内存大小buf_size参数的设置有关,原理如下:当实际的编码结果大小大于编码缓冲区中的可用内存大小buf_size时,编码模块会自动调整参数重编,减小编码结果数据大小。如果重编次数全部用完,但是编码结果大小依然大于编码缓冲区中的可用内存大小,此时编码模块会将该帧丢弃。

因此buf_size设置的太小,缓冲帧数少,导致出现重编的概率高,进而导致编码时延增加,帧率变低,性能下降,甚至出现丢帧概率高的情况。

处理步骤

视频编码场景下,创建视频编码通道时,合理设置每个通道的buf_size参数,以节省内存使用开销,推荐将buf_size设置为:原图宽*原图高*3/2后再64对齐,且取值范围:[32*1024, 1*1024*1024*1024],以Byte为单位。否则可能出现以下异常情况:

  • 反复重编,进而导致编码时延变长、性能下降、图像质量下降;
  • 编码失败,获取不到编码结果。

02 发送待编码帧成功,但视频编码无输出

现象描述

创建视频编码通道后,发送帧成功,但调用hi_mpi_venc_get_stream接口获取编码后码流数据时,返回值为0xa008800e,获取不到编码后码流数据。

可能原因

发送帧成功,但获取编码后码流数据失败可能原因有以下:

  • 用户传入的输入图像内存不是使用dvpp内存申请接口hi_mpi_dvpp_malloc申请的。
  • 用户传入的输入图像内存大小和图像分辨率不匹配。

处理步骤

针对分析的可能原因,请参考以下方法处理:

1.查看日志是否有出现watch_dog相关的信息,如下图所示,若出现watch_dog信息,基本可以确认是内存使用存在问题。

[Chnl]:chnl_watch_dog_timer_isr [Line]:1141 find VEDU_0 down,now reset it
[Chnl]:chnl_watch_dog_blackbox [Line]:1097 vpu_id is 0, venc watchdog fail enter blackbx

2.排查应用代码中输入图像内存的申请方式,如果不是使用dvpp内存申请接口hi_mpi_dvpp_malloc申请的,视频编码时将无法正常访问该内存,导致编码无输出,需要修改为使用hi_mpi_dvpp_malloc申请输入图像内存。

3.排查应用代码中输入图像内存和分辨率是否匹配,比如YUV420SP NV12或NV21格式的YUV图像,一帧图像大小为宽*高*1.5,如果实际送给申请的输入图像内存大小比宽*高*1.5小的话,会产生访问越界等不可预期的行为,也会导致编码无输出。需要保证申请的内存大小和实际设置的分辨率参数匹配。

03 发送待编码帧失败

现象描述

视频编码场景下,调用hi_mpi_venc_send_frame接口发送待编码帧,接口返回值非0值,表示发送帧失败。

可能原因

导致发送帧失败的可能原因有以下:

  • 用户传入的图像帧参数不在规定的合理范围内或设置了暂不支持的参数。
  • 用户送帧的频率太快,大于性能规格。

处理步骤

针对分析的可能原因,请参考以下方法处理:

1、如果返回值为0xa0088003或0xa0088008,则说明用户传入的图像帧参数不在规定的合理范围内或设置了暂不支持的参数。

具体是哪个参数传入有问题可以进一步查看日志信息,如下图所示,是传入的YUV格式不正确。

[Venc]:hevc_check_pixel_format [Line]:1110 H.265 don't support format 5,should be NV12(1) or NV21(2)

常见参数设置问题如下:

(1)入参的结构体没有进行memset初始化,结构体的部分参数没有主动设置,导致这部分参数值是一些随机值;

(2)头文件不匹配,导致枚举类型传入和预期不符合;

(3)参数支持范围不了解,各个参数的支持范围可查看hi_mpi_venc_send_frame接口的详细介绍。

2、如果返回值为0xa008800d,则说明视频编码的输入空闲队列已满,此时无法再继续往编码模块内部送入数据帧。

这种问题一般是由于送帧的频率太快,大于昇腾AI处理器的处理速度,导致输入队列堆积,视频编码的输入空闲队列长度为6帧,只要堆积到了6帧,再继续送帧就会报错。

这种情况,建议在应用代码中控制调用hi_mpi_venc_send_frame的时间间隔,比如编码帧率30fps,调用的间隔可以控制在33ms一帧。

04 更多介绍

[1]昇腾文档中心

[2]昇腾社区在线课程

[3]昇腾论坛

号外

7月7日,华为开发者大会2023 ( Cloud )将拉开帷幕,并将在国内30多个城市、海外10多个国家开设分会场,诚邀您参加这场不容错过的年度开发者盛会,让我们一起开启探索之旅!

我们将携手开发者、客户、合作伙伴,为您呈现华为云系列产品服务与丰富的创新实践,并与您探讨AI、大数据、数据库、PaaS、aPaaS、媒体服务、云原生、安全、物联网、区块链、开源等技术话题,展开全面深入的交流。

大会将汇聚全球科学家、行业领袖、技术专家、社区大咖,开设200多场开发者专题活动,为全球开发者提供面对面交流与合作的机会,共同探讨技术创新和业务发展。

大会官网:https://developer.huaweicloud.com/HDC.Cloud2023.html

参会购票:https://www.vmall.com/product/10086352254099.html?cid= 211761

点击参与开发者社区活动,观赏技术大咖秀、玩转技术梦工厂,有机会赢取4000元开发者礼包!

欢迎关注“华为云开发者联盟”公众号,获取大会议程、精彩活动和前沿干货。

点击关注,第一时间了解华为云新鲜技术~

视频编码耗时长、编码帧发送失败…DVPP视频编码问题典型案例分析的更多相关文章

  1. 视频基础知识:浅谈视频会议中H.264编码标准的技术发展

    浅谈视频会议中H.264编码标准的技术发展 浅谈视频会议中H.264编码标准的技术发展 数字视频技术广泛应用于通信.计算机.广播电视等领域,带来了会议电视.可视电话及数字电视.媒体存储等一系列应用,促 ...

  2. H264编码原理以及I帧、B和P帧详解, H264码流结构分析

    H264码流结构分析 http://blog.csdn.net/chenchong_219/article/details/37990541 1.码流总体结构: h264的功能分为两层,视频编码层(V ...

  3. Servlet向客户端发送中文数据的编码情况

    (更多内容请关注本人微信订阅号:it_pupil) 本文讲述服务端servlet向客户端浏览器发送中文数据的编码情况,需要抓住下面几点: 输出流发送数据,必须是以字节形式传输的.也就是说,如果你在服务 ...

  4. 使用iconv进行编码gb2312转utf8 转码失败的坑

    iconv 编码gb2312转utf8 转码失败的坑 使用背景 项目中使用thrift进行C#程序调用c++接口,其中的协议是通过json进行传输的,由于默认thrift使用utf8进行传输,而C#和 ...

  5. form表单在发送到服务器时候编码方式

    enctype(编码方式):规定了form表单在发送到服务器时候编码方式.有如下的三个值可选: 1.application/x-www-form-urlencoded.默认的编码方式.但是在用文本的传 ...

  6. (转)[视频压制/转换技术] I帧 B帧 P帧 IDR帧 等帧用途详细说明

    转:http://www.u2game.net/bbs/thread-46116-1-1.html 在视频压制.转换中,经常会看到:I帧 B帧 P帧 IDR帧 等名词,这里就是通用的解释一下这些帧的用 ...

  7. js 获取上传视频的时长、大小、后缀名

    参考资料:获取时长 var fileName = $("#sectionfileUpload").val(); //C:\fakepath\3.jpeg var exts = fi ...

  8. 20172332 2017-2018-2 《程序设计与数据结构》Java哈夫曼编码实验--哈夫曼树的建立,编码与解码

    20172332 2017-2018-2 <程序设计与数据结构>Java哈夫曼编码实验--哈夫曼树的建立,编码与解码 哈夫曼树 1.路径和路径长度 在一棵树中,从一个结点往下可以达到的孩子 ...

  9. 视频云肖长杰:视频AI科技助力短视频生态

    人工智能技术是当今炙手可热的技术领域,它在制造.家居.零售.交通.安防等行业的应用已经是大势所趋.在本月云栖Techday音视频技术沙龙中,阿里云视频云产品专家肖长杰为我们分享了一些AI技术在视频中应 ...

  10. Android开发 获取视频中的信息(例如预览图或视频时长) MediaMetadataRetriever媒体元数据检索器

    前言 在Android里获取视频的信息主要依靠MediaMetadataRetriever实现 获取最佳视频预览图 所谓的最佳就是MediaMetadataRetriever自己计算的 /** * 获 ...

随机推荐

  1. 聊聊基于Alink库的特征工程方法

    示例代码及相关内容来源于<Alink权威指南(Java版)> 独热编码 OneHotEncoder 是用于将类别型特征转换为独热编码的类.独热编码是一种常用的特征编码方式,特别适用于处理类 ...

  2. Sum of MSLCM 题解

    Sum of MSLCM 题目大意 定义 \(\text{MSLCM}(n)\) 为所有满足该数集的 \(\text{lcm}\) 为 \(n\) 的数集中元素个数最多的数集的所有数字的和,现有多次询 ...

  3. Go 包操作之如何拉取私有的Go Module

    Go 包操作之如何拉取私有的Go Module 在前面,我们已经了解了GO 项目依赖包管理与Go Module常规操作,Go Module 构建模式已经成为了 Go 语言的依赖管理与构建的标准. 在平 ...

  4. LVS+keepalived结合

    LVS+Keepalived实现高可用负载均衡(web集群) LVS+Keepalived架构图:   测试环境: 名称 操作系统 IP地址 LVS-MASTER Centos7.x 192.168. ...

  5. 全面掌握胶囊网络:从基础理论到PyTorch实战

    本文全面深入地探讨了胶囊网络(Capsule Networks)的原理.构建块.数学模型以及在PyTorch中的实现.通过本文,读者不仅能够理解胶囊网络的基础概念和高级数学原理,还能掌握其在实际问题中 ...

  6. 2022.7.15 jiazhaopeng 讲课纪要

    前言 由于难度仍然过高,难度再次下调,这节课主要在水绿.这节课讲的是并查集,之所以是以绿题为主是因为上了绿之后的题有一大半都要结合别的东西,初中生不会,所以只能讲的简单一点. ORZ%%% jzp学长 ...

  7. (Good topic)双指针:判断子序列

    给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 你可以认为 s 和 t 中仅包含英文小写字母.字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=1 ...

  8. 2023-11-18:用go语言,如果一个正方形矩阵上下对称并且左右对称,对称的意思是互为镜像, 那么称这个正方形矩阵叫做神奇矩阵。 比如 : 1 5 5 1 6 3 3 6 6 3 3 6 1 5

    2023-11-18:用go语言,如果一个正方形矩阵上下对称并且左右对称,对称的意思是互为镜像, 那么称这个正方形矩阵叫做神奇矩阵. 比如 : 1 5 5 1 6 3 3 6 6 3 3 6 1 5 ...

  9. 关于微信小程序中如何实现数据可视化-echarts动态渲染

    移动端设备中,难免会涉及到数据的可视化展示.数据统计等等,本篇主要讲解原生微信小程序中嵌入echarts并进行动态渲染,实现数据可视化功能. 基础使用 首先在GitHub上下载echarts包 地址: ...

  10. 中间件IIS监控指标、配置和Windbg调试分析

    1. 关键性能计数器指标 a. Web服务(W3SVC)性能计数器 当前连接数(Current Connections):显示当前所有HTTP连接的数量.过高的数值可能表明网站流量过大或连接无法及时释 ...