Gstreamer應用開發手冊9 動態控制引數

2021-10-05 14:35:00 字數 1956 閱讀 2831

gstreamer屬性通常是使用g_object_set()設定的,但是想實時地呼叫來更改流幾乎是不可能的。控制器子系統提供了一種輕量級的方法來在流執行時調整gobject屬性。

控制器要考慮到時間影響,它通過gstcontrolsource控制項來修改屬性。控制源提供0.0到1.0的範圍的時間戳的值。控制項繫結將控制項值對映到gobject它們繫結到的屬性,將型別轉換並縮放到目標屬性的值範圍。在執行時,元件在當前流時間連續提取值的更改來更新gobject屬性。gstreamer已經包含一些不同的gstcontrolsources和控制項繫結,但是應用程式可以通過對各個基類進行子類化來定義它們自己的。

控制器機制的大部分都在gstobject中實現。gstcontrolsources的基類和控制項也包含在核心庫中,但是現有的實現包含在gstcontroller庫中,因此您需要根據需要在應用程式的原始檔中包含這些標頭檔案。

#include #include #include ...
pkg-config --libs --cflags gstreamer-controller-1.0
如果我們已建立管道並希望控制某些引數,則首先需要建立乙個gstcontrolsource。

csource = gst_interpolation_control_source_new ();

g_object_set (csource, "mode", gst_interpolation_mode_linear, null);

現在,我們需要將gstcontrolsource附加到gobject屬性。這是通過控制項繫結完成的,可以使用單獨的控制項繫結將乙個控制源附加到多個物件屬性(甚至在不同的物件中)。

gst_object_add_control_binding (object, gst_direct_control_binding_new (object, "prop1", csource));
gstcontrolsource從帶有時間戳的引數更改列表中獲取新的屬性值。例如,源可以通過平滑引數更改來填補空白。可以通過設定gstcontrolsource的屬性來配置此行為。其他控制源例如通過呼叫sin()函式產生流,它們可以控制引數例如頻率。由於gstcontrolsources也是gstobjects,因此也可以將gstcontrolsources 附加到這些屬性。

現在我們可以設定一些控制點。這些是帶時間戳的gdouble值,通常在0.0到1.0的範圍內,1.0對映到目標屬性值範圍內的最大值。達到時間戳後,這些值將變為活動狀態。他們仍然留在列表中。例如,如果管道執行乙個迴圈(使用分段搜尋),則控制曲線也會重複。

gsttimedvaluecontrolsource *tv_csource = (gsttimedvaluecontrolsource *)csource;

gst_timed_value_control_source_set (tv_csource, 0 * gst_second, 0.0);

gst_timed_value_control_source_set (tv_csource, 1 * gst_second, 1.0);

現在一切準備就緒,如果將gstcontrolsource繫結到volume屬性,我們將聽到1秒鐘的淡入。乙個警告:gstreamer的聲音元件具有的volume屬性範圍是0.0到10.0。如果將以上gstcontrolsource內容附加到此屬性,則音量將增加到400%!

最後一點:控制器子系統具有內建的實時模式。即使已分配gstcontrolsource屬性,也可以通過g_object_set()設定 gobject屬性。將gobject屬性繫結到gui小部件時,這非常有用。當使用者使用視窗小部件調整值時,可以設定該gobject屬性,並且該屬性將保持啟用狀態,直到下乙個gstcontrolsource值將其覆蓋。這也適用於平滑的引數,但不適用於不斷更新屬性的gstcontrolsource,例如gstlfocontrolsource。

Gstreamer應用開發手冊8 緩衝

gstreamer為以下用例提供支援 將 半 實時流快取到磁碟上的本地環形緩衝區,並在快取區域中進行查詢。這類似於類似tivo的時移。請參閱時移緩衝。gstreamer可以為應用程式提供有關當前緩衝狀態的進度報告,還可以讓應用程式決定如何緩衝以及何時停止緩衝。在最簡單的情況下,應用程式必須偵聽匯流排...

深入淺出gstreamer開發

gstreamer 解決什麼問題?上層介面和應用方式的 相對穩定 與底層介面 平台環境的 多樣化。例如 codec 通用元件不靈活與需求的多變。色彩空間轉換 縮放 編譯碼等元件功能是單一的。通過對這些元件進行組合,就可以滿足多變的需求。要想擁有模組性 可移植性和通用的功能,通常是以極高的複雜性為代價...

深入淺出gstreamer開發

gstreamer 解決什麼問題?上層介面和應用方式的 相對穩定與底層介面 平台環境的 通用元件不靈活與需求的多變。色彩空間轉換 縮放 編譯碼等元件功能是單一的。通過對這些元件進行組合,就可以滿足多變的需求。要想擁有模組性 可移植性和通用的功能,通常是以極高的複雜性為代價。計算機系統的萬能解決辦法 ...