[AI开发]DeepStream开发填坑记录
下面是在deepstream使用过程中碰到的一些坑:
(1)Pipeline中的Sink如果需要编码存文件或者推rtmp的流,注意控制编码的参数,编码质量不要太高。否则可能Sink带不动,整个Pipeline有数据积累,延时越来越高,程序占用的内存越来越大,最终crash。开发中碰到一个问题:刚开始延时2秒,后来延时慢慢增大,观察发现内存一点点增高。排除了推理性能不够的因素,最后定位编码推rtmp流的时候,分辨率太大(deepstream3.0没有硬编码的插件),导致编码性能不够,后来调整编码分辨率,延时没有积累。这个就像高速出口拥堵,拥堵长度慢慢增加,从匝道一直堵到了主干路。
(2)分析Pipeline的Src有很多种,file、rtsp、rtp等等。个人经验判断,使用rtp的方式最好(udpsrc插件)。如果需要分析N路视频,需要创建N个udpsrc,N个decoder,每路一个decoder,各自连接在一起,最终通过nvstreammux插件将这N条分支合并起来,再与推理插件连接。使用rtp的好处是:即插即用,与其他模块的耦合性低。一个系统中用于视频分析pipeline不可能独立存在,前面还需要给他推流的模块,而使用udp的方式接收rtp报文无疑是最方便的,哪路有数据哪路就开始工作,没数据的分支不影响有数据的分支。注意,如果有N路视频流,在用nvstreammux合并的时候,nvstreammux的 batched-push-timeout属性一定不能设置为-1,-1表示无限等待,必须等到每个分支都收到数据,如果这时候有一路没有视频流了(只有N-1路有数据),那么会无限等待,其他分支不能正常工作。可以设置一个合理的值,比如40000(40ms),过了这个时间如果某个分支没有数据,等待40ms之后就不会再等了。
(3)动态删除/添加/替换Pipeline中的插件非常麻烦,实际应用中,比如需要给某路视频录像,由于录像是有时间限制的,因此不可能一直使用filesink,当时间到了,我们需要将录像用到的filesink替换成fakesink,这个替换过程很复杂:先需要在filesink的上一个插件的src-pad上添加一个block 的probe,然后在这个probe中编写代码将filesink remove掉,创建新的fakesink,然后将fakesink连在原来filesink的位置,最后返回GST_PAD_PROBE_REMOVE,表示将block probe移除,整个流程结束。反过来,当需要录像时,一样需要添加一个block probe,然后在这个probe中将filesink加上去,开始录像。
(4)目标跟踪优先使用KLT算法,但是这个算法特别吃CPU,所以如果影响到整个pipeline的性能了,比如FPS变小了,可以切换到IOU,IOU的跟踪效果不如KLT,但是还凑合,关键还是检测模型要准,这样可以弥补一下IOU的缺陷。IOU相对而言对CPU依赖更小。
(5)在使用udpsrc接收其他模块发来的rtp数据时,由于其他模块可能出现故障会重启,重启后接着发送rtp数据,这时候pipeline中的rtph264depay可能会抛出NAL unit type 26 not supported的异常,这是因为之前piepline中可能有残留数据,导致depay失败。对于这个error,我们在bus_callback中捕获之后,不需要做任何处理,千万不要delete整个pipeline再recreate,这样会导致内存泄漏(至今没找到什么原因),最后越来越卡,FPS越来越小。
未完待续
[AI开发]DeepStream开发填坑记录的更多相关文章
- 微信小程序开发技巧及填坑记录
以下是自己在开发过程中遇到的坑和小技巧,记录以下: 1.出现了 page[pages/XXX/XXX] not found.May be caused by :1. Forgot to add pag ...
- webapp填坑记录[更新中]
网上也有许多的 webapp 填坑记录了,这几个月,我在公司正好也做了2个,碰到了一些问题,所以我在这里记录一下我所碰到的问题: meta 头部声明在开发的时候,刚刚创建 HTML 文件,再使用浏览器 ...
- webapp填坑记录
网上也有许多的 webapp 填坑记录了,这几个月,我在公司正好也做了2个,碰到了一些问题,所以我在这里记录一下我所碰到的问题: meta 头部声明在开发的时候,刚刚创建 HTML 文件,再使用浏览器 ...
- Phoenix踩坑填坑记录
Phoenix踩坑填坑记录 Phoenix建表语句 如何添加二级索引 判断某表是否存在 判断索引是否存在 Date类型日期,条件判断 杂项 记录Phoenix开发过程中的填坑记录. 部分原文地址:ph ...
- Kafka踩坑填坑记录
Kafka踩坑填坑记录 一.kafka通过Java客户端,消费者无法接收消息,生产者发送失败消息 二. 一.kafka通过Java客户端,消费者无法接收消息,生产者发送失败消息 在虚拟机上,搭建了3台 ...
- Linux踩坑填坑记录
Linux踩坑填坑记录 yum安装失败[Errno 14] PYCURL ERROR 6 - "Couldn't resolve host 'mirrors.aliyun.com'" ...
- Android—基于微信开放平台v3SDK,开发微信支付填坑。
接触微信支付之前听说过这是一个坑,,,心里已经有了准备...我以为我没准跳坑出不来了,没有想到我填上了,调用成功之后我感觉公司所有的同事都是漂亮的,隔着北京的大雾霾我仿佛看见了太阳~~~好了,装逼结束 ...
- 微信小程序发送红包功能。填坑记录
微信官方文档 1.开通条件 (1)商户号已入驻90日 (2)商户号有连续30天正常交易 (3)只有企业资质的商户才有资格申请 2.注意事项 (1)目前小程序红包仅支持用户微信扫码打开小程序 (2)小程 ...
- MVC5项目转.Net Core 2.2学习与填坑记录(1)
流程都是自己摸索,错误地方随便指正... 老项目过于臃肿,并且所有请求都是提交到一个api中,这样当api挂掉的时候,基本所有的项目都瘫痪掉了. 在4月底的时候,下决心将项目用微服务进行重写,刚开始的 ...
- F2eTest和uirecorder自动化测试环境部署填坑记录
坑1:尝试部署的时候只在opennode.bat里面填写了两个浏览器,测试通过后再增加其他浏览器,页面上一直不显示. 填坑:需要清空数据库里的`wd_browsers`和`wd_nodes`表,然后重 ...
随机推荐
- CCNA 之 四 管理和配置CISCO设备
管理和配置CISCO设备 路由器组件 cpu 执行操作系统的指令 随机访问存储器RAM - RAM中内容断电丢失 - 运行操作系统: - 运行配置文件: - IP 路由表: - ARP 缓存; - 数 ...
- AutoCAD二次开发(2020版)--4,使用ARX向导创建编程模板(框架)--
手动创建ObjectARX应用程序非常麻烦,在此步骤中,将介绍ObjectARX向导. 在这里,我们将使用ObjectARX向导创建我们的ObjectARX应用程序. 本节的程序的需求是,接收CAD用 ...
- Djangoday2第二个app加减法
第二个app 计算新建一个app在view定义显示的内容修改urls指定连接对应的视图测试另一种通过路径传参的方式访问网址路径传参的urls定义方法网址路径传参测试urls的urlnamedjango ...
- PHP安全之道3:常见漏洞和攻防
第一篇 SQL注入 安全配置和编程安全并不是万全之法,攻击者往往可以通过对漏洞的试探找到新的突破口,甚至0days. 下面总结以下常见漏洞,在日常开发维护工作中可以留意. *聊聊老朋友:SQL注入漏洞 ...
- 用Python调用华为云API接口发短信
[摘要] 用Python调用华为云API接口实现发短信,当然能给调用发短信接口前提条件是通过企业实名认证,而且有一个通过审核的短信签名,话不多说,showcode #!/usr/bin/python3 ...
- MyCat学习 ------分库分表 随笔
垂直切分.水平切分 1.垂直分库,解决库中表太多的问题. 2.垂直分表,解决表中列太多的问题.例如 商品表 包含 产地.二维码 .时间.价格.各个列.分为不同的小表. 水平切分, 大数据表拆分为小表 ...
- vue 常用的官网
vue.js https://cn.vuejs.org/ v-charts https://v-charts.js.org/#/ (图表,地图) web ...
- 测试工程师有福啦!一键生成api文档及测试功能
最近发现一个比较好用的插件,可根据api的功能注释说明一键生成文档以及功能demo: swaggerUI 是一个简单的Restful API 测试和文档工具.简单.漂亮.易用.通过读取JSON 配置显 ...
- 《JavaScript 正则表达式迷你书》知识点小抄本
介绍 这周开始学习老姚大佬的<JavaScript 正则表达式迷你书> , 然后习惯性的看完一遍后,整理一下知识点,便于以后自己重新复习. 我个人觉得:自己整理下来的资料,对于知识重现,效 ...
- GitHub上传自己的项目
git下载地址:https://git-scm.com/downloads 1.下载git,直接下一步进行安装 2.安装完成后,双击git-bash.exe运行 3.cd进入你的项目路径 4.输入 g ...