Gstreamer學習筆記----Gstreamer架構設計思想
http://blog.csdn.net/tx3344/article/details/7497434
Gstreamer到底是個啥?
GStreamer 是一個 基於pipeline的多媒體框架,基於GObject,以C語言寫成。
應用GStreamer這個這個多媒體框架,你可以寫出任意一種流媒體的應用來如:meidaplayer、音視頻編輯器、VOIP、流媒體服務器、音視頻編碼等等。
pipeline是啥?
pipeline是GStreamer設計的核心思想,在說pipeline之前先弄一個meidaplayer的模型,meidaplayer是 GStreamer比較重要的應用之一。不管是VLC、mplayer這些開源的多媒體播放器,還是其他商用的。meidaplayer都能抽象成以下的 模型:
上面這個圖就是個典型的meida播放器的模型:
source:數據來源,可能是file、http、rtp等.
demux: 負責把容器里的音視頻數據剝離出來,然后分別送給audio\video decoder.
decoder:解碼,然后把解完后的數據(yuv、pcm)送給audio\video output輸出.
output:負責將decoder過來的數據呈現出來.
如果把數據想象成流水的話,每個模塊的功能雖然不同,但是他們大致抽象的功能都是接收上個模塊過來的數據,然后加工把加工后的數據送到下一個模塊。
把上述這些模塊通過某種方式連接起來,就形成了一個流水線(pipeline),這個流水線就是一個media播放器。
GStreamer 就是把每個模塊都看做是一個Element,然后構建了連接和操作這些Element的方法,用戶可以通過自己的需求把不同的Elements 排列組合,形成一個又一個的不同的pipeline。
你可以形成具有mediaplayer功能 的pipeline 、VOIP功能的pipeline。
Gstreamer架構
這個時候再看 Gstreamer整體的架構圖就很清楚了,
底層是150多個plugin,也就是Element.提供不同功能的元件:
-
protocols handling
-
sources: for audio and video (involves protocol plugins)
-
formats: parsers, formaters, muxers, demuxers, metadata, subtitles
-
codecs: coders and decoders
-
filters: converters, mixers, effects, ...
-
sinks: for audio and video (involves protocol plugins)
中間的core framework提供:插件框架、pipeline架構、媒體類型處理機制、等等,也就是上面說的處理Elements的方式方法.
上層依靠Gstreamer提供的這些方式方法還有plugin,構建出自己的不同類型的多媒體應用。