GStreamer第一阶段的简单总结

本文介绍了如何使用GStreamer中的v4l2src插件来获取视频数据,强调了pipeline的概念和PadTemplates的Availability在链接方式中的作用。作者提到GStreamer的复杂性和复用性,适用于图像处理和流媒体推流,并提供了设置ISP图像质量的示例代码。

前言

因为涉及很多细节的GStreamer官方论坛有详细解链接: GStreamer官网,这里不做说明,以下只是涉及到个人的理解和认知,方便后续的查阅。


个人的总结

1)了解pipeline的使用,简单说就是通道的概念, 因为涉及到数据的复用和拓展, 里面有一个filter(tee插件), 通过tee和后续拓展
的绑定关系复用数据,很像许多Soc编解码芯片中的vpss通道的概念。 数据复用为视频编码通道, 数据jpeg通道以及对数据处理的通道。

2)重点是去了解Pad Templates 中的Availability,这个关系到link的方式,另外关注Element Properties的属性设置。

3)工作使用最多的不是作为播放器,而是将采集数据获取后做后续的图像处理,因此以下是从v4l2src插件中获取到数据的方式:
4)GStreamer复用的拓展性导致其复杂性, 还涉及到glib的学习,因此学习成本还是比较高的, 但现主流的流媒体芯片或边缘化芯片大部分都用到GStreamer,
比如NVIDIA和瑞芯微,特别是瑞芯微直接将GStreamer作为框架,增加自己的硬编解码。
5) GStreamer的许多控件非常适合拓展, 比如推流rtp/rtsp/rtmp/webrtc开发非常快,但走API这套的调试以及对API的理解和学习周期比较长。
这里只花了3天时间学习, 做一个记录。

v4l2src插件的简单使用

/**
 *			
	@brief  实现从v4l2src中拿到数据,方便后续数据的操作,比如用作重新硬编解码用

	appsink关键属性: emit-signals默认是关闭
		
 emit-signals        : Emit new-preroll and new-sample signals
                        flags: readable, writable
                        Boolean. Default: false

   
 Element Signals:
   "eos" :	void user_function (GstElement* object,
								gpointer user_data);
   "new-preroll" :	GstFlowReturn user_function (GstElement* object,
												 gpointer user_data);
   "new-sample" :  GstFlowReturn user_function (GstElement* object,
												gpointer user_data);
 
 Element Actions:
   "pull-preroll" :  GstSample * user_function (GstElement* object);
   "pull-sample" :	GstSample * user_function (GstElement* object);
   "try-pull-preroll" :  GstSample * user_function (GstElement* object,
													guint64 arg0);
   "try-pull-sample" :	GstSample * user_function (GstElement* object,
												   guint64 arg0);
 */
#include <unistd.h>
#include <gst/gst.h>
#include <pthread.h>

#include <time.h>
#include <sys/time.h>

#define		TEST_MODULE

//#define VIDEO_X_RAW

typedef struct ExtraCtrl_
{
	int s32brightness;
	int s32Contrast;
	int s32Saturation;
	int s32Hue;
	int s32Sharpness;
	
}Extra_Ctrl_S;

/*
*		@brief 设置ISP图像质量,主要是图像增强类
		@prams[in] source  - SRC plugin			extraCtrl - 外部的图像喜好
		@return  null

		@test:
			1. 通过inspect查看插件支持的图像属性有哪些
*/
void setCameraQuality(GstElement *source, const Extra_Ctrl_S *extraCtrl)
{
		
		g_object_set(source, "do-timestamp", TRUE, NULL);
#if 0
	  GstStructure* extraCtrls = gst_structure_new("logitech_controls",
	  											   "brightness", extraCtrl->s32bri
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值