openwrt gstreamer实例学习笔记(二.gstreamer 的 Element)
2015-06-08 17:56
567 查看
对程序员来说,GStreamer 中最重要的一个概念就是 GstElement 对象。该对象是构建一个媒体管道的基本块。所有上层(high-level)部件都源自GstElement对象。任何一个解码器编码器、分离器、视频/音频输出部件实际上都是一个 GstElement对象。
对程序员来说,element就像一个黑盒子。你element的一端输入数据,element对数据进行一些处理,然后数据从element的另一端输出。拿一个解码element来说,你输入一 些有特定编码的数据,element会输出相应的解码数据。
Source elements:为管道产生数据,比如从磁盘或者声卡读取数据。源元件不接收数据,仅产生数据。
![](http://images0.cnblogs.com/blog/460260/201506/081755404102567.jpg)
Like Filter elements:同时拥有输入和输出pads , 他们对从输入pads得到的数据进行操作,然后将数据提供给输出pads。比如过滤器(filters)、转换器(convertors)、分流器(demuxers)、整流器(muxers)
![](http://images0.cnblogs.com/blog/460260/201506/081755411604196.jpg)
![](http://images0.cnblogs.com/blog/460260/201506/081755415829024.jpg)
Recv elements : 接收element是媒体管道的末端,它接收数据但不产生任何数据。写磁盘、利用声卡播放声音以及视频输出等都是由接收元件实现的
![](http://images0.cnblogs.com/blog/460260/201506/081755420353097.jpg)
创建一个GstElement对象: 创建一个element的最简单的方法是通过函数gst_element_factory_make (), 你不再需要一个元件时,你需要使用 gst_object_unref ()来对它进行解引用.
下面的例子显示了如果通过一个fakesrc工厂对象来创建一个名叫source的元件。程序会检查元件是否创建成功。检查完毕后,程序会销毁元件.
#include <gst/gst.h>
int main (int argc,
char *argv[])
{
GstElement *element;
/* init GStreamer */
gst_init (&argc, &argv);
/* create element */
element = gst_element_factory_make ("fakesrc", "source");
if (!element) {
g_print ("Failed to create element of type 'fakesrc'\n");
return -1;
}
printf("successful to make element...\n");
gst_object_unref (GST_OBJECT (element));
printf("destory the element...\n");
return 0;
}
gst_element_factory_make其实是 gst_element_factory_find () 和 gst_element_factory_create()两个函数的合体。
gst_element_factory_find ():获得一个唯一的工厂对象 GstElementFactory对象
gst_element_factory_create() :使用element工厂并根据给定的名字来创建一个element对象。
#include <gst/gst.h>
int main (int argc,
char *argv[])
{
GstElementFactory *factory;
GstElement * element;
/* init GStreamer */
gst_init (&argc, &argv);
/* create element, method #2 */
factory = gst_element_factory_find ("fakesrc");
if (!factory) {
g_print ("Failed to find factory of type 'fakesrc'\n");
return -1;
}
element = gst_element_factory_create (factory, "source");
if (!element) {
g_print ("Failed to create element, even though its factory exists!\n");
return -1;
}
gst_object_unref (GST_OBJECT (element));
return 0;
}
GstElement的属性大多通过标准的 GObject 对象实现的。使用 GObject 的方法可以对GstElement实行查询、设置、获取属性的值。同样 GParamSpecs 也被支持。
每个 GstElement 都从其基类 GstObject 继承了至少一个“名字”属性。这个名字属性将在函数gst_element_factory_make ()或者函数gst_element_factory_create ()中使用到。
你可通过函数 gst_object_set_name 设置该属性,通过 gst_object_get_name 得到一个对象的名字属性。你也可以通过下面的方法来得到一个对象的名字属性。
#include <gst/gst.h>
int main (int argc, char *argv[])
{
GstElement *element;
gchar *name;
/* init GStreamer */
gst_init (&argc, &argv);
/* create element */
element = gst_element_factory_make ("fakesrc", "source");
/* get name */
g_object_get (G_OBJECT (element), "name", &name, NULL);
g_print ("The name of the element is '%s'.\n", name);
g_free (name);
gst_object_unref (GST_OBJECT (element));
return 0;
}
对程序员来说,element就像一个黑盒子。你element的一端输入数据,element对数据进行一些处理,然后数据从element的另一端输出。拿一个解码element来说,你输入一 些有特定编码的数据,element会输出相应的解码数据。
Source elements:为管道产生数据,比如从磁盘或者声卡读取数据。源元件不接收数据,仅产生数据。
![](http://images0.cnblogs.com/blog/460260/201506/081755404102567.jpg)
Like Filter elements:同时拥有输入和输出pads , 他们对从输入pads得到的数据进行操作,然后将数据提供给输出pads。比如过滤器(filters)、转换器(convertors)、分流器(demuxers)、整流器(muxers)
![](http://images0.cnblogs.com/blog/460260/201506/081755411604196.jpg)
![](http://images0.cnblogs.com/blog/460260/201506/081755415829024.jpg)
Recv elements : 接收element是媒体管道的末端,它接收数据但不产生任何数据。写磁盘、利用声卡播放声音以及视频输出等都是由接收元件实现的
![](http://images0.cnblogs.com/blog/460260/201506/081755420353097.jpg)
创建一个GstElement对象: 创建一个element的最简单的方法是通过函数gst_element_factory_make (), 你不再需要一个元件时,你需要使用 gst_object_unref ()来对它进行解引用.
下面的例子显示了如果通过一个fakesrc工厂对象来创建一个名叫source的元件。程序会检查元件是否创建成功。检查完毕后,程序会销毁元件.
#include <gst/gst.h>
int main (int argc,
char *argv[])
{
GstElement *element;
/* init GStreamer */
gst_init (&argc, &argv);
/* create element */
element = gst_element_factory_make ("fakesrc", "source");
if (!element) {
g_print ("Failed to create element of type 'fakesrc'\n");
return -1;
}
printf("successful to make element...\n");
gst_object_unref (GST_OBJECT (element));
printf("destory the element...\n");
return 0;
}
gst_element_factory_make其实是 gst_element_factory_find () 和 gst_element_factory_create()两个函数的合体。
gst_element_factory_find ():获得一个唯一的工厂对象 GstElementFactory对象
gst_element_factory_create() :使用element工厂并根据给定的名字来创建一个element对象。
#include <gst/gst.h>
int main (int argc,
char *argv[])
{
GstElementFactory *factory;
GstElement * element;
/* init GStreamer */
gst_init (&argc, &argv);
/* create element, method #2 */
factory = gst_element_factory_find ("fakesrc");
if (!factory) {
g_print ("Failed to find factory of type 'fakesrc'\n");
return -1;
}
element = gst_element_factory_create (factory, "source");
if (!element) {
g_print ("Failed to create element, even though its factory exists!\n");
return -1;
}
gst_object_unref (GST_OBJECT (element));
return 0;
}
GstElement的属性大多通过标准的 GObject 对象实现的。使用 GObject 的方法可以对GstElement实行查询、设置、获取属性的值。同样 GParamSpecs 也被支持。
每个 GstElement 都从其基类 GstObject 继承了至少一个“名字”属性。这个名字属性将在函数gst_element_factory_make ()或者函数gst_element_factory_create ()中使用到。
你可通过函数 gst_object_set_name 设置该属性,通过 gst_object_get_name 得到一个对象的名字属性。你也可以通过下面的方法来得到一个对象的名字属性。
#include <gst/gst.h>
int main (int argc, char *argv[])
{
GstElement *element;
gchar *name;
/* init GStreamer */
gst_init (&argc, &argv);
/* create element */
element = gst_element_factory_make ("fakesrc", "source");
/* get name */
g_object_get (G_OBJECT (element), "name", &name, NULL);
g_print ("The name of the element is '%s'.\n", name);
g_free (name);
gst_object_unref (GST_OBJECT (element));
return 0;
}
相关文章推荐
- Oralce动态视图v$session_longops使用
- ListView的setSelection()和setSelectionFromTop()联系
- Ubuntu14.04安装完全分布式Hadoop1.2.1
- Ubuntu14.04安装wineqq国际版
- uboot启动过程完全分析(mini2440)
- ubunbtu 更新
- Mini2440学习笔记(二)——GPIO
- 第一章 设计程序架构 之 分层架构
- ffmpeg源码跟踪笔记之avformat_open_input
- Ubuntu14.04(32位)下安装使用docker
- adb shell am 的用法
- linux源码Makefile详解(完整)
- openwrt 的/etc/config/wireless 文件解析
- Linux标准目录
- linux中adb查看Android设备显示“no permission”的解决方案
- HowTo: Restart SSH Service under Linux / UNIX
- Centos 上开启防火墙 PPTPD 无法访问其他客户端
- shell学习第五天--基本的I/O重定向
- 自助Linux之问题诊断工具strace
- hadoop2.2.0 Zookeep搭建