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'\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;

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM