gstreamer学习笔记

最近在用嵌入式设备同时读取多路摄像头的数据,需要用到gstreamer,所以写一下学习心得

gst_element_factory_make是GStreamer中用于创建元素实例的函数
第一个参数const gchar *factoryname: 表示要创建的元素的工厂名称,一般有以下几种
“autovideosink”: 用于自动选择可用的视频渲染器。
“autoaudiosink”: 用于自动选择可用的音频渲染器。
“videotestsrc”: 用于生成测试视频数据。
“audiotestsrc”: 用于生成测试音频数据。
“filesrc”: 用于从文件中读取媒体数据。
除了上述内置元素类型外,用户还可以通过注册自定义的元素工厂来创建自定义的元素类型,并使用工厂名称来指定要创建的自定义元素类型。

第二个参数const gchar *name: 表示要为新创建的元素实例指定的名称。这个名称用于在GStreamer管道中唯一标识该元素实例。这是用户自定义的。

例如:source = gst_element_factory_make (“videotestsrc”, “source”);
#创建一个名为"source"的videotestsrc元素实例,并将其赋值给名为source的变量。

gst_pipeline_new是GStreamer中用于创建管道实例的函数。
参数:const gchar *name: 表示要为新创建的管道实例指定的名称。这个名称用于在GStreamer中唯一标识该管道实例。用户自定义的
pipeline = gst_pipeline_new (“test-pipeline”);
创建了一个名为"test-pipeline"的新的GStreamer管道实例,并将其赋值给名为pipeline的变量。

gst_bin_add_many的参数如下:
GstBin *bin:表示要向其添加元素的GStreamer bin(容器)。
GstElement *element1, …:要添加到bin中的元素列表,可以有一个或多个元素。
NULL:用于表示参数列表的结束。
因此,gst_bin_add_many函数的作用是将一个或多个元素添加到给定的GStreamer bin中。

g_object_set函数用于设置 GObject 的属性。其参数如下:

GObject *object:要设置属性的 GObject 对象。
const gchar *first_property_name:要设置的第一个属性的名称。
…:要设置的属性名称和值,以 NULL 结尾。

g_object_set函数的第二个参数const gchar *first_property_name是一个字符串,用于指定要设置的 GObject 属性的名称。这个参数可以是 GObject 派生类的属性名称,具体取决于要设置的对象类型。

对于具体的 GStreamer 元素或其他 GObject 派生类,其属性名称可以是任何该对象支持的属性。例如,对于videotestsrc元素,可以设置的属性名称包括"pattern"、“is-live”、"foreground-color"等等,具体取决于元素的类型和实现。

因此,g_object_set函数的第二个参数const gchar *first_property_name的选项取决于要设置的对象类型及其支持的属性。

gst_element_set_state函数用于设置 GStreamer 元素的状态。其参数如下:

GstElement *element:要设置状态的 GStreamer 元素。
GstState state:要设置的状态,可以是 GST_STATE_NULL、GST_STATE_READY、GST_STATE_PAUSED 或 GST_STATE_PLAYING。
该函数用于将给定的 GStreamer 元素设置为指定的状态。例如,可以将一个播放器元素设置为播放状态(GST_STATE_PLAYING),或者将其设置为暂停状态(GST_STATE_PAUSED)。

gst_element_get_bus函数是用于从 GStreamer 元素中获取与之关联的总线。在 GStreamer 中,总线用于传递消息,例如状态变化、错误、警告等。通过获取与元素关联的总线,可以监视该元素的消息并做出相应的处理。

函数签名如下:

GstBus* gst_element_get_bus(GstElement *element);
参数 element 是要获取总线的 GStreamer 元素。

调用该函数将返回一个 GstBus 对象,表示与给定元素关联的总线。然后可以使用该总线来设置消息处理回调、监听消息等。

gst_bus_timed_pop_filtered函数用于从 GStreamer 总线中获取下一个满足特定条件的消息,并在超时之前等待。它的参数如下:

GstMessage *gst_bus_timed_pop_filtered (GstBus *bus,
GstClockTime timeout,
GstMessageType types);
bus:要从中获取消息的 GStreamer 总线。
timeout:等待消息的超时时间,以纳秒为单位。如果设置为 GST_CLOCK_TIME_NONE,则表示无限等待。
types:要获取的消息类型,可以是 GstMessageType 枚举值的组合,例如 GST_MESSAGE_STATE_CHANGED、GST_MESSAGE_ERROR、GST_MESSAGE_EOS 等。
调用该函数将等待指定时间,直到满足指定条件的消息出现在总线上。如果在超时之前收到满足条件的消息,将返回该消息。如果超时时间到达而没有满足条件的消息,将返回 NULL。

播放本地视频文件:
使用本地文件路径作为 URI。例如,如果视频文件位于 “/path/to/your/video.mp4”,则将 URI 设置为文件的绝对路径。
g_object_set (data.source, “uri”, “file:///path/to/your/video.mp4”, NULL);
播放摄像头视频流:

使用摄像头设备的标识符作为 URI。在 GStreamer 中,通常可以使用 v4l2src 元素来捕获摄像头视频流。例如,如果要捕获摄像头设备编号为 0 的视频流,可以设置 URI 如下:
g_object_set (data.source, “uri”, “v4l2src device=/dev/video0 ! videoconvert ! videoscale ! video/x-raw,format=YUY2,width=640,height=480 ! autovideosink”, NULL);
请注意,对于摄像头视频流,URI 的格式可能会根据摄像头设备和所需的 GStreamer 管道进行调整。上述示例仅供参考,实际情况可能会根据具体的摄像头设备和需求进行调整。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值