[linux]gstreamer筆記

來源:互聯網
上載者:User

gstreamer的編程知識,gstreamer作為linux下的多媒體應用以其優良的構思
得到了極大的關注,這種編程思想和方法是非常優秀的. 對於gstreamer編程,我們一般的做
法如下:
  1.用gst_element_factory_find找到一個工廠對象(factory object),比如說"mad"是用於
 mp3的工廠對象,工廠對象主要用於產生元件. 我們這裡用mad工廠主要是要mp3的
 decoder元件的啊~~~
  2.然後用gst_element_factory_create得到element對象,element對象是gstreamer用於實
 現某些特定功能的模組,比如說srcfile用於讀取location檔案,play_audio用於播放音 
 樂,decoder用於mp3解碼等等. 上面這兩步可以用gst_element_factory_make
 ("factory name","element name");來一步登天;
  3.pad(襯件)基本上就是一個element的對外介面,兩個element之間需要用pad才能串連起
 來,可以通過gst_element_get_pad來得到element的pad;
  4.bin(箱櫃)是一個特殊的element,提供element的通道和容器. 可以容納幾個element並
 且將他們串連起來,主要有兩種GstPipeLine和GstThread(用於嚴格的音視屏同步),當然
 我們也可以把幾個bin串連起來,不過我們說過,要有pad才可以做link的動作,所以可以
 用ghost_pad來取得bin的sub element的pad作為bin的pad
  5.state,串連完成之後我們就可以通過修改bin的state來啟動資料流處理,通常的state有
 這幾種: NULL,ready,parse,playing. playing就是開始處理了哦. 注意,播放完成要把
 state改成NULL才能保證gstreamer釋放資源.
範常式序如下:
 #include <gst/gst.h>
 int main (int argc,char *argv[])
 {
  GstElement *pipeline,*filesrc,*decoder,*audiosink;
  gst_init(&argc,&argv);
  if (argc != 2) {
   g_print ("usage: %s <mp3 filename>/n",argv[0]);
   exit (-1);
  }

  /* 建立一條新的管道 */
  pipeline = gst_pipeline_new ("pipeline");

  /* 產生用於讀取硬碟資料的元件 */
  filesrc = gst_element_factory_make ("filesrc","disk_source");
  g_object_set (G_OBJECT (filesrc),"location",argv[1],NULL);

  /* 建立解碼器元件 */
  decoder = gst_element_factory_make ("mad","decoder");

  /* 建立音頻回放元件 */
  audiosink = gst_element_factory_make ("osssink","play_audio");

  /* 將產生的元件添加到管道中 */
  gst_bin_add_many
   (GST_BIN (pipeline),filesrc,decoder,audiosink,NULL);

  /* 串連各個元件 */
  // 由於這些element都只有一個入口一個出口,所以可以這樣做,不需要
  // 指定pad而直接連接起來
  gst_element_link_many (filesrc,decoder,audiosink,NULL);

  /* 開始播放 */
  gst_element_set_state (pipeline,GST_STATE_PLAYING);
  while (gst_bin_iterate (GST_BIN (pipeline)));

  /* 停止管道處理流程 */
  gst_element_set_state (pipeline,GST_STATE_NULL);

  /* 釋放佔用的資源 */
  gst_object_unref (GST_OBJECT (pipeline));
  exit (0);
 }
但是這個範常式序在我的linux下找不到mad這個factory,所以不能運行...

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.