真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

使用GStreamer進(jìn)行多用途的多媒體處理

from: http://www.ibm.com/developerworks/cn/aix/library/au-gstreamer.html

成都創(chuàng)新互聯(lián)公司是一家集成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)站頁(yè)面設(shè)計(jì)、網(wǎng)站優(yōu)化SEO優(yōu)化為一體的專業(yè)的建站公司,已為成都等多地近百家企業(yè)提供網(wǎng)站建設(shè)服務(wù)。追求良好的瀏覽體驗(yàn),以探求精品塑造與理念升華,設(shè)計(jì)最適合用戶的網(wǎng)站頁(yè)面。 合作只是第一步,服務(wù)才是根本,我們始終堅(jiān)持講誠(chéng)信,負(fù)責(zé)任的原則,為您進(jìn)行細(xì)心、貼心、認(rèn)真的服務(wù),與眾多客戶在蓬勃發(fā)展的市場(chǎng)環(huán)境中,互促共生。

多媒體,依照其定義,表示各種各樣的媒體類型。您可以各種格式存儲(chǔ)音頻、視頻和元數(shù)據(jù)。然而,這也就意味著要使用許多工具來(lái)處理這些不同的內(nèi)容。

GStreamer 可以為您提供幫助。通過(guò)將所有不同的工具和庫(kù)隱藏到它的插件中,以及使用媒體管道 這個(gè)一般性概念,GStreamer 能以一種統(tǒng)一的方式表示對(duì)不同類型媒體所進(jìn)行的操作。這使得您能夠?qū)⒕杏诂F(xiàn)有的媒體,而不是困惑于究竟應(yīng)該使用什么樣的管道。

這種統(tǒng)一處理方法的優(yōu)點(diǎn)顯而易見(jiàn)。您可以編寫音樂(lè)視頻 播放器,而不是編寫 MP3 播放器或者 AVI/DivX 播放器。當(dāng)您希望支持另一種格式時(shí),無(wú)需進(jìn)行深入的研究并為新的庫(kù)編寫代碼。相反,僅需要安裝這種格式的插件就可以了。就是這么簡(jiǎn)單,甚至不需要進(jìn)行重新編譯。所有的 GStreamer 應(yīng)用程序都可以在運(yùn)行的過(guò)程中采用新的格式。

GStreamer 可以解決許多問(wèn)題,比如"需要存儲(chǔ)來(lái)自不同來(lái)源具有相同格式的所有音頻采樣"。因?yàn)閷?duì)所有的格式進(jìn)行相似的處理,所以您只需要編寫一個(gè)工具。這將節(jié)省時(shí)間,并使得解決方案更加健壯且更易于維護(hù)。而且,在您了解了 GStreamer 的相關(guān)概念之后,幾乎可以將它應(yīng)用到任何地方。如果您要讓音頻信息流經(jīng)網(wǎng)絡(luò),那么只需要考慮這個(gè)網(wǎng)絡(luò),因?yàn)槟褂玫囊纛l API(應(yīng)用程序編程接口)和所有其他的操作都保持不變。

相關(guān)概念

由于其本身的特性,GStreamer 比普通的庫(kù)位于更高的層次。因此,務(wù)必理解 GStreamer 究竟是什么以及它能夠完成哪些工作。

GStreamer 是一種媒體處理庫(kù)。這就意味著,它為您提供了某種轉(zhuǎn)換過(guò)程的抽象模型(由輸入、輸出和不同的階段組成),并且允許您為滿足特殊的最終結(jié)果和特殊的媒體類型而構(gòu)建這種轉(zhuǎn)換過(guò)程的實(shí)例。下面是這種處理過(guò)程的一些示例:

  • 將 MP3 音頻文件轉(zhuǎn)換為 Ogg Vorbis
  • 播放 AVI 電影文件
  • 使用 IEEE1394 數(shù)字視頻 (DV) 攝像機(jī)捕獲現(xiàn)場(chǎng)表演,并將它保存為 MPEG-2 流

為了實(shí)現(xiàn)這些不同的結(jié)果,GStreamer 通過(guò)抽象的管道概念進(jìn)行工作。管道 是一個(gè)有向圖,媒體在這個(gè)有向圖中從輸入流到輸出。管道由各種元素組成,而元素則是另一個(gè)核心概念。元素 是可以放入到管道中的對(duì)象,其中包裝了對(duì)媒體進(jìn)行的某種操作。您可以將不同的元素鏈接在一起,以使它們共同組成將輸入轉(zhuǎn)換為需要的輸出的完整處理過(guò)程。通常,使用從左(上游)到右(下游)的數(shù)據(jù)流來(lái)對(duì)管道進(jìn)行描述。使用 gst-launch 以同樣的方式來(lái)編寫管道,關(guān)于 gst-launch 的內(nèi)容將在本文后面介紹。

請(qǐng)務(wù)必注意,到目前為止,所有的內(nèi)容都是完全抽象的。沒(méi)有涉及到視頻或音頻,之所以這樣做,有一個(gè)很好的理由。上面描述的模型并不局限于任何特定的媒體類型。只要您可以將其描述為輸入、輸出和轉(zhuǎn)換過(guò)程,就都可以利用管道來(lái)對(duì)其進(jìn)行操作。例如,桌面可以作為媒體來(lái)源,您可以錄制對(duì)視頻文件的屏幕播放。事實(shí)上,Istanbul 應(yīng)用程序正是這樣做的(請(qǐng)參見(jiàn)參考資料部分)。

GStreamer 的核心本身并不包含任何元素。它只提供關(guān)于管道的知識(shí)。而所有特定的內(nèi)容,都由相應(yīng)的插件提供。插件 是一段經(jīng)過(guò)編譯的代碼,通常以對(duì)象文件(UNIX 上的 .so 和Microsoft Windows 上的 .dll)的形式分發(fā),可以提供一個(gè)或多個(gè)元素。在啟動(dòng)過(guò)程中,GStreamer 對(duì)所有已安裝的插件進(jìn)行查詢,以獲取可用于應(yīng)用程序的一組元素。插件通??梢哉{(diào)用其他的庫(kù),以完成特定的任務(wù)(例如,MPEG-2 ×××可以使用現(xiàn)有的庫(kù)來(lái)處理 MPEG 格式的信息),但是應(yīng)用程序并不需要知道這一點(diǎn)。它所看到的只是一些外觀和工作方式相同的元素。

有些插件以核心源包的形式分發(fā),并且將其編譯為庫(kù),甚至從概念上看,它們是一些獨(dú)立的實(shí)體。其他的基本插件以基于 gst 插件包的形式分發(fā)。在大多數(shù)的 GStreamer 安裝中,都包含這些基本插件。然后還有一些好的、差的和糟糕的 gst 插件包,其中,根據(jù)這些不同的插件得到的支持級(jí)別和許可條款對(duì)其進(jìn)行收集。最后,還有一些由第三方供應(yīng)商分發(fā)或注冊(cè)專門用于特定應(yīng)用程序的插件。

融會(huì)貫通

既然已經(jīng)了解了管道,您就還需要了解如何將它映射為 GStreamer 實(shí)現(xiàn)。在此過(guò)程中,您還將了解到更多的術(shù)語(yǔ)。

為什么要交換源和接收器呢?

實(shí)際上并沒(méi)有對(duì)它們進(jìn)行交換。接收單元是數(shù)據(jù)流進(jìn)入元素的地方,而源單元是數(shù)據(jù)流產(chǎn)生的地方。因此,只包含源單元的元素稱為,而只包含接收單元的元素稱為接收器。這是非常符合邏輯的,即使乍看上去可能有些別扭。

正如我所提到的,元素是處理過(guò)程的基本單元,由 GstElement 類來(lái)表示。GStreamer 是使用 C 進(jìn)行編寫的,但是它使用了來(lái)自 GTK+ 工具包的 GObject 庫(kù),以獲得面向?qū)ο蟮奶匦裕ㄕ?qǐng)參見(jiàn)參考資料部分)。元素中包含一些單元,這些單元是鏈接到其他元素的位置。有兩種類型的單元:

  • 接收單元 為元素提供輸入。
  • 可以通過(guò)源單元 訪問(wèn)元素所產(chǎn)生的數(shù)據(jù)。

這些單元所具有的相應(yīng)功能稱為能力。這些功能表示什么類型的數(shù)據(jù)可以流經(jīng)該單元。例如,如果您檢查一個(gè) vorbisdec 元素(它是一個(gè)免費(fèi) Vorbis 代碼的×××),可以看到如清單 1 中所示的代碼。一行開(kāi)頭處的美元符號(hào) ($) 表示該行是常規(guī)的 UNIX Shell 命令。

清單 1. vorbisdec 元素信息中的代碼段

$ gst-inspect-0.10 vorbisdec[...] Pad Templates: SRC template: 'src' Availability: Always Capabilities: audio/x-raw-float rate: [ 8000, 50000 ] channels: [ 1, 6 ] endianness: 1234 width: 32 SINK template: 'sink' Availability: Always Capabilities: audio/x-vorbis [...]

您可以看到,其中有兩種單元模板:一種用于源 (src),另一種用于接收器。源單元的可用性為 always(其他可能的可用性取值為 sometimes 和 request),并且能夠以 8kHz 到 50kHz 的速率輸出原始浮點(diǎn)音頻,該音頻具有 1 至 6 聲道、小端字節(jié)順序以及 32 位寬的采樣。另一方面,接收單元僅接收 Vorbis 編碼的音頻流。

要使管道正常工作,這些模板是至關(guān)重要的。當(dāng)您試圖將兩個(gè)元素鏈接到一起以組成一個(gè)管道時(shí),GStreamer 會(huì)查看它們的單元模板是否兼容。這個(gè)過(guò)程稱為協(xié)商。在協(xié)商過(guò)程中,這些元素會(huì)嘗試發(fā)現(xiàn)它們之間共同支持的最佳格式。如果不存在這樣的格式,那么鏈接將會(huì)失敗。否則,它們將會(huì)達(dá)成協(xié)議使用一種通用格式。這種格式不再是模板,而稱為固定的能力,這表示所有的值都具有實(shí)際意義并且是明確的。然后,可以將數(shù)據(jù)從一個(gè)元素傳遞到另一個(gè)元素。

現(xiàn)在,您已經(jīng)了解了開(kāi)始工作前所需要的內(nèi)容。為了完成具體的工作,我將介紹 GStreamer 中如"瑞士×××"般銳利的工具,gst-launch 工具。

回頁(yè)首

使用 gst-launch

了解您的工具

除了 gst-launch 之外,GStreamer 在分發(fā)時(shí)還附帶了一些其他的工具,如 gst-inspect 和 gst-typefind。請(qǐng)使用這些工具,它們將是您最好的伙伴。

在不知道如何使用某個(gè)元素時(shí),可以使用 gst-inspect。指定任何元素或插件的名稱,它將顯示 GStreamer 所知道的關(guān)于該對(duì)象的所有信息,當(dāng)然,相關(guān)的信息可能會(huì)比較多。

使用 gst-typefind,這是 GStreamer 版本的優(yōu)秀的舊式 file(1) UNIX 實(shí)用程序,您可以找出文件類型(或者確切地說(shuō),GStreamer 所認(rèn)為的文件類型)。

gst-launch 是您所碰到用途最多的工具之一。對(duì)于 GStreamer 來(lái)說(shuō),它就像是 UNIX 的 Shell。使用該工具,您甚至可以通過(guò)特殊的語(yǔ)法(相應(yīng)地稱為 gst-launch 語(yǔ)法)構(gòu)建復(fù)制的管道,如清單 2 中所示。

清單 2. gst-launch 行的示例

$ gst-launch-0.10 filesrc location= "concept.mp3" ! decodebin ! alsasinkSetting pipeline to PAUSED ... Pipeline is PREROLLING ... Pipeline is PREROLLED ... Setting pipeline to PLAYING ... New clock: audioclock0

清單 2 是一種最簡(jiǎn)單的音頻播放器?,F(xiàn)在,我正使用它聽(tīng) concept.mp3。表 1 解釋了如何從左到右閱讀該命令行。

表 1. 清單 2 中介紹的語(yǔ)法的元素描述

元素 描述
gst-launch-0.10 這是該命令的名稱。-0.10 表示在同時(shí)安裝了舊的 0.8 發(fā)布版的情況下,應(yīng)該使用特定版本 GStreamer 0.10。
filesrc location="concept.mp3" 它創(chuàng)建了一個(gè) filesink 類的元素,并將其 location 屬性設(shè)置為 concept.mp3。因?yàn)?filesrc 元素可以讀取由 location 指定的文件,所以該命令為當(dāng)前目錄中的 concept.mp3 文件創(chuàng)建了一個(gè)讀取器。
! 感嘆號(hào)表示鏈接到。與 Shell 中的管道符號(hào) (|) 類似,之所以選擇使用感嘆號(hào),是因?yàn)樗雌饋?lái)與 (|) 比較相似,并且在 Shell 中無(wú)需對(duì)其進(jìn)行轉(zhuǎn)義(只要它的前后都有空格即可)。
decodebin 這是由 GStreamer 提供的 autoplugger。autoplugger 是一個(gè)元素,指定了其輸入和輸出的數(shù)據(jù)類型,它可以使用其他的可用元素來(lái)查找提供所需結(jié)果的子管道。請(qǐng)記住,GStreamer 中所有的鏈接都應(yīng)該是類型化的,因此,感嘆號(hào) (!) 隱式地表示了它所鏈接的元素的類型信息。因?yàn)?filesrc 具有 ANY 類型的能力,所以 decodebin 首先對(duì)流嘗試 typefind 操作。也就是說(shuō),它將查找表示類型的特征符號(hào)。所有的這些操作,對(duì)于用戶來(lái)說(shuō)都是透明的。
alsasink 這是適合于我的 Linux 系統(tǒng)的音頻輸出的元素。它與聲卡進(jìn)行通信并為其提供原始音頻采樣。它必須與整個(gè)管道合拍,因?yàn)槁暱ň哂惺褂脭?shù)據(jù)的正常速率。

當(dāng)我按下 Enter時(shí),它會(huì)顯示一些狀態(tài)信息,直到管道到達(dá) PLAYING 狀態(tài)。然后,開(kāi)始以流的形式傳輸數(shù)據(jù),而我可以聽(tīng)到聲音,由我的聲卡 (audioclock0) 設(shè)定其節(jié)奏。

正如您所看到的,GStreamer 為您節(jié)省了大量的 工作。您甚至無(wú)需了解嘗試解碼的媒體類型。請(qǐng)記住,正如 Shell 無(wú)法取代 C 程序,gst-launch 工具無(wú)法取代完整的 GStreamer 應(yīng)用程序。例如,gst-launch 不允許您在其啟動(dòng)之后以任何方式對(duì)管道進(jìn)行控制,所以您無(wú)法跳過(guò)流中的某些部分。盡管如此,它仍然是非常有用的,特別是對(duì)于一些快速的任務(wù),比如將音頻文件錄制為另一種格式或者僅使用管道進(jìn)行試驗(yàn)。

回頁(yè)首

更深入的研究

本文只是簡(jiǎn)單地介紹了您能夠使用 GStreamer 進(jìn)行哪些工作。很顯然,使用簡(jiǎn)單的 Shell 命令創(chuàng)建音頻播放器非常不錯(cuò)。然而,這只是一個(gè)非常簡(jiǎn)單的播放器,沒(méi)有任何用戶界面和控件。要添加這些項(xiàng)目和更多的內(nèi)容,您需要使用一些代碼。即便如此,GStreamer API 仍然很簡(jiǎn)單并且經(jīng)過(guò)了仔細(xì)的考慮。如果您不喜歡 C,可以從其他的綁定中進(jìn)行選擇,包括 Python 語(yǔ)言綁定的謹(jǐn)慎維護(hù)子集。

請(qǐng)閱讀 gst-launch 的 man 頁(yè)面。完整語(yǔ)法的范圍更加廣泛,并且您可以使用它來(lái)創(chuàng)建更復(fù)雜和有趣的管道,包括那些可以從代碼中創(chuàng)建的管道。是的,您甚至可以創(chuàng)建自己的 gst-launch(請(qǐng)查看gst_parse_launch () 函數(shù)文檔以了解如何完成這項(xiàng)工作)。

另外,請(qǐng)加入該郵件列表并順便訪問(wèn) IRC 頻道(#gstreamer@irc.freenode.net)。GStreamer 開(kāi)發(fā)人員組成了一個(gè)非?;钴S的集體,通??傆腥藶槟峁椭虻玫侥膸椭?。

參考資料

學(xué)習(xí)

  • 您可以參閱本文在 developerWorks 全球站點(diǎn)上的 英文原文 。
  • GStreamer 應(yīng)用程序開(kāi)發(fā)手冊(cè):閱讀該手冊(cè),以了解更多的關(guān)于 GStreamer 的概念,以及如何使用 GStreamer 編寫應(yīng)用程序。
  • GStreamer 插件程序員指南:在您需要?jiǎng)?chuàng)建自己的插件時(shí),該指南非常有用。
  • GStreamer 0.10 核心參考手冊(cè):這是一本非常有價(jià)值的參考手冊(cè)。
  • GObject 參考手冊(cè):閱讀該手冊(cè),以了解關(guān)于 GStreamer 所使用的面向?qū)ο髱?kù)的更多信息。
  • AIX and UNIX:想了解更多內(nèi)容嗎?developerWorks 的"AIX and UNIX"專區(qū)提供數(shù)百篇關(guān)于 AIX 和 UNIX 的文章以及入門級(jí)、中級(jí)和高級(jí)教程,將讓您大開(kāi)眼界。
  • 技術(shù)講座:收聽(tīng)技術(shù)講座并保持與 IBM 技術(shù)專家同步。

獲得產(chǎn)品和技術(shù)

  • GStreamer 主頁(yè):有關(guān)最新的信息和下載,請(qǐng)?jiān)L問(wèn)此站點(diǎn)。
  • Istanbul:Istanbul 是一種使用 GStreamer 的桌面會(huì)話錄制程序。
  • IBM 試用軟件:使用 IBM 軟件開(kāi)發(fā)您的下一個(gè)項(xiàng)目,可直接從 developerWorks 下載這些試用軟件。

討論

  • 參與 "AIX and UNIX"論壇、developerWorks 博客,并加入 developerWorks 社區(qū)。
  • gstreamer-devel:請(qǐng)不要猶豫,您可以在 gstreamer-devel 上發(fā)布消息,這是面向 GStreamer 開(kāi)發(fā)和使用的郵件列表

分享文章:使用GStreamer進(jìn)行多用途的多媒體處理
鏈接地址:http://weahome.cn/article/geidig.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部