GStreamer基本使用

GStreamer是處理多媒體流的框架。媒體流經過一系列的中間element,從source element流到sink element,這些相互作用

的element組成了pipeline.

(1)gst_init(NULL, NULL);//所有Gstreamer應用的第一句

        初始化所有內部數據結構

        檢查所有可用的插件

(2)gst_parse_launch();//描述一個pipeline,也可以建立一個pipeline

        如:pipeline = gst_parse_launch("playbin uri=file:///share/ccnn.mp4", NULL);//創建一個播放本地視頻的pipeline

  playbin:

        playbin元件是整合元件,內部建立工廠管道,用到很多元件。

(3)gst_element_set_state();//設置element的狀態,如果element是pipeline,就可通過設置狀態來控制播放、暫停和關閉

如:gst_element_set_state(pipeline, GST_STATE_PLAYING);//開始播放

所有狀態值:

GST_STATE_NULL:默認狀態,此狀態將會回收所有被該element佔用的資源

GST_STATE_READY:準備狀態,元件會得到所有所需的全局資源,這些全局資源將被通過該元件的數據流所使用。如打開設備,分配緩存等。此狀態下數據流沒有開始被處理,數據流的位置信息自動置0,。如果數據流被打開過,會關閉該數據流,並且重置位置信息,特性信息爲初始狀態。

GST_STATE_PAUSED:暫停狀態,此狀態元件可以修改流的位置信息,讀取或者處理流數據,只有時鐘是禁止運行的

GST_STATE_PLAYING:運行狀態,管道會自動處理數據,不需要任何形式的迭代。GStreamer會開啓一個新的線程來處理數據。GStreamer同樣可以使用GstBus在管道線程和應用程序線程間進行交互

(4)GstBus *bus = gst_element_get_bus(pipeline);

GstMessage *msg = gst_bus_time_pop_filtered(bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS);

上面兩行代碼是等待發生錯誤或者播放結束。gst_element_get_bus();會得到pipeline的總線,然後gst_bus_timed_pop_filtered();會阻塞直到你遇到一個錯誤或者流播放結束。

(5)清理。

gst_object_unref(bus);//釋放GstBus類型指針

gst_message_unref(msg);//釋放GstMessage類型指針

gst_element_set_state(pipeline, GST_STATE_NULL);//回收pipeline佔用的所有資源

gst_object_unref(pipeline);//釋放GstElement指針


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章