目錄
1.GstObject類繼承關係
GObject
╰──GInitiallyUnowned
╰──GstObject
╰──GstAllocator
╰──GstBufferPool
╰──GstBus
╰──GstClock
╰──GstControlBinding
╰──GstControlSource
╰──GstDevice
╰──GstDeviceMonitor
╰──GstDeviceProvider
╰──GstElement
╰──GstPad
╰──GstPadTemplate
╰──GstPlugin
╰──GstPluginFeature
╰──GstRegistry
╰──GstStream
╰──GstStreamCollection
╰──GstTask
╰──GstTaskPool
╰──GstTracer
╰──GstTracerRecord
2. GstElement
GstElement 是GStreamer管道(pipeline)中構建組件的抽象基類。GstElement子類的更多信息,請參考插件編寫者指南。
- gst_element_get_name :獲取組件名稱;
- gst_element_set_name :設置組件名稱。爲了提高速度,使用適當的鎖定時,可以在內核中使用 GST_ELEMENT_NAME。請勿在插件或應用程序中使用此功能,以保持ABI兼容性。
組件可以有Pad (類型爲 GstPad). 這些pads與其他組件的pads相連接。在pads中流動數據的是 GstBuffer 。每個GstElement 的輸入(或 槽sink)和輸出(或源source)的 pads都有一個GstPad類型的GList 。
- gst_element_add_pad :添加pad;
- gst_element_remove_pad: 移除pad;
- gst_element_get_static_pad:配合名稱,用來檢索一個已經存在的組件pad;
- gst_element_request_pad:創建一個新的動態pad(帶有GstPadTemplate );
- gst_element_iterate_pads :檢索所有pad的迭代器;
- gst_element_link :連接兩個組件;
- gst_element_link_many :連接一行的多個組件。連接組件前需要確保使用gst_bin_add將組件添加到bin或管道中
- gst_element_link_filtered:對於一組由GstCaps 限制的組件的連接;
- gst_element_link_pads 和gst_element_link_pads_filtered :指定要按名稱鏈接到每個元素上的pad。
每個組件都有一個state (參見GstState).
- gst_element_get_state :獲取組件狀態;
- gst_element_set_state.:設置組件狀態;設置狀態會觸發 GstStateChange.;
- gst_element_state_get_name:獲取GstState字符串表示
如果設置了 GST_ELEMENT_FLAG_PROVIDE_CLOCK 標誌,一些組件可以爲管道提供時鐘。不是所有的組件都需要時鐘。注意,時鐘的選擇和分配通常由頂級GstPipeline處理,因此時鐘功能僅在非常特殊的情況下使用。
- gst_element_get_clock :獲取組件時鐘;
- gst_element_set_clock:設置組件時鐘;
- gst_element_provide_clock:檢索組件時鐘.
GstElement
GObject
╰──GInitiallyUnowned
╰──GstObject
╰──GstElement
╰──GstBin
3.GstBin
GstBin是包含了GstElement的一個容器,可以處理一組組件。子組件的pad可以重影到bin,請參見GstGhostPad。這使bin看起來像其他任何組件,並允許創建更高級別的抽象組件。
gst_bin_new:創建新的GstBin;
GstPipeline:創建頂層bin。普通的bin不包含總線bus或handle clock distribution
gst_bin_add:添加組件;
gst_bin_remove:移除組件;
gst_bin_get_by_name:在bin中通過名稱查詢某個組件;
gst_bin_get_by_name_recurse_up :主要用於內部目的,當在當前容器中找不到該組件時,它將查詢父容器。
gst_bin_iterate_elements:在bin中查詢組件迭代器;
gst_object_unref:刪除bin中資源;
每當將新組件添加到容器bin中時,都會觸發添加 element-added信號。同樣,只要將組件從bin中移出,就會發出元素移出信號element-removed。
GstBin類繼承關係
GObject
╰──GInitiallyUnowned
╰──GstObject
╰──GstElement
╰──GstBin
╰──GstPipeline
4. GstPad
GstElement通過"pads"連接, 這是輕量的通用連接點。
Pads有GstPadDirection, source pads生產數據,sink pads消費data。
- GstPadTemplate + gst_pad_new_from_template :創建pad,通常之後會加入到GstElement. 這通常發生在組件創建時,但是也可以發生在組件處理數據或應用程序請求pads時。
- gst_pad_new:創建沒有pad模板的pads, 方向和名稱都作爲參數。如果名字時NULL,會確保一個唯一命名。
一個 GstElement 創建一個pad,通常會使用不同的 gst_pad_set_*_function() 函數回調去註冊pads上的回調事件、請求、數據流。
- gst_pad_get_parent :查詢GstElement擁有的pad.
- gst_element_get_static_pad:查詢一個組件上的兩個pad,之後會採取連接pad操作。
- gst_pad_link:連接pads. (快速連接可以使用gst_element_link).
- gst_pad_unlink:取消連接.
- gst_pad_get_peer:檢查pad是否連接
在pads上的數據流準備好之前,需要激活pad。
- gst_pad_set_active:激活pad.
- gst_pad_query + gst_pad_peer_query :查詢Pad和流上的不同配置。
- gst_pad_send_event + gst_pad_push_event:向一個pad發送一個GstEvent事件;某些事件會粘在pad上,即事件經過pad後,可以稍後使用gst_pad_get_sticky_event +gst_pad_sticky_events_foreach進行查詢。 gst_pad_get_current_caps 和 gst_pad_has_current_caps是方便的功能,用於查詢墊上的當前粘性CAPS事件。
- gst_pad_push 和 gst_pad_pull_range :向buffer中推或拉
可以使用可以與gst_pad_add_probe一起安裝的探針來監視在Pad上發生的數據流,事件和查詢。
- gst_pad_is_blocked:可用於檢查是否在焊盤上安裝了阻塞探針。
- gst_pad_is_blocking:檢查阻塞探針當前是否阻塞了填充板。
- gst_pad_remove_probe:用於刪除以前安裝的探針,並取消阻止阻塞探針(如果有)。
pad有偏移量,該偏移量將應用於通過pad傳遞的所有數據的運行時間。
- gst_pad_get_offset:查詢pad偏移.
- gst_pad_set_offset:更改pad偏移量
- gst_pad_start_task:啓動,任務
- gst_pad_pause_task:暫停任務;
- gst_pad_stop_task:停止任務
GstPad類繼承關係
GObject
╰──GInitiallyUnowned
╰──GstObject
╰──GstPad
╰──GstProxyPad
5. GstElementFactory
GstElementFactory用來創建組件實例。一個GstElementFactory可以插入到 GstPlugin,因爲它也是一個GstPluginFeature。
- gst_element_factory_find + gst_element_factory_create :創建組件實例;
- gst_element_factory_make:快捷創建組件實例
創建GstFileSrc組件
#include <gst/gst.h>
GstElement *src; //定義一個組件
GstElementFactory *srcfactory; //定義一個組件實例
gst_init (&argc, &argv);
srcfactory = gst_element_factory_find ("filesrc");
g_return_if_fail (srcfactory != NULL);
src = gst_element_factory_create (srcfactory, "src");
g_return_if_fail (src != NULL);
...
// 或者用下面方法等效
gst_element_factory_make("srcfactory","src");
GstElementFactory
GObject
╰──GInitiallyUnowned
╰──GstObject
╰──GstPluginFeature
╰──GstElementFactory
gst_element_facotry_make
GstElement *
gst_element_factory_make (const gchar * factoryname,
const gchar * name)
創建由給定組件實例定義的類型的新組件。如果name爲NULL,則組件將獲得保證的唯一名稱,該名稱由組件實例名稱和數字組成。如果提供名稱,則將提供提供的名稱。