
gstreamer
文章平均质量分 68
山西茄子
多媒体工程师,从事ffmpeg,gstreamer,视频编码,deepstream等开发,做做笔记。
展开
-
pipeline状态的变化
这个函数会调用element的gst_element_set_state_func函数,set_state会保存element的当前,下一个,最终状态。set_state会调gst_element_change_state函数去改状态。从备注上看,gst_bin_iterate_sorted 函数返回一个从后往前的迭代, 然后依次设置子插件的状态。在插件创建,链接之后会调用该函数。原创 2025-03-02 23:31:40 · 366 阅读 · 0 评论 -
DeepStream--图像的等比例填充缩放
利用Gstreamer的videoconvertscale插件。缺点:装的gstreamer可能没有这个插件,也搞不清videoconvertscale,videoscale,videoconvert有什么区别.利用nvstreammux的等比例填充缩放功能,参数是enable-padding。利用nvvideoconvert的dest-crop功能,缺点是需要计算。图像的尺寸是640x420,怎么等比例填充缩放成320x480。先等比率缩放,再用videobox填黑边。原创 2025-02-25 13:55:13 · 229 阅读 · 0 评论 -
tee发送query
如果有个如上的pipeline,element是个自定义的插件,如果element在响应query时,执行“return 1”, 而没有执行“return gst_pad_query_default (pad, parent, query);”, query就不会往下传,tee src0就收到1,按gst_pad_forward的逻辑,while (!done) 就会提前结束,query消息就不会往src1发送。原创 2025-01-22 15:16:32 · 130 阅读 · 0 评论 -
串联两个检测模型
比如第一个模型检测汽车,第二个模型检测车牌,如果将两个模型串联起来。原创 2024-10-29 16:19:41 · 330 阅读 · 0 评论 -
DeepStream做对象模糊的几种方法
deepstream-test1是DeepStream最简单的一个例子,这个例子跑了一个对象检测模型,完整的管道是“file-source -> h264-parser -> nvh264-decoder -> pgie -> nvvidconv -> nvosd -> video-renderer”。源代码用的是opencv的高斯模糊, 当然也可以改成填充,导出sgie的输入tensor,发现也被填充了,所以这里的填充是对frame的buffer做in-place的更改。下面介绍几种模糊的办法。原创 2024-04-09 14:37:51 · 924 阅读 · 0 评论 -
gstreamer协商
实际的func是gst_base_transform_default_query->gst_base_transform_query_caps, 然后又调用gst_pad_peer_query(casfilter的src_pad),参考上面的分析,又调到gst_pad_peer_query(videobox的src_pad), 最终调用的是gst_base_sink_sink_query(fakesink的sink);以一个例子来看gstreamer的协商。做做笔记,仅供参考。原创 2023-05-28 14:42:55 · 323 阅读 · 0 评论 -
相机的gstreamer插件
deepstream SDK提供了一个写好的程序deepstream-app,用户只需修改配置,即可实现图像采集,图像前处理,模型推理,后处理,存文件或发broker。num-buffers: 取多少帧。sensor-id:编号。deepstream做开发。合并两个镜头到一个窗口。原创 2023-03-23 16:10:29 · 600 阅读 · 1 评论 -
deepstream-编解码
x264enc的基类是videoencoder, videoencoder是个壳子,它定义了chain函数gst_video_encoder_chain,这个函数包了一些虚函数,如klass->handle_frame,具体做什么需要子类去实现。gstreamer提供了软编码插件x264enc,x264enc是对软编码库x264的封装,如下图是插件的部分信息。软编插件x264enc。原创 2022-11-27 23:28:04 · 804 阅读 · 0 评论 -
插件内存分析
1. 当pipleline为rtspsrc加其他插件时,如果让其他插件卡主会发生什么事情呢?以rtspsrc+fakesink为例(gst-launch-1.0.exe rtspsrc location=rtsp://xxx!可以看到,过了十几秒后,计数没有变的很大,又成0了,说明卡主fakesink会影响udpsrc的buffer释放,相关的堆栈如下,标注的那行就是fakesink,最上面的那行是bufferpool的释放函数。原创 2022-10-22 22:49:48 · 506 阅读 · 1 评论 -
gstreamer的消息传递机制
//创建bin的同时会创建一个bus,用于接收子插件的消息。 gst_bin_init (GstBin * bin){ bus = g_object_new (GST_TYPE_BUS, "enable-async", FALSE, NULL); bin->child_bus = bus; //childbus是用来接受子元素的消息。} //添加子元素,将child_bus设给子元素gst_bin_add--bclass->add_element-----g原创 2022-07-10 17:04:34 · 966 阅读 · 0 评论 -
GStreamer--GstAggregator插件
short_description:Base class for mixers and muxers, manages a set of input pads and aggregates their streams这个插件是混合类的基类,用于将多个流混合起来,GstVideoAggregator,flvmux,qtmux都是它的子类。流的接入与删除,都出进入request_new_pad和release_pad函数,如下是函数的定义。 gstelement_class->request_n.原创 2022-05-11 16:24:58 · 493 阅读 · 0 评论 -
gstBuffer的 data 和 meta
GstMetatypedef struct _GstMeta GstMeta;struct _GstMeta { GstMetaFlags flags; const GstMetaInfo *info;};typedef struct _GstMetaItem GstMetaItem;struct _GstMetaItem { GstMetaItem *next; guint64 seq_num; GstMeta meta;};可以看到GstMe...原创 2022-04-15 23:16:26 · 4285 阅读 · 0 评论 -
gstreamer工具
gst-launch测试模拟数据gst-launch-1.0 -v -m videotestsrc ! autovideosinktee图像一边播放,一边编码存储gst-launch-1.0 -e v4l2src ! video/x-raw,format=YUY2,width=640,height=480,framerate=30/1 ! tee name=srctee srctee. ! queue ! xvimagesink srctee. ! queue ! videoconver原创 2022-04-14 09:27:48 · 1072 阅读 · 0 评论 -
Gstreamer加打印
调试中会加些打印:检测上级if(1){ GstElement *parent; parent = GST_PAD_PARENT (pad); //取得此pad的上级 char* p = NULL; char* pCur = NULL; if(parent){ p = parent->object.name; //取得上级的名称 pCur = pad->object.name; //取得此pad......原创 2022-01-13 15:58:10 · 524 阅读 · 0 评论 -
liveadder插件分析
GQueue是用链表来模拟队列,包含如下函数。g_queue_peek_head获取头节点数据部分。g_queue_peek_head_link获取头节点g_queue_insert_before (GQueue *queue, GList *sibling, gpointer data)在sibling前插入data。g_queue_pop_head移除队列的首元素。gst_live_adder_setcaps{ //设置混音函数 gst...原创 2022-01-04 17:55:29 · 226 阅读 · 0 评论 -
gstreamer简介
常用gchar * caps_string = gst_caps_to_string (new_selected_caps);g_free (caps_string);需要弄懂的问题tunnel tee queue最后列一下Gstreamer中常见的时间宏,注意Gstreamer中的时间单位是:纳秒#define G_USEC_PER_SEC 1000000#defin...转载 2018-09-06 18:51:08 · 4941 阅读 · 0 评论 -
pad连接与数据流动
gst_pad_push_data函数分析gst_pad_push_data{ gst_pad_chain_data_unchecke(GstPad * pad, gboolean is_buffer, void *data, GstPadPushCache * cache){ caps = gst_pad_data_get_caps (is_buffer, da...转载 2018-09-14 12:28:32 · 2237 阅读 · 0 评论 -
gs--插件高级
插件的注册GST_PLUGIN_DEFINEGST_PLUGIN_DEFINE_STATICgst_plugin_register_staticPAD CAP协商插件的协商在gst_pad_alloc_buffer里。 三大类:静态pad(always pad ),动态pad (sometimes pad),手动pad (on-request pad)#每个...转载 2018-09-14 13:42:46 · 1706 阅读 · 0 评论 -
gstreamer调用directshow采集摄像头数据
gstreamer是个媒体引擎,可用用来开发流媒体,类似ffmpeg的filter,sink接收数据,filter处理数据(如:采集,缩放,编码等),src突出数据给链接的sink。在Windows下,可用使用directshow来操作摄像头,gstreamer可用用利用 dshow来打开采集摄像头数据,然后推送给后面的处理filter。gstreamer开始play会,会执行gst_el...原创 2019-03-29 20:40:34 · 1597 阅读 · 0 评论 -
capsfilter如何起作用?
分析了三个函数,gst_base_transform_getcaps , gst_base_transform_transform_caps, gst_capsfilter_transform_caps 。static GstCaps *gst_base_transform_getcaps (GstPad * pad){ otherpad = (pad == trans->sr...原创 2019-06-08 17:16:57 · 1224 阅读 · 0 评论 -
gstreamer时间管理
PCM早些时候一般用于电话语音传输,电话语音的频率范围是从0-3.4kHz,根据奈奎斯特采样,只要高于最高频率的两倍,就可以实现声音不失真的还原,故只要采样率大于3.4k*2,即可还原电话语音,采用8000Hz只是一种ITU(国际电信联盟)规定,实际上只要大于6.8kHz,都可以实现采样。所以为什么是8000这个数字,可以认为仅仅是一个约定而已。 GstClock用_get_time...转载 2019-07-11 19:52:36 · 1409 阅读 · 1 评论 -
gstreamer的一些总结
以3个插件的连接为例。1第一次会协商。2 第一个插件推送数据,第二个插件先检测能否识别,能识别了,再转换,再推给下一个插件,相当于一个递归的过程。3 转换时,先判断是否需要重新创建buf(有的需要检测,有的需要转换数据),要跟下个插件协商,得到创建buf的大小。4 后面插件的值改变后,会跟前面的协商,caps要保持一致。连接element ,如camcapsfilter...原创 2018-10-03 21:13:01 · 1177 阅读 · 0 评论 -
gstreamer问题
struct _GstBaseTransformPrivate{/* previous buffer had a discont */ gboolean discont;/* caps used for allocating buffers */ gboolean proxy_alloc; GstCaps *sink_alloc; GstCaps *src_alloc;...原创 2019-02-22 21:44:34 · 291 阅读 · 0 评论 -
gs--源码分析
个人理解,仅供参考。分析gst_buffer_make_metadata_writable,gst_base_transform_buffer_alloc,gst_base_transform_getcaps,gst_base_transform_transform_caps,gst_caps_can_intersect,gst_pad_configure_sink,gst_pad_push_...原创 2018-10-06 09:30:19 · 911 阅读 · 0 评论 -
gs--常见函数说明
个人理解,仅供参考。 gchar * caps_string1 = gst_caps_to_string(caps); gchar * caps_string2 = gst_caps_to_string(framerate_caps); gchar * caps_string3 = gst_caps_to_string(intersected_caps); g_...原创 2018-10-04 16:41:04 · 1925 阅读 · 0 评论 -
基于gst-launch的实时转码
目标是实现一个实时转码,可用于IPTV提供节目源。相关工作在ubuntu操作系统下进行。需要对源代码进行修改的时候,直接采用apt-get source命令获取源代码,根据需要进行修改,然后安装,这样能最大限度的保证兼容性和稳定性。命令行示例gstreamer是通过不同功能的element构成pipeline的方式来工作的,一个transcoding也是通过解码,编码等各种element构成...转载 2018-09-09 21:51:03 · 1752 阅读 · 0 评论