GStreamer基礎教程16——平臺相關的element

目標

      雖然GStreamer是跨平臺的framework,但不是所有的element都是在所有平臺下都有的。比如,音頻和視頻的sink都非常依賴於當前的window系統,根據當前的平臺需要選擇不同的element。當然,你在運行playbin2或者autovideosink這些element時不需要考慮跨平臺的問題,但是,當你使用僅僅在特定的平臺存在的sink時,這個問題就繞不過去了。本教程會介紹這些element的一些特性。


Linux

ximagesink

      標準的基於X系統的視頻sink。它實現了XOverlay接口,所以視頻窗口可以嵌入其他窗口。它不支持視頻縮放,需要實現這個功能必須使用其他的方法(比如videoscale element)。

xvimagesink

      一個基於X系統的視頻sink,使用了XVideo_Extension(Xv)方法。它實現了XOverlay接口,所以視頻窗口可以嵌入其他窗口。它支持在GPU上進行高效的視頻縮放。它僅在硬件和驅動支持Xv擴充的情況下纔可以使用。

cluttersink

      這個Gstreamer視頻sink會給ClutterTexture發送數據用來顯示。Clutter是一個跨平臺的庫,所以每個平臺都可以使用這個sink。Clutter通過使用OpenGL作爲後臺渲染的方法來獲得平臺無關性,所以必須保證系統支持OpenGL。

alsasink

      這個音頻sink會通過ALSA來輸出到聲卡。這個sink在幾乎所有的linux平臺上都有。它通常被看做聲卡底層的接口,同時配置起來比較複雜。

plusesink

      這個sink在一個PulseAudio服務器上播放聲音。它是比ALSA更高層級的抽象,而且使用更加方便並且提供更多地一些高級功能。但是,在一些舊的linux系統上不夠穩定。


Mac OS X

osxvideosink

      這是在Mac OSX系統上唯一提供的視頻sink。

cluttersink

      這個Gstreamer視頻sink會給ClutterTexture發送數據用來顯示。Clutter是一個跨平臺的庫,所以每個平臺都可以使用這個sink。Clutter通過使用OpenGL作爲後臺渲染的方法來獲得平臺無關性,所以必須保證系統支持OpenGL。

osxaudiosink

      這是在Mac OSX系統上唯一提供的音頻sink。


Windows

directdrawsink  

      這是Windows下最老的基於DirectDraw的視頻sink。它僅需要DirectX7,所以在目前幾乎所有的Windows平臺上都支持。

dshowvideosink   

      這是基於DirectShow的一個視頻sink。它可以使用不同的後端做渲染,比如EVR,VMR9或VMR7。它支持視頻圖像尺寸調節並且可以過濾調節過得圖像來避免混淆。它實現了XOverlay的接口,所以視頻窗口可以嵌入其他窗口中。

d3dvideosink

      這是最新的基於Direct3D的視頻sink。它支持視頻圖像尺寸調節並且可以過濾調節過得圖像來避免混淆。它實現了XOverlay的接口,所以視頻窗口可以嵌入其他窗口中。

cluttersink

      這個Gstreamer視頻sink會給ClutterTexture發送數據用來顯示。Clutter是一個跨平臺的庫,所以每個平臺都可以使用這個sink。Clutter通過使用OpenGL作爲後臺渲染的方法來獲得平臺無關性,所以必須保證系統支持OpenGL。

directsoundsink

      這是Windows默認的音頻sink,基於所有Windows版本都支持的DirectSound。

dshowdecwrapper

      DirectShow是類似於GStreamer的一個多媒體框架。但它們也有很多的不同,pipeline是不能相互連接的。但是,通過這個element,GStreamer就可以使用DirectShow的解碼element的輸出了。dshowdecwrapper可以包裝多個DirectShow的解碼器,然後放進GStreamer的pipeline。


Android

eglglessink

      這個視頻sink是基於OpenGLES和EGL的。它支持視頻圖像尺寸調節並且可以過濾調節過得圖像來避免混淆。它實現了XOverlay的接口,所以視頻窗口可以嵌入其他窗口中。

openslessink

      這是GStreamer在Android平臺上唯一的音頻sink,它基於OpenSL ES。

androidmedia

      android.media.MediaCodec是一個支持在設備側編解碼包括硬件編解碼的一個Android上的API。它在JellyBean之後就可以用了,GStreamer可以通過androidmedia插件來用這個API做音頻和視頻的解碼。


iOS

eglglessink

      這個視頻sink是基於OpenGLES和EGL的。它支持視頻圖像尺寸調節並且可以過濾調節過得圖像來避免混淆。它實現了XOverlay的接口,所以視頻窗口可以嵌入其他窗口中。

osxaudiosink

      這是iOS上唯一支持的音頻sink。

iosassertsrc

      讀取iOS設備上內容(比如:照片,音樂,錄像等等)的source element。當你使用playbin2並且URI使用assets-library://這個格式的時候會用到這個element。

iosavassetsrc

      讀取iOS設備上音視頻內容(比如:照片,音樂,錄像等等)的source element。當你使用playbin2並且URI使用ipod-library://這個格式的時候會用到這個element。這裏的解碼是針對系統優化過的。



發佈了79 篇原創文章 · 獲贊 42 · 訪問量 111萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章