
gstreamer/DeepStream
柳鲲鹏
建立了编程学(编程基本功、平台化编程)、六石管理学等几个流派。
每涉及一个领域,都是顶级砖家。在这些领域中,如果遇到问题,最后肯定是搜索到本博客。
展开
-
碰到一个摄像头预览画面跳帧的安卓设备
最近有人向吾抱怨,摄像头画面卡顿,也就是隔几秒画面会卡一下然后再跳过。吾开始以为是分辨率太高、CPU高导致,后来发现:低分辨率(176x144),无编解码,也会卡。 预览画面并不卡。 从摄像头回调得到的数据,显示出来会卡。 同样代码,在其他设备上一切正常。 反复验证确认,跟吾代码是没有任何关系的,可以确定是设备问题。可能有:摄像头模组,ISP,CPU。 从帧率来看,也正常。...原创 2020-04-27 08:14:43 · 1351 阅读 · 0 评论 -
gstreamer/deepstream崩溃记录及分析
今天专门测试了一下摄像头的断电问题.这个问题以前一直想做,今天终于下决心.这一套视频使用的gstreamer/deepstream.如前文所说的结束方法,结束代码如下:gst_element_set_state(pipeline, GST_STATE_NULL);gst_object_unref(pipeline); 如果摄像头已启动完成,再启动程序,这两句是可以正常执...原创 2019-03-08 20:58:25 · 1692 阅读 · 0 评论 -
gstreamer正确的结束办法
原来的方案:gboolean callback_bus_call (GstBus * bus, GstMessage * msg, gpointer data){ ...... gst_element_set_state(pipeline, GST_STATE_NULL); g_main_loop_quit(loop); return true;}...原创 2019-03-08 12:11:27 · 2526 阅读 · 3 评论 -
解决办法:GLib-ERROR **: Creating pipes for GWakeup: Too many open files
程序运行出现错误:GLib-ERROR **: Creating pipes for GWakeup: Too many open files 网上一查,原因是:当前进程创建的线程个数,超过Ubuntu 限制的每个进程可创建线程个数导致. 推荐的解决办法如下:# 先看看当前设置情况?ulimit -a# 再改一下设置:ulimit -n 4096 可...原创 2019-01-03 18:14:35 · 4334 阅读 · 1 评论 -
gstreamer插件用不了,及黑名单Blacklist的解决办法
公司开发了三个gstreamer插件,结果有一个能用,另外两个死活用不了(即gst_element_factory_make结果为空).去/usr/lib/x86_64-linux-gnu/gstreamer-1.0目录下看,插件文件也是存在的。这是怎么回事?gst-inspect-1.0………………总数: 239 个插件 (2 个黑名单记录 not shown), 1326 ...原创 2018-12-02 18:35:02 · 6530 阅读 · 21 评论 -
gstreamer的插件如何复制数据
工作中,使用了gstreamer和nvidia的DeepStream插件。如何从nvidia插件中获取数据,这个之前吾有博文专门论述。因为这个很少介绍,也不好找。吾当时也是运气好,从别的代码中得到启示,才找到了正确的解决办法。 那么,普通的gstreamer插件如何获取数据呢?比如说,从decoder(包括nvidia decoder插件)中,获取原始的h264数据代码是怎样的?这个很简...原创 2018-11-26 14:39:01 · 3030 阅读 · 0 评论 -
全网首发:gstreamer中正确使用avdec_h264插件
今天专门研究nvdec_h264的显存释放问题。首先要证明流程没有问题。怎么证明?就是换别的插件。结果换上avdec_h264死活不能正确运行。 于是网上到处搜索啊搜索,最后终于找到了一个范例,原来,需要配套使用xvimagesink插件: 两个插件之间不要有其他插件。 xvimagesink就是最后结束的插件,直接显示。 具体代码就不列出,遇到这个问题的都应该很了解。...原创 2018-10-16 16:24:09 · 6286 阅读 · 0 评论 -
gstreamer插件特别要注意事件处理(含代码范例)
因为工作需要,同事写了一个Transform插件,吾写了一个 Sink插件。结果吾在测试的时候,发现数据流结束了,流程一直无法正常结束。再网上反复搜索,连蒙带猜的折腾了一番,还是不行。 昨天发现显存无法正常释放,今天在查找原因。先将两个插件从流程中删除,发现可以正常结束。加上Transform就不能正常结束了。原来问题出在这个插件上这里……于是又开始连蒙带猜…… 老兄,咱玩编程,好...原创 2018-10-13 14:31:47 · 2254 阅读 · 0 评论 -
gstreamer之RTSP Server一个进程提供多路不同视频
柳鲲鹏rtsp-server本身没有提供类似功能。经过反复测试实验,终于找到了正确办法。直接提供源码,需要的朋友下载使用。此源码已反复测试过(在此基础上,可以实现多个进程、多个端口功能。这里就不重复了)。#include <string.h>#include <stdio.h>#include <stdlib.h>#include &l...原创 2018-10-10 16:34:19 · 5939 阅读 · 24 评论 -
gstreamer之RTSP Server test-mp4正确运行代码
柳鲲鹏 很多朋友运行了test-readme之后,就运行test-mp4,结果发现不能正确运行,也就是看不到画面。 经过搜索,找到了解决办法,测试通过:将其中的源字串,改为: str = g_strdup_printf ( "(" " filesrc location=\"%s\" ! qtdemux " " !queue ! h264pa...原创 2018-10-10 11:41:46 · 1628 阅读 · 9 评论 -
gstreamer之RTSP Server编译及注意事项
柳鲲鹏下载下载网址https://gstreamer.freedesktop.org/src/gst-rtsp-server/下载哪个版本?这个要跟自己的gstreamer配套(小于等于)。比如吾gstreamer版本是1.8.3,虽然最新的是1.14.4,吾必须下载1.8.3。否则编译会报错:configure: Requested 'gstreamer-1.0 >= 1....原创 2018-10-10 10:25:21 · 3286 阅读 · 0 评论 -
编译安装汇总:nVidia驱动/CUDA/cuDNN/TensorRT/OpenCV/gstreamer/DeepStream/jpeglib等
柳鲲鹏重新安装了一遍,各种问题都遇到了,也都记录了。为了查阅方便,特别进行了一次汇总。注意:DeepStream 2.0,必须:驱动396,CUDA 9.2。如果不用DeepStream 2.0,使用驱动390,CUDA 9.0。 序号 安装项目 版本 等级 结果 ...原创 2018-09-30 08:54:32 · 1167 阅读 · 0 评论 -
LINUX安装DeepStream
柳鲲鹏下载:略注意,DeepStream 2.0的要求:Ubuntu 16.04 LTS (with GCC 5.4) NVIDIA Display Driver ver. 396.26 NVIDIA Video SDK 8.0 cuDNN 7 & TensorRT 4.0 NVIDIA CUDA 9.2解压tar xvf DeepStreamSDK-2.0_EA_...原创 2018-09-30 08:36:41 · 3526 阅读 · 6 评论 -
LINUX安装TensorRT及特别注意事项
柳鲲鹏python安装,参考其他文章。注意,TensorRT4对应的版本号是3.5,高了低了都有可能安装不了。这个在TensorRT的python目录下,可以看到包含有cpXX的whl文件,就是对用的python版本号。下载 解压tar xvf TensorRT-4.0.1.6.Ubuntu-16.04.4.x86_64-gnu.cuda-9.2.cudnn7.1.tar.gz ...原创 2018-09-29 13:04:39 · 5058 阅读 · 0 评论 -
LINUX上安装gstreamer,解决video.h找不到的错误
总是有各种意外。之前解决过,没有记录。这次记录下来。安装命令# 能装的都给他装了。sudo apt-get install gstreamer1.0-plugins-base gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-plugins-bad-videoparsers gstreamer1.0-plugins-g...原创 2018-09-28 14:00:16 · 3424 阅读 · 3 评论 -
CUDA的内存泄露问题及解决办法
这几天,发现程序运行时,内存不断增加。首先吾确认自己的代码没有内存泄露,因为自己反复排查过多次,并测试过多次。于是跟踪刚加入的一个插件。于是对其内存进行了排查,发现也没有问题。嗯? 这意思就是,插件运行,导致吾这里内存有泄露?于是对各个功能进行了屏蔽,发现CUDA转JPG的代码会导致内存增加。注释之后,内存不增加了。于是不断的尝试,其中有几次错误结论,终于定位到了错误语句:NPP_C...原创 2018-09-26 20:12:44 · 6353 阅读 · 2 评论 -
gstreamer实现sink插件的代码,及无法结束的问题
同事写了一个 gstreamer插件,去掉显示之后,整个流不运行。吾视之,看不出问题。猜测是插件类型不对,于是改写了一个sink插件,试之,流运行了。然后,有一个问题没有解决: 如果是播放文件,文件结束后,无法结束(即使得GstBus收到GST_MESSAGE_EOS消息)。 虽然有此严重问题,整个系统运行起来了。这个问题以后看看怎么解决。这里把代码共享出来,希望能给朋友们们带...原创 2018-09-18 15:15:17 · 1849 阅读 · 0 评论 -
gstreamer向appsrc发送数据的代码
有一位朋友看了吾《gstreamer向appsrc发送帧画面的代码》,表示不知道怎么填充数据。这个吾正好也做了(当时能找到办法也是运气好),就开放出来,希望能给朋友们带来帮助:#define BUFFER_SIZE 4096static void callback_feed_data_start (GstElement * source, guint size, void * arg...原创 2018-09-13 19:26:37 · 3050 阅读 · 18 评论 -
jpegNPP编译为so
总算编译过去了。能不能用,还没测试。 编译命令如下:clearecho -------------------------------------------------------------nvcc jpegNPP.cpp \ --compiler-options "-Wall -Wfatal-errors -Ofast -DOPENCV -DGPU -DCUDNN...原创 2018-09-10 14:11:12 · 640 阅读 · 0 评论 -
Nsight中给工程添加include目录
在LINUX上,使用Nsight打开一个工程,结果编译不过,找不到头文件。怎么办?加。 右键,属性,General->Code Analysis->Paths and Symbols。Includes下加入程序需要用到的头文件的路径。 Library Path下添加需要用到库文件的路径。...原创 2018-09-10 11:43:21 · 1058 阅读 · 0 评论 -
cudaMemcpy的性能问题
近来完成了一个功能,然后进行各项测试工作的。吾发现了一个cudaMemcpy有严重的性能问题。如果复制的数据量,不超过1920x1080*4(颜色)*4(画面),性能表现良好。 一旦超过,性能急剧恶化,消耗的时间大增。 有人奇怪了:汝怎么知道的? 这有什么奇怪的,测试多个摄像头的时候发现画面卡顿,再检查哪个步骤,就知道了。 怎么解决呢?当然是限制数据量的大小。...原创 2018-09-10 07:30:58 · 5772 阅读 · 0 评论 -
gstreamer中查看有哪些元素以及元素的属性(参数)
将所有信息输出到文件中:gst-inspect-1.0 > gs.txt 查看包含相关字串的命令:gst-inspect-1.0 | grep h264 查看某个元素:gst-inspect-1.0 rtspsrc原创 2018-09-05 13:44:19 · 1982 阅读 · 0 评论 -
deepstream-app源码没有公开,预计3.0可能公开
管理员以为公开了,有人回复说找不到。于是一问,确实没有。3.0可能公开? 这不过是个一些接口的调用,怎么就不能公开?原创 2018-09-03 17:53:44 · 967 阅读 · 0 评论 -
gstreamer支持多摄像头的思路
已知:gstreamer可以很好的支持多文件同时播放。 gstreamer无法正常支持多摄像头同时播放。偶尔可以,多数情况下直接崩溃。 两个现象对比,可以确定是因为摄像头建立链接、接受数据有延迟导致的。目前分析是在h264parse出错的。 解决思路:主线程使用appsrc。 每个摄像头一个线程。 对每个摄像头增加一个探头,保存读取到的数据。 当下游元素请求数据...原创 2018-09-03 15:57:02 · 2731 阅读 · 4 评论 -
GstElement的sink/src有什么区别?
比如以下代码:static void probe_add(GstElement* element, char* tag){ GstPad* osd_sink_pad = gst_element_get_static_pad (element, "sink"); if (osd_sink_pad) { gst_pad_add_probe (osd_...原创 2018-09-02 08:38:02 · 1446 阅读 · 0 评论 -
gstreamer向appsrc发送编码数据的代码
上一篇文章中,提供了发送视频帧数据的方法。有人问了,这是理想情况,对于编码数据,怎么办? 经过一番折腾,终于找到可用的办法。下面代码,测试通过:#include <gst/gst.h> static FILE * appSrcFile = NULL;static int read_counter = 0;static char read_buffer[4096...原创 2018-08-31 08:02:02 · 3065 阅读 · 15 评论 -
gstreamer向appsrc发送帧画面的代码
这个代码可以正常运行,黑白画面交替:#include <gst/gst.h>#define VIDEO_WIDTH 384#define VIDEO_HEIGHT 288#define VIDEO_FORMAT "RGB16"#define PIXEL_SIZE 2static void cb_need_data (GstElement *apps...原创 2018-08-30 19:24:57 · 4137 阅读 · 8 评论 -
DeepStream不支持多 RTSP源(多个摄像头)
顺利调通各项功能之后,顺利的接入了摄像头。心想接多个摄像头不是理所当然的吗?于是要了几个摄像头进行测试,结果……嗝屁了……反复研究代码,都没有解决。 今天到NVIDIA论坛上,还真有人问这个事。结果也没有人回答。 怎样支持多个摄像头,要另外想办法了,因为这是工作需要。这可有点……...原创 2018-08-30 12:02:35 · 5656 阅读 · 10 评论 -
全网首发:gstreamer如何接入RTSP流(IP摄像头)的代码范例
其实也是运气好,找到了网上的代码。之后反复测试,排列组合,跟自己的代码整合起来了。 这里把有用的部分共享出来。有朋友说跑不起来,这个时候先看看有哪些插件,参考:https://blog.csdn.net/quantum7/article/details/84723053static void on_pad_added (GstElement *element, GstPad...原创 2018-08-28 17:30:04 · 12773 阅读 · 86 评论 -
DeepStream中,获得并修改识别对象参数的代码
增加一个探头GstElement* osd_sink_pad = gst_element_get_static_pad (osd, "sink");gst_pad_add_probe (osd_sink_pad, GST_PAD_PROBE_TYPE_BUFFER, osd_sink_pad_buffer_probe, NULL, NULL);实现osd_sink_pad...原创 2018-08-28 08:25:37 · 4081 阅读 · 14 评论 -
全网首发:DeepStream中,获得视频帧数据的代码
根据工作安排,最近对gstreamer进行了研究。工作中要求,把播放的视频帧画面拿到,进行一些处理。这东西可是够偏门的,搜索的资料实在太少。经过反复搜索,连蒙带猜,终于解决了。 解决之后觉得自己真的好幸运:之前对gstreamer/cuda等等一无所知,临时上手。 并没有代码告诉说如何取得视频画面,完全是通过搜索到的一点蛛丝马迹,连蒙带猜找到正确的路子。 自己的反复测试、验证、分...原创 2018-08-28 08:13:24 · 9613 阅读 · 27 评论 -
DeepStream运行范例出错,提示缺少libnvinfer.so怎么办?
没有范例的软件都是……卖不掉的。 DeepStream有几个范例,安装之后能够运行。其中一个提示错误:GStreamer-WARNING **: Failed to load plugin '/usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstnvinfer.so': libnvinfer.so.4: cannot open shared o...原创 2018-08-24 11:18:24 · 13662 阅读 · 9 评论