NO IMAGE

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,構建出自己的不同型別的多媒體應用。