本文介紹如何使用
gstreamer
編寫乙個簡單的
***
1,需要使用
mad解碼外掛程式,因此需要先安裝
gstreamer0.10-plugins-ugly 2
,編寫***
下面來看看如何利用
gstreamer
框架提供的元件,來實現乙個簡單的
***
如果想要在程式中應用
gstreamer
提供的各種功能,首先必須在主函式中呼叫
gst_init()
來完成相應的初始化工作,以便將使用者從命令列輸入的引數傳遞給
gstreamer
函式庫。乙個典型的
gstreamer
應用程式的初始化如下所示:
#include
<
gst/
gst.h
>
intmain (
intargc,
char
*argv)
接下去需要建立三個元件並連線成管道,由於所有
gstreamer
元件都具有相同的基類
gstelement
,因此能夠採用如下方式進行定義:
gstelement
*pipeline,
*filesrc,
*decoder,
*audiosink;
管道在gstreamer
框架中是用來容納和管理元件的,下面的**將建立一條名為
pipeline
的新管道:
/*建立用來容納元件的新管道
*/pipeline
=gst_pipeline_new (
"pipeline");
資料來源元件負責從磁碟檔案中讀取資料,它具有名為
location
的屬性,用來指明檔案在磁碟上的位置。使用標準的
gobject
屬性機制可以為元件設定相應的屬性: /*
建立資料來源元件
*/filesrc
=gst_element_factory_make (
"filesrc",
"disk_source");
g_object_set (g_object (filesrc),
"location
", argv[
1], null);
過濾器元件負責完成對
***格式的資料進行解碼,最簡單的辦法是安裝
mad這一外掛程式,借助它來完成相應的解碼工作:
/*建立過濾器元件
*/decoder
=gst_element_factory_make (
"mad",
"decoder
");
/*建立接收器元件
*/audiosink
=gst_element_factory_make (
"audiosink",
"play_audio")
已經建立好的三個元件需要全部新增到管道中,並按順序連線起來:
/*新增元件到管道中
*/gst_bin_add_many (gst_bin (pipeline), filesrc, decoder, audiosink, null);
/*通過襯墊連線元件
*/gst_element_link_many (filesrc, decoder, audiosink, null);
所有準備工作都做好之後,就可以通過將管道的狀態切換到
playing
狀態,來啟動整個管道的資料處理流程:
/*啟動管道
*/gst_element_set_state (pipeline, gst_state_playing);
這裡加入乙個訊息處理函式
bus_call
來監視產生的訊息
/*終止管道
*/gst_element_set_state (pipeline, gst_state_null);
/*釋放資源
*/gst_object_unref (gst_object (pipeline));
3,完整的源**如下所示:
#include
<
gst/
gst.h
>
#include
<
glib.h
>
//定義訊息處理函式,
static
gboolean bus_call(gstbus
*bus,gstmessage
*msg,gpointer data)
default
:break;}
return
true;
}int
main(
intargc,
char
*argv)
//建立管道和元件
pipeline
=gst_pipeline_new(
"audio-player");
source
=gst_element_factory_make(
"filesrc",
"file-source");
decoder
=gst_element_factory_make(
"mad",
"mad-decoder");
sink
=gst_element_factory_make(
"autoaudiosink",
"audio-output");
if(!pipeline
||!source
||!decoder
||!sink)
//設定 source的location 引數。即 檔案位址.
g_object_set(g_object(source),
"location
",argv[
1],null);
//得到 管道的訊息匯流排
bus
=gst_pipeline_get_bus(gst_pipeline(pipeline));
//新增訊息監視器
gst_bus_add_watch(bus,bus_call,loop);
gst_object_unref(bus);
//把元件新增到管道中.管道是乙個特殊的元件,可以更好的讓資料流動
gst_bin_add_many(gst_bin(pipeline),source,decoder,sink,null);
//依次連線元件
gst_element_link_many(source,decoder,sink,null);
//gst_element_set_state(pipeline,gst_state_playing);
g_print(
"running
//開始迴圈
g_main_loop_run(loop);
g_print(
"returned,stopping playback\n");
gst_element_set_state(pipeline,gst_state_null);
gst_object_unref(gst_object(pipeline));
return0;
} 4,編譯執行
gcc -wall
$(pkg-config --cflags --libs gstreamer-
0.10
)-g test2
.c -o test2
./test2
/home
/phinecos
/test
.***
GStreamer學習筆記(一)
本文介紹如何使用 gstreamer 編寫乙個簡單的 1,需要使用 mad解碼外掛程式,因此需要先安裝 gstreamer0.10 plugins ugly 2 編寫 下面來看看如何利用 gstreamer 框架提供的元件,來實現乙個簡單的 如果想要在程式中應用 gstreamer 提供的各種功能,...
GStreamer學習筆記(一)
1,需要使用mad解碼外掛程式,因此需要先安裝gstreamer0.10 plugins ugly 如果想要在程式中應用gstreamer提供的各種功能,首先必須在主函式中呼叫gst init 來完成相應的初始化工作,以便將使用者從命令列輸入的引數傳遞給gstreamer函式庫。乙個典型的gstre...
GStreamer學習筆記(一)
內容 1,需要使用mad解碼外掛程式,因此需要先安裝gstreamer0.10 plugins ugly 如果想要在程式中應用gstreamer提供的各種功能,首先必須在主函式中呼叫gst init 來完成相應的初始化工作,以便將使用者從命令列輸入的引數傳遞給gstreamer函式庫。乙個典型的gs...