• openwrt gstreamer实例学习笔记(二.gstreamer 的 Element)


    对程序员来说,GStreamer 中最重要的一个概念就是 GstElement 对象。该对象是构建一个媒体管道的基本块。所有上层(high-level)部件都源自GstElement对象。任何一个解码器编码器、分离器、视频/音频输出部件实际上都是一个 GstElement对象。

    对程序员来说,element就像一个黑盒子。你element的一端输入数据,element对数据进行一些处理,然后数据从element的另一端输出。拿一个解码element来说,你输入一 些有特定编码的数据,element会输出相应的解码数据。

    Source elements:为管道产生数据,比如从磁盘或者声卡读取数据。源元件不接收数据,仅产生数据。

    wpsAC69.tmp

    Like Filter elements:同时拥有输入和输出pads , 他们对从输入pads得到的数据进行操作,然后将数据提供给输出pads。比如过滤器(filters)、转换器(convertors)、分流器(demuxers)、整流器(muxers)

    wpsAC5B.tmp

    wpsD0DC.tmp

    Recv  elements : 接收element是媒体管道的末端,它接收数据但不产生任何数据。写磁盘、利用声卡播放声音以及视频输出等都是由接收元件实现的

    wps130.tmp

    创建一个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' ");
        return -1;
      }
      printf("successful to make element... ");

      gst_object_unref (GST_OBJECT (element));

      printf("destory the element... ");

      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' ");

        return -1;

      }

      element = gst_element_factory_create (factory, "source");

      if (!element) {

        g_print ("Failed to create element, even though its factory exists! ");

        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'. ", name);
      g_free (name);

      gst_object_unref (GST_OBJECT (element));

      return 0;

    }

  • 相关阅读:
    LeetCode-top100-3. 无重复字符的最长子串
    最长单调递增子序列 POJ 3903 Stock Exchange .
    并查集 POJ 1988 Cube Stacking
    贪心初步 hdu1789 Doing Homework again
    并查集初步题目(2)
    并查集初步题目(1)
    【python】引用模块,以及初探__init__.py
    Python 模块里函数的调用方法和import语句的作用(初学者版)
    二分查找算法
    python之内置函数,匿名函数
  • 原文地址:https://www.cnblogs.com/xuyh/p/4561589.html
Copyright © 2020-2023  润新知