这里写目录标题
前言
因为涉及很多细节的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

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

被折叠的 条评论
为什么被折叠?



