目標
雖然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。這裏的解碼是針對系統優化過的。