歡迎您光臨本站 註冊首頁

用 GStreamer 簡化 Linux 多媒體開發

←手機掃碼閱讀     火星人 @ 2014-03-26 , reply:0

  一、基本概念

  GStreamer 作為 GNOME 桌面環境推薦的流媒體應用框架,採用了基於插件(plugin)和管道(pipeline)的體系結構,框架中的所有的功能模塊都被實現成可以插拔的組件(component), 並且在需要的時候能夠很方便地安裝到任意一個管道上,由於所有插件都通過管道機制進行統一的數據交換,因此很容易利用已有的各種插件「組裝」出一個功能完善的多媒體應用程序。

  1.1 元件處理

  對於需要應用 GStreamer 框架的程序員來講,GstElement 是一個必須理解的概念,因為它是組成管道的基本構件,也是框架中所有可用組件的基礎,這也難怪 GStreamer 框架中的大部分函數都會涉及到對 GstElement 對象的操作。從 GStreamer 自身的觀點來看,GstElement 可以描述為一個具有特定屬性的黑盒子,它通過連接點(link point)與外界進行交互,向框架中的其餘部分表徵自己的特性或者功能。

  按照各自功能上的差異,GStreamer 又將 GstElement 細分成如下幾類:

  •Source Element 數據源元件 只有輸出端,它僅能用來產生供管道消費的數據,而不能對數據做任何處理。一個典型的數據源元件的例子是音頻捕獲單元,它負責從音效卡讀取原始的音頻數據,然後作為數據源提供給其它模塊使用。

  •Filter Element 過濾器元件 既有輸入端又有輸出端,它從輸入端獲得相應的數據,並在經過特殊處理之後傳遞給輸出端。一個典型的過濾器元件的例子是音頻編碼單元,它首先從外界獲得音頻數據,然後根據特定的壓縮演算法對其進行編碼,最後再將編碼后的結果提供給其它模塊使用。

  •Sink Element 接收器元件 只有輸入端,它僅具有消費數據的能力,是整條媒體管道的終端。一個典型的接收器元件的例子是音頻回放單元,它負責將接收到的數據寫到音效卡上,通常這也是音頻處理過程中的最後一個環節。

  圖1將有助於你更好地理解數據源元件、過濾器元件和接收器元件三者的區別,同時也不難看出它們是如何相互配合形成管道的:





圖1



  需要注意的是,過濾器元件的具體形式是非常靈活的,GStreamer並沒有嚴格規定輸入端和輸出端的數目,事實上它們都可以是一個或者多個。圖2是一個AVI分離器的基本結構,它能夠將輸入數據分離成單獨的音頻信息和視頻信息,用於實現該功能的過濾器元件很明顯只具有一個輸入端,但卻需要有兩個輸出端。





圖2



  要想在應用程序中創建GstElement對象,唯一的辦法是藉助於工廠對象GstElementFactory。由於GStreamer框架提供了多種類型的GstElement對象,因此對應地提供了多種類型的GstElementFactory對象,它們是通過特定的工廠名稱來進行區分的。例如,下面的代碼通過gst_element_factory_find()函數獲得了一個名為mad的工廠對象,它之後可以用來創建與之對應的MP3解碼器元件:
CODE:
GstElementFactory *factory;
factory = gst_element_factory_find ("mad");


[火星人 ] 用 GStreamer 簡化 Linux 多媒體開發已經有262次圍觀

http://coctec.com/docs/linux/show-post-189409.html