视频编码耗时长、编码帧发送失败…DVPP视频编码问题典型案例分析

这篇具有很好参考价值的文章主要介绍了视频编码耗时长、编码帧发送失败…DVPP视频编码问题典型案例分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

摘要:本期就分享几个关于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元开发者礼包!

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

 

点击关注,第一时间了解华为云新鲜技术~文章来源地址https://www.toymoban.com/news/detail-486027.html

到了这里,关于视频编码耗时长、编码帧发送失败…DVPP视频编码问题典型案例分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 视频上传,限制时长,获取视频时长

    使用element的upload上传文件时,除了类型和大小,需求需要限制只能长传18秒内的视频,这里通过upload的before-upload,以及创建一个音频元素对象拿到durtaion时长属性来实现。 loadedmetadata 事件是当指定的音频/视频的元数据已加载时触发,就可以得到元数据,包括时长,尺寸等;

    2024年02月12日
    浏览(42)
  • 昇腾实战丨DVPP媒体数据处理图片解码问题案例

    摘要: 本期就分享几个关于DVPP图片解码问题的典型案例,并给出原因分析及解决方法。 本文分享自华为云社区《DVPP媒体数据处理图片解码问题案例》,作者:昇腾CANN 。 DVPP(Digital Vision Pre-Processing)是昇腾AI处理器内置的图像处理单元,通过AscendCL媒体数据处理接口提供强

    2024年02月08日
    浏览(38)
  • VUE项目使用axios发送post跨域请求,返回数据失败问题

    Access to XMLHttpRequest at \\\'http://xxxx\\\' from origin \\\'http://localhost:8080\\\' has been blocked by CORS policy: Response to preflight request doesn\\\'t pass access control check: No \\\'Access-Control-Allow-Origin\\\' header is present on the requested resource. 第一步 ,在后端接受方,对返回的数据添加 响应头 ,使用下面这句代码: 第二步

    2024年02月11日
    浏览(51)
  • 硬编码失败问题Codec reported err 0x80000000, actionCode 0, while in state 5

    在某台小米11手机上创建MediaCodec编码器出现如下问题,看日志好像是状态不对 查看MediaCodec状态有如下几种 state 5是STARTING状态,查看代码确定只启动了一次。 查看手机支持的编码器信息 结果如下 默认使用的c2.qti.avc.encoder 编码器切换成OMX.qcom.video.encoder.avc还是用的c2.qti.avc.e

    2024年02月16日
    浏览(35)
  • 如何获取视频与音频当前的时长,并设置时长

    ontimeupdate 事件在视频 / 音频 (audio / video)当前的播放位置发送改变时播放 简单来讲:就是视频在播放时,将不断触发。 此处用到了节流函数,每秒只会触发一次。 video.currentTime 可以获取到,当前播放时长 onloadeddata 事件在当前帧的数据加载完成且还没有足够的数据播放视

    2024年01月22日
    浏览(51)
  • 【目标检测】视频输出体积太大?分析视频的编码与码率问题

    在做视频目标检测时,发现一个问题,检测输出完的视频时大时小,有时输出体积过大,造成播放器播放时严重卡顿现象。本文就这一情况进行分析,并就该问题提出相关解决方案。 早期电视台在传输节目信息时,由于带宽有限,于是想在带宽不变的情况下,增加图像的分辨

    2024年02月02日
    浏览(38)
  • java获取一个视频的时长

    引言 在日常开发中,经常会遇到产品经理提出一个需求“上传视频”,而且还得显示出视频的播放时长,我们直接上最简单的代码,必须是最简单,多一句啰嗦都不准点赞。 How to do 1.提前引入包 2.逻辑实现

    2024年01月24日
    浏览(41)
  • java ffmpeg获取视频时长

    nacos里面配置的ffmpegPath,如果不用这个,也可以自己写一个ffmpegPath的地址 代码

    2024年02月07日
    浏览(45)
  • FFmpeg框架系列:获取视频时长

    业务需求:对上传的视频显示该时长。 FFmpeg官网:http://ffmpeg.org/ 我在这篇五分钟JAVA代码教会你:FFmpeg实现视频试看(window版本)中写的十分详细,在windows/Linux安装FFmepg,此处我就不过多阐述了。 在window中安装FFmpeg后,在cmd执行获取时长的命令即可: PS:解压在windows本地的ffmpe

    2024年02月09日
    浏览(47)
  • Python获取音视频时长

    上代码:获取音视频时长.py pyinstaller -F 获取音视频时长.py 链接:https://pan.baidu.com/s/1WvsMyPHD3iFsM844gfC2Jg?pwd=yyds

    2024年02月15日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包