Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1247354
  • 博文数量: 261
  • 博客积分: 4196
  • 博客等级: 上校
  • 技术积分: 3410
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-17 17:05
文章分类

全部博文(261)

文章存档

2018年(1)

2017年(22)

2016年(2)

2015年(8)

2014年(27)

2013年(40)

2012年(161)

分类: 嵌入式

2017-10-18 10:27:42

对程序员来说,GStreamer 中最重要的一个概念就是 GstElement 对象。该对象是构建一个媒体管道的基本块。所有上层(high-level)部件都源自GstElement对象。任何一个解码器编码器、分离器、视频/音频输出部件实际上都是一个 GstElement对象。element就像一个黑盒子。你element的一端输入数据,element对数据进行一些处理,然后数据从element的另一端输出。拿一个解码element来说,你输入一 些有特定编码的数据,element会输出相应的解码数据。

element 分三大类:Source elements(源),Like Filter elements(链接),Recv  elements(接收)

Source elements:为管道产生数据,比如从磁盘或者声卡读取数据。源元件不接收数据,仅产生数据。
         
Like Filter elements:同时拥有输入和输出pads , 他们对从输入pads得到的数据进行操作,然后将数据提供给输出pads。比如过滤器(filters)、转换器(convertors)、分流器(demuxers)、整流器(muxers)
                     
Recv  elements : 接收element是媒体管道的末端,它接收数据但不产生任何数据。写磁盘、利用声卡播放声音以及视频输出等都是由接收元件实现的
        
创建一个GstElement对象: 创建一个element的最简单的方法是通过函数gst_element_factory_make (), 你不再需要一个元件时,你需要使用 gst_object_unref ()来对它进行解
    下面的例子显示了如果通过一个fakesrc工厂对象来创建一个名叫source的元件。程序会检查元件是否创建成功。检查完毕后,程序会销毁元件.
#include
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对象。

    GstElement的属性大多通过标准的 GObject 对象实现的。使用 GObject 的方法可以对GstElement实行查询、设置、获取属性的值。同样 GParamSpecs 也被支持。每个 GstElement 都从其基类 GstObject 继承了至少一个“名字”属性。这个名字属性将在函数gst_element_factory_make ()或者函数gst_element_factory_create ()中使用到。你可通过函数 gst_object_set_name 设置该属性,通过 gst_object_get_name 得到一个对象的名字属性。你也可以通过下面的方法来得到一个对象的名字属性。
#include
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;
}

阅读(1438) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~