1. 程式人生 > >【GStreamer開發】GStreamer基礎教程16——平臺相關的element

【GStreamer開發】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。

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。這裡的解碼是針對系統優化過的。