freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

gstreamer應(yīng)用程序開(kāi)發(fā)手冊(cè)-在線瀏覽

2024-08-09 07:49本頁(yè)面
  

【正文】 . 核心庫(kù)與插件(core/plugins)分離GStreamer內(nèi)核的本質(zhì)是mediaagnostic,我們了解的僅僅是字節(jié)和塊,以及包含基本的元件,GStreamer內(nèi)核的強(qiáng)大功能甚至能夠?qū)崿F(xiàn)底層系統(tǒng)工具,像cp。.6第3章. 基礎(chǔ)概念介紹本章將介紹GStreamer的基本概念。. 元件(Elements)元件(element)是GStreamer中最重要的概念。每個(gè)元件(Elements)都有一個(gè)特殊的函數(shù)接口,對(duì)于有些元件(Elements)的函數(shù)接口它們是用于能夠讀取文件的數(shù)據(jù),解碼文件數(shù)據(jù)的。你可以將若干個(gè)元件(Elements)連接在一起,從而創(chuàng)建一個(gè)管道(pipeline)來(lái)完成一個(gè)特殊的任務(wù),例如,媒體播放或者錄音。當(dāng)然,如果你需要的話,你可以自己編寫(xiě)一個(gè)新的元件(Elements)。s Guide中有詳細(xì)的說(shuō)明。管道(pipelines)是箱柜(Bins)的一個(gè)特殊的子類(lèi)型,管道(pipelines)可以操作包含在它自身內(nèi)部的所有元件(element)。你可以改變一個(gè)箱柜(Bins)的狀態(tài)來(lái)改變箱柜(Bins)內(nèi)部所有元件(element)的狀態(tài)。管道(pipeline)是高級(jí)的箱柜(Bins)。一旦開(kāi)始,管道將在一個(gè) 單獨(dú)的線程中運(yùn)行,直到被停止或者數(shù)據(jù)流播放完畢。 一個(gè)襯墊(Pads)可以被看作是一個(gè)元件(element)插座或者端口,元件(element)之間的鏈接就是依靠著襯墊(Pads)。鏈接成功的條件是:只有在兩個(gè)襯墊(Pads)允許通過(guò)的數(shù)據(jù)類(lèi)型一致的時(shí)候才被建立。數(shù)據(jù)類(lèi)型被為一個(gè)GstCaps變量所描述。一個(gè)襯墊(Pads)很象一個(gè)物理設(shè)備上的插頭。一個(gè)家庭影院系統(tǒng)由一個(gè)功放(amplifier),一個(gè)DVD機(jī),還有一個(gè)無(wú)聲的視頻投影組成。我們還需要連接投影機(jī)到DVD機(jī)上,因?yàn)?兩個(gè)設(shè)備都有視頻處理插口。GStreamer襯墊(Pads)的作用跟家庭影院系統(tǒng)中的插口是一樣的。數(shù)據(jù)向元件(element)以外流出可以通過(guò)一個(gè)或者多個(gè)Source元件(element)和sink元件(element)分別有且僅有一個(gè) sink 襯墊(Pads)或者source 襯墊(Pads)。7在這一部分,我們將討論GStreamer中的一些基本概念以及一些常用的對(duì) 象,像元件、襯墊和緩存等。首先你會(huì)對(duì)GStreamer的API有個(gè)粗略的認(rèn)識(shí),用這些API來(lái)構(gòu)建一個(gè)基于元件的應(yīng)用程序已經(jīng)綽綽有余。注意:在這部分我們會(huì)了解一些底層(lowlevel)的API以及GStreamer的 一些概念。目錄4.GStreamer.使用GOption 接口來(lái)初始化5.什么是元件?.過(guò)濾器(Filters), 轉(zhuǎn)換器(convertors), 分流器(demuxers), 整流器(muxers)以及解碼器(codecs).創(chuàng)建一個(gè)使用元件作為GObject對(duì)象.使 用工廠元件來(lái)得到一個(gè)元件的信息.鏈接元件.箱柜(bin).創(chuàng)建一個(gè)箱柜.總線(bus).消息類(lèi)型8.襯墊.請(qǐng) 求襯墊.分 解功能.襯墊功能的用途.功能應(yīng)用于過(guò)濾器.緩沖取(Buffers)和事件(Events).事件10.第一 個(gè)Hello world程序.結(jié)論9第4章. 初始化GStreamer當(dāng)你準(zhǔn)備寫(xiě)一個(gè)GStreamer應(yīng)用程序時(shí),你僅需要通過(guò)包含頭文件gst/ 來(lái)訪問(wèn)庫(kù)函數(shù)。一個(gè)典型的初始化GStreamer庫(kù)的代碼如下所示:例41. 初始化GStreamerinclude gst/intmain (int argc, char *argv[]){ const gchar *nano_str。 gst_init (amp。argv)。major, amp。micro, amp。 if (nano == 1) nano_str = (CVS)。 else nano_str = 。 return 0。目前GStreamer使用了一種 保證主要版本和次要版本中API/以及ABI兼容的策略。 . 使用GOption接口來(lái)初始化你同樣可以使用GOption表來(lái)初始化你的參數(shù)。例42. 使用GOption接口來(lái)初始化include gst/intmain (int argc, char *argv[]){ gboolean silent = FALSE。 GOptionContext *ctx。 GOptionEntry entries[] = { { silent, 39。, 0, G_OPTION_ARG_NONE, amp。o39。savefile, save xml representation of pipeline to FILE and exit, FILE }, { NULL } }。 g_option_context_add_main_entries (ctx, entries, NULL)。 if (!g_option_context_parse (ctx, amp。argv, amp。 g_error_free (err)。 } printf (Run me with help to see the Application options appended.\n)。}如例子中的代碼所示,你可以通過(guò)表來(lái)定義你的命令行選項(xiàng)。通過(guò)使用GOption表來(lái)初始化GSreamer,你的程序還可以解析除標(biāo)準(zhǔn)GStreamer選項(xiàng)以外的命令行選項(xiàng)11第5章. 元件(Element)對(duì)程序員來(lái)說(shuō),GStreamer 中最重要的一個(gè)概念就是對(duì)象。所有上層(highlevel)部件都源自GstElement對(duì)象。. 什么是元件?對(duì)程序員來(lái)說(shuō),元件就像一個(gè)黑盒子。拿一個(gè)解碼元件來(lái)說(shuō),你輸入一 些有特定編碼的數(shù)據(jù),元件會(huì)輸出相應(yīng)的解碼數(shù)據(jù)。源元件(Source elements)為管道產(chǎn)生數(shù)據(jù),比如從磁盤(pán)或者聲卡讀取數(shù)據(jù)。圖 51我們總是將源襯墊(source pad)畫(huà)在元件的右端。你可從上圖中明白這一點(diǎn),因?yàn)樯蠄D僅有一個(gè)源襯墊(右端),同樣的, 源襯墊也僅產(chǎn)生數(shù)據(jù)(對(duì)外部而言)。他們對(duì)從輸入襯墊得到的數(shù)據(jù)進(jìn)行操作,然后將數(shù)據(jù)提供給輸出襯墊。類(lèi)過(guò)濾元件可以擁有任意個(gè)的源襯墊或者接收襯墊。相反地,解碼器只有一個(gè)源襯墊及一個(gè)接收襯墊。52.形象化了類(lèi)過(guò)濾元件。接收輸入數(shù)據(jù)的接收襯墊在元件的左端,源襯墊在右端。53.顯示了另一種了類(lèi)過(guò)濾元件。Ogg分流器是個(gè)很好的實(shí)例。一個(gè)源襯墊可能包含視頻元數(shù)據(jù)流,另一個(gè)則包含音頻元數(shù)據(jù)流。程序員可以在信號(hào)處理事件中處理新的元數(shù)據(jù)流。寫(xiě)磁盤(pán)、利用聲卡播放聲音以及視頻輸出等都是由接收元件實(shí)現(xiàn)的。顯示了接收元件。54. 這個(gè)函數(shù)使用一個(gè)已存在的工廠對(duì)象名和一個(gè)新的元件名來(lái)創(chuàng)建元件。這個(gè)名字同樣可以用來(lái)調(diào)試程序的輸 出。當(dāng)你不再需要一個(gè)元件時(shí),你需要使用 這會(huì)將一個(gè)元件的引用數(shù)減少1。當(dāng)其引用記數(shù)為0時(shí),該元件會(huì)被銷(xiāo)毀。顯示了如果通過(guò)一個(gè)fakesrc工廠對(duì)象來(lái)創(chuàng)建一個(gè)名叫source的元件。檢查完畢后,程序會(huì)銷(xiāo)毀元件。 /* init GStreamer */ gst_init (amp。argv)。 if (!element) { g_print (Failed to create element of type 39。\n)。 } gst_object_unref (GST_OBJECT (element))。}gst_element_factory_make一個(gè)GstElement為了創(chuàng)建一個(gè)元件,你需要使用一個(gè)唯一的工廠對(duì)象名字來(lái)訪問(wèn)一個(gè)GstElementFactory對(duì)象。下面的代碼段創(chuàng)建了一個(gè)工廠對(duì)象,這個(gè)工廠對(duì)象被用來(lái)創(chuàng)建一個(gè)fakesrc元件 —— 偽裝的數(shù)據(jù)源。gst_element_factory_create()include gst/intmain (int argc, char *argv[]){ GstElementFactory *factory。 /* init GStreamer */ gst_init (amp。argv)。 if (!factory) { g_print (Failed to find factory of type 39。\n)。 } element = gst_element_factory_create (factory, source)。 return 1。 return 0。.使用 GObject 的方法可以對(duì)GstElement實(shí)行查詢(xún)、設(shè)置、獲取屬性的值。每個(gè) GstElement 都從其基類(lèi) GstObject 繼承了至少一個(gè)“名字”屬性。你可通過(guò)函數(shù) gst_object_set_name 設(shè)置該屬性,通過(guò) gst_object_get_name 得到一個(gè)對(duì)象的名字屬性。 gchar *name。argc, amp。 /* create element */ element = gst_element_factory_make (fakesrc, source)。name, NULL)。%s39。 g_free (name)。 return 0。gstinspect 是一個(gè)用來(lái)查詢(xún)特定元件特性(properties)的實(shí)用工具。關(guān)于 gstinspect 更詳細(xì)的信息請(qǐng)參考附錄。GObject手冊(cè)你同樣可以使用 gstinspect來(lái)檢查一個(gè)特定元件所支持的信號(hào)。. 深入了解元件工廠在前面的部分,我們簡(jiǎn)要介紹過(guò)可以用來(lái)創(chuàng)建一個(gè)元件的實(shí)例,但是工廠元件不僅僅只能做這件事,工廠元件作為在 GStreamer 注冊(cè)系統(tǒng)中的一個(gè)基本類(lèi)型,它可以描述所有的插件(plugins)以及由GStreamer創(chuàng)建的元件。 或者創(chuàng)建一個(gè)可用元件列表,像管道對(duì)應(yīng)用程序的類(lèi)似操作(像GStreamer類(lèi)別可以用來(lái)得到一個(gè)元件的類(lèi) 型,這個(gè)類(lèi)型是在使用工廠元件創(chuàng)建該元件時(shí)做創(chuàng)建的。音頻也有類(lèi)似的類(lèi)別。Gstinspect將會(huì)列出當(dāng)前所有的工廠對(duì)象,gstinspect factoryname 將會(huì)列出特定工廠對(duì)象的所有概要信息。include gst/intmain (int argc, char *argv[]){ GstElementFactory *factory。argc, amp。 /* get factory */ factory = gst_element_factory_find (audiotestsrc)。t have the 39。 element installed!\n)。 } /* display information */ g_print (The 39。 element is a member of the category %s.\n Description: %s\n, gst_plugin_feature_get_name (GST_PLUGIN_FEATURE (factory)), gst_element_factory_get_klass (factory), gst_element_factory_get_description (factory))。} 你可以通過(guò)gst_registry_pool_feature_list (GST_TYPE_ELEMENT_FACTORY)得到所有在GStreamer中注冊(cè)過(guò)的工廠元件。這可用來(lái)給一個(gè)編碼器提供一個(gè)編碼列表,或在多媒體播放器自動(dòng)加載插件時(shí)發(fā)揮作用。當(dāng)我們?cè)谙乱徽拢阂r墊與功能(. 鏈接元件通過(guò)將一個(gè)源元件,零個(gè)或多個(gè)類(lèi)過(guò)濾元件,和一個(gè)接收元件鏈接在一起,你可以建立起一條媒體管道。這是 GStreamer 中處理媒體的基本概念。通過(guò)鏈接這三個(gè)元件,我們創(chuàng)建了一條簡(jiǎn)單的元件鏈。類(lèi)過(guò)濾元件將會(huì)對(duì)數(shù)據(jù)進(jìn)行某些操作,然后將數(shù)據(jù)輸出給最終的接收元件(element3)。源元件從磁盤(pán)讀取文件。最終的接收元件是你的聲卡,它用來(lái)播放經(jīng)過(guò)解碼的音頻數(shù)據(jù)。上述的過(guò)程用代碼表示為: GstElement *source, *filter, *sink。argc, amp。 /* create pipeline */ pipeline = gst_pipeline_new (mypipeline)。 filter = gst_element_factory_make (identity, filter)。 /* must add elements to pipeline before linking them */ gst_bin_add_many (GST_BIN (pipeline), source, filter, sink, NULL)。 }[..]} 對(duì)于一些特定的鏈接行為,可以通過(guò)函數(shù)gst_element_link () 以及 gst_element_link_pads()來(lái)實(shí)現(xiàn)。更詳細(xì)的信息請(qǐng)參考API手冊(cè)。同時(shí),你不能直接鏈接不在同一箱柜或管道中的元件。. 元件狀態(tài)一個(gè)元件在被創(chuàng)建后,它不會(huì)執(zhí)行任何操作。 Gstreamer中,元件有四種狀態(tài),每種狀態(tài)都有其特定的意義。該狀態(tài)將會(huì)回收所有被該元件占用的資源。元件會(huì)得到所有所需的全局資源,這些全局資源將被
點(diǎn)擊復(fù)制文檔內(nèi)容
數(shù)學(xué)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1