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

正文內(nèi)容

gstreamer開(kāi)發(fā)手冊(cè)-資料下載頁(yè)

2025-07-27 21:58本頁(yè)面
  

【正文】 signal_watch (bus)。g_signal_connect (bus, message::error, G_CALLBACK (cb_message_error), NULL)。g_signal_connect (bus, message::eos, G_CALLBACK (cb_message_eos), NULL)。[..] 如果你沒(méi)有使用GLib主循環(huán),默認(rèn)的消息信號(hào)將會(huì)無(wú)效,然而,你可以導(dǎo)出一個(gè)小助手給集成提供你使用的主循環(huán),啟動(dòng)產(chǎn)生總線(xiàn)信號(hào)。 (詳細(xì)見(jiàn)documentation) . 消息類(lèi)型(Message types)GStreamer有幾種由總線(xiàn)傳遞的預(yù)定義消息類(lèi)型,這些消息都是可擴(kuò)展的。插件可以定義另外的一些消息,應(yīng)用程序可以有這些消息的絕對(duì)代碼或者忽略它們。強(qiáng)烈推薦應(yīng)用程序至少要處理錯(cuò)誤消息并直接的反饋給用戶(hù)。所有的消息都有一個(gè)消息源、類(lèi)型和時(shí)間戳。這個(gè)消息源能被用來(lái)判斷由哪個(gè)元件發(fā)出消息。例如,在眾多的消息中,應(yīng)用程序只對(duì)上層的管道發(fā)出的消息感興趣(如狀態(tài)變換的提示)。下面列出所有的消息種類(lèi)、代表的意義,以及如何解析具體消息的內(nèi)容。n 錯(cuò)誤、警告和消息提示:它們被各個(gè)元件用來(lái)在必要的時(shí)候告知用戶(hù)現(xiàn)在管道的狀態(tài)。錯(cuò)誤信息表明有致命的錯(cuò)誤并且終止數(shù)據(jù)傳送。錯(cuò)誤應(yīng)該被修復(fù),這樣才能繼續(xù)管道的工作。警告并不是致命的,但是暗示有問(wèn)題存在。消息提示用來(lái)告知非錯(cuò)誤的信息。這些消息含有一個(gè)帶有主要的錯(cuò)誤類(lèi)型和消息的GError,和一個(gè)任選的調(diào)試字符串。這兩項(xiàng)都可以用gst_message_parse_error (), _parse_warning () 以及 _parse_info ()三個(gè)函數(shù)來(lái)提取其信息。當(dāng)使用完畢后,錯(cuò)誤和修正字符串都將被釋放。n 數(shù)據(jù)流結(jié)束(Endofstream)提示:當(dāng)數(shù)據(jù)流結(jié)束的時(shí)候,該消息被發(fā)送。管道的狀態(tài)不會(huì)改變,但是之后的媒體操作將會(huì)停止。應(yīng)用程序可以通過(guò)收到這一消息來(lái)跳到播放列表的下一首歌。在數(shù)據(jù)流結(jié)束提示出現(xiàn)之后,仍然可以通過(guò)向后搜索來(lái)回到以前數(shù)據(jù)流前面的位置。之后的播放工作將會(huì)自動(dòng)的繼續(xù)執(zhí)行。這個(gè)消息沒(méi)有特殊的參數(shù)。n 標(biāo)簽(Tags):當(dāng)元數(shù)據(jù)在數(shù)據(jù)流中被找到的時(shí)候,此消息被發(fā)送。一個(gè)管道可以發(fā)出多個(gè)Tag(如元數(shù)據(jù)的描述里有藝術(shù)家、歌曲名,另外的例子如流的信息采樣率和比特率)。應(yīng)用程序應(yīng)該將元數(shù)據(jù)存儲(chǔ)在緩存里。函數(shù)gst_message_parse_tag () 被用來(lái)解析tag的列表,當(dāng)該列表不再使用的時(shí)候,函數(shù)gst_tag_list_free () 釋放其相應(yīng)的tag。n 狀態(tài)轉(zhuǎn)換(Statechanges):當(dāng)狀態(tài)成功的轉(zhuǎn)換時(shí)發(fā)送該消息。函數(shù)gst_message_parse_state_changed ()可以用來(lái)解析轉(zhuǎn)換中的新舊狀態(tài)。n 緩沖(Buffering):當(dāng)緩沖網(wǎng)絡(luò)數(shù)據(jù)流時(shí)此消息被發(fā)送。你可以通過(guò)函數(shù)gst_message_get_structure ()的返回值,來(lái)解析bufferpercent 屬性,從而手動(dòng)的得到緩沖進(jìn)度(該緩沖進(jìn)度以百分比的形式表示)。n 元件消息(Element messages):它是一組特殊的消息,用以標(biāo)識(shí)一個(gè)特定元件。這樣一組特殊的消息通常表述了一些額外的信息。元件的信息應(yīng)該被詳細(xì)的描述,因?yàn)檫@樣一些元件信息將被作為消息而發(fā)送給其他元件。例如:39。qtdemux39。 QuickTime 整流器(demuxer)應(yīng)該把39。redirect39。信息保存于該元件信息當(dāng)中,以便在某種特殊情況下將39。redirect39。元件信息發(fā)送出去。n Applicationspecific消息:我們可以將取得的消息結(jié)構(gòu)解析出來(lái),從而得到有關(guān)Applicationspecific消息的任何信息。通常這些信息是能夠被安全地忽略。應(yīng)用程序消息主要用于內(nèi)部,以備從一些線(xiàn)程排列信息到主線(xiàn)程應(yīng)用的需求。這些在使用元件信號(hào)的應(yīng)用中非常實(shí)用(這些信號(hào)在數(shù)據(jù)流線(xiàn)程的上下文被發(fā)射)。第8章. 襯墊(Pads)及其功能如我們?cè)贓lements一章中看到的那樣,襯墊(Pads)是元件對(duì) 外的接口。數(shù)據(jù)流從一個(gè)元件的源襯墊(source pad)到另一個(gè)元件的接收襯墊(sink pad)。襯墊的功能(capabilities)決定了一個(gè)元件所能處理的媒體類(lèi)型。在這章的后續(xù)講解中,我們將對(duì)襯墊的功能做更詳細(xì)的說(shuō)明。 ().. 襯墊(Pads)一個(gè)襯墊的類(lèi)型由2個(gè)特性決定:它的數(shù)據(jù)導(dǎo)向(direction)以及它的時(shí)效性(availability)。正如我們先前提到 的,Gstreamer定義了2種襯墊的數(shù)據(jù)導(dǎo)向:源襯墊以及接收襯墊。襯墊的數(shù)據(jù)導(dǎo)向這個(gè)術(shù)語(yǔ)是從元件內(nèi)部的角度給予定義的: 元件通過(guò)它們的接收襯墊接收數(shù)據(jù),通過(guò)它們的源襯墊輸出數(shù)據(jù)。如果通過(guò)一張圖來(lái)形象地表述,接收襯墊畫(huà)在元件的左側(cè),而源襯墊畫(huà)在元件的右側(cè),數(shù)據(jù)從左向右流動(dòng)。[1]襯墊的時(shí)效性比襯墊的數(shù)據(jù)導(dǎo)向復(fù)雜得多。一個(gè)襯墊可以擁有三種類(lèi)型的時(shí)效性: 永久型(always)、隨機(jī)型(sometimes)、請(qǐng)求型(on request)。三種時(shí)效性的意義顧名思義: 永久型的襯墊一直會(huì)存在,隨機(jī)型的襯墊只在某種特定的條件下才存在(會(huì)隨機(jī)消失的襯墊也屬于隨機(jī)型),請(qǐng)求型的襯墊只在應(yīng)用程序明確發(fā)出請(qǐng)求時(shí)才出現(xiàn)。. 動(dòng)態(tài)(隨機(jī))襯墊一些元件在其被創(chuàng)建時(shí)不會(huì)立刻產(chǎn)生所有它將用到的襯墊。例如在一個(gè)Ogg demuxer的元件中可能發(fā)生這種情況。這個(gè)元件將會(huì)讀取Ogg流,每當(dāng)它在Ogg流中檢測(cè)到一些元數(shù)據(jù)流時(shí)(例如vorbis,theora ),它會(huì)為每個(gè)元數(shù)據(jù)流創(chuàng)建動(dòng)態(tài)襯墊。同樣,它也會(huì)在流終止時(shí)刪除該襯墊。動(dòng)態(tài)襯墊在demuxer這種元件中可以起到很大的作用。運(yùn)行g(shù)stinspect oggdemux只會(huì)顯示出一個(gè)襯墊在元件中: 一個(gè)名字叫作39。sink39。的接收襯墊,其它的襯墊都處于39。休眠39。中,你可以從襯墊模板(pad template)中的Exists: Sometimes的屬性看到這些信息。襯墊會(huì)根據(jù)你所播放的Ogg文件的類(lèi)型而產(chǎn)生,認(rèn)識(shí)到這點(diǎn) 對(duì)于你創(chuàng)建一個(gè)動(dòng)態(tài)管道特別重要。當(dāng)元件通過(guò)它的隨機(jī)型(sometimes)襯墊模板創(chuàng)建了一個(gè)隨機(jī)型(sometimes)的襯墊的時(shí)侯,你可以通過(guò)對(duì)該元件綁定一個(gè)信號(hào)處理器(signal handler),通過(guò)它來(lái)得知襯墊被創(chuàng)建。下面一段代碼演示了如何這樣做:名叫39。sink39。的接收襯墊,其它的襯墊都處于39。休眠39。中,顯而易見(jiàn)這是襯墊”有時(shí)存在”的特性。襯墊會(huì)根據(jù)你所播放的Ogg文件的類(lèi)型而產(chǎn)生,這點(diǎn)在你 準(zhǔn)備創(chuàng)建一個(gè)動(dòng)態(tài)管道時(shí)顯得特別重要,當(dāng)元件創(chuàng)建了一個(gè)”有時(shí)存在”的襯墊時(shí),你可以通過(guò)對(duì)該元件觸發(fā)一個(gè)信號(hào)處理器(signal handler) 來(lái)得知襯墊被創(chuàng)建。下面一段代碼演示了如何這樣做:include gst/static voidcb_new_pad (GstElement *element, GstPad *pad, gpointer data){ gchar *name。 name = gst_pad_get_name (pad)。 g_print (A new pad %s was created\n, name)。 g_free (name)。 /* here, you would setup a new pad link for the newly created pad */[..]}int main (int argc, char *argv[]) { GstElement *pipeline, *source, *demux。 GMainLoop *loop。 /* init */ gst_init (amp。argc, amp。argv)。 /* create elements */ pipeline = gst_pipeline_new (my_pipeline)。 source = gst_element_factory_make (filesrc, source)。 g_object_set (source, location, argv[1], NULL)。 demux = gst_element_factory_make (oggdemux, demuxer)。 /* you would normally check that the elements were created properly */ /* put together a pipeline */ gst_bin_add_many (GST_BIN (pipeline), source, demux, NULL)。 gst_element_link_pads (source, src, demux, sink)。 /* listen for newly created pads */ g_signal_connect (demux, padadded, G_CALLBACK (cb_new_pad), NULL)。 /* start the pipeline */ gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING)。 loop = g_main_loop_new (NULL, FALSE)。 g_main_loop_run (loop)。[..]} . 請(qǐng)求襯墊元件同樣可以擁有請(qǐng)求襯墊(request pads)。這種襯墊不是自動(dòng)被創(chuàng)建,而是根據(jù)請(qǐng)求被創(chuàng)建的。這在多路復(fù)用(multiplexers)類(lèi)型的元件中有很大的用處。例如 aggregators以及tee元件。Aggregators 元件可以把多個(gè)輸入流合并成一個(gè)輸出流。 tee元件正好相反,它只有一個(gè)輸入流,然后根據(jù)請(qǐng)求把數(shù)據(jù)流發(fā)送到不同的輸出襯墊。只要應(yīng)用程序需要另一份數(shù)據(jù)流,它可以簡(jiǎn)單的從tee元件請(qǐng)求到一個(gè) 輸出襯墊。下面一段代碼演示了怎樣在一個(gè)”tee”元件請(qǐng)求一個(gè)新的輸出襯墊:static voidsome_function (GstElement *tee){ GstPad * pad。 gchar *name。 pad = gst_element_get_request_pad (tee, src%d)。 name = gst_pad_get_name (pad)。 g_print (A new pad %s was created\n, name)。 g_free (name)。 /* here, you would link the pad */[..] /* and, after doing that, free our reference */ gst_object_unref (GST_OBJECT (pad))。} gst_element_get_request_pad()方法可以從一個(gè)元件中得到一個(gè)襯墊,這個(gè)襯墊基于襯墊模板的名字(pad template)。同樣可以請(qǐng)求一個(gè)同其它襯墊模板兼容的襯墊,這點(diǎn)在某些情況下非常重要。比如當(dāng)你想要將一個(gè)元件連接到一個(gè)多路復(fù)用型的元件時(shí),你就需要請(qǐng)求一個(gè)帶兼容性的襯墊。gst_element_get_patible_pad()方法可以得到一個(gè)帶兼容性的襯墊。下面一段代碼將從一個(gè)基于Ogg的帶多輸入襯墊的元件中請(qǐng)求一個(gè)帶兼容性的襯墊。static voidlink_to_multiplexer (GstPad *tolink_pad, GstElement *mux){ GstPad *pad。 gchar *srame, *sinkname。 srame = gst_pad_get_name (tolink_pad)。 pad = gst_element_get_patible_pad (mux, tolink_pad)。 gst_pad_link (tolinkpad, pad)。 sinkname = gst_pad_get_name (pad)。 gst_object_unref (GST_OBJECT (pad))。 g_print (A new pad %s was created and linked to %s\n, srame, sinkname)。 g_free (sinkname)。 g_free (srame)。} 注[1]事實(shí)上,數(shù)據(jù)流可以逆流(upstream)地在一個(gè)元件中從源襯墊到接收襯墊。但數(shù)據(jù)總是從一個(gè)元件的源襯墊到另一個(gè)元件的接收襯 墊。(Pads)的性能由于襯墊對(duì)于一個(gè)元件起了非常重要的作用,因此就有了一個(gè)術(shù)語(yǔ)來(lái)描述能夠通過(guò)襯墊或當(dāng)前通過(guò)襯墊的數(shù)據(jù)流。這個(gè)術(shù)語(yǔ)就是功能 (capabilities)。在這里,我們將簡(jiǎn)要介紹什么是襯墊的功能以及怎么使用它們。這些足以使我們對(duì)這個(gè)概念有個(gè)大 致的了解。如果想要對(duì)襯墊的功能有更深入的了解,并知道在GStreamer 中定義的所有的襯墊的功能,請(qǐng)參考插件開(kāi)發(fā)手冊(cè)Plugin Writers Guide。襯墊的功能(capabilities)是與襯墊模板(pad templates)以及襯墊實(shí)例相關(guān)聯(lián)的。對(duì)于襯墊模板,襯墊的功能(capabilities)描述的是:當(dāng)通過(guò)該襯墊模板創(chuàng)建了一個(gè)襯墊后,該襯墊允許通過(guò)的媒體類(lèi)型。對(duì)于襯墊實(shí)例,功能可以描述所有可能通過(guò)該襯墊的媒體類(lèi)型(通常是該襯墊實(shí)例所屬的襯墊模板的功能的一份拷貝),或者是當(dāng)前已經(jīng)通過(guò)該襯墊的流媒體類(lèi)型。前一種情況,該襯墊實(shí)例還未有任何數(shù)據(jù)流在其中通過(guò)。. 分解功能襯墊的功能通過(guò)GstCaps 對(duì)象來(lái)進(jìn)行描述。一個(gè)GstCaps對(duì)象會(huì)包含一個(gè)或多個(gè)GstStructure。一個(gè) GstS
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1