基础教程16:特定平台元素
目标
尽管GStreamer是一个跨平台框架,但并非所有元素在所有平台上都可用。例如,视频接收器严重依赖于底层的窗口系统,需要根据平台选择不同的接收器。在使用像playbin或autovideosink这样的元素时,通常不需要担心这个问题,但是,当您需要使用仅在特定平台上可用的接收器之一时,本教程会提示您一些特殊情况。
跨平台
glimagesink
这个视频接收器是基于 OpenGL或OpenGL ES。它支持对缩放后的图像进行重新调整和过滤以减轻锯齿现象。它实现了VideoOverlay接口,因此可以将视频窗口重新设置为其他窗口(嵌入在其他窗口中)。除了Windows之外,它是大多数平台上推荐的视频接收器(在Windows上,推荐使用d3d11videosink)。特别是在Android和iOS上,它是唯一的可用视频接收器。它可以分解为glupload ! glcolorconvert ! glimagesinkelement以将进一步的OpenGL硬件加速处理插入到管道中。
Linux
ximagesink
这是一个基于X的RGB标准视频接收器。它实现了VideoOverlay接口,因此可以将视频窗口重新设置为其他窗口(嵌入在其他窗口中)。除了RGB之外,它不支持缩放或颜色格式;必须通过不同的方式(例如使用videoscale元素)进行操作。
xvimagesink
基于X的视频接收器,使用X视频扩展(Xv)。它实现了VideoOverlay接口,因此可以将视频窗口重新设置为其他窗口(嵌入在其他窗口中)。它可以在GPU上高效地进行缩放。只有硬件和相应的驱动程序支持Xv扩展时,它才可用。
alsasink
此音频接收器通过 ALSA(Advanced Linux Sound Architecture)输出到声卡。此接收器几乎在所有Linux平台上都可用。它通常被视为对声卡的“低级”接口,并且可能难以配置(请参阅评论 播放教程9:数字音频直通)。
pulsesink
此接收器将音频播放到PulseAudio 服务器。与ALSA相比,它是声卡的更高级别的抽象,因此更易于使用并提供更高级的功能。尽管在某些较旧的Linux发行版上已知它会不稳定。
Mac OS X
osxvideosink
这是GStreamer在Mac OS X上可用的视频接收器。还可以使用OpenGL和glimagesink进行绘制。
osxaudiosink
这是GStreamer在Mac OS X上唯一的音频接收器。
Windows
d3d11videosink
此视频接收器基于Direct3D11 ,是Windows上的推荐元素。它支持VideoOverlay接口和零拷贝的方式的调整/颜色空间转换。这是Windows上性能最高且功能最丰富的视频接收器元素。
d3dvideosink
这个视频接收器是基于 Direct3D9。 它支持缩放和过滤以减轻锯齿现象的缩放图像。它实现了VideoOverlay接口,因此可以将视频窗口重新设置为其他窗口(嵌入在其他窗口中)。对于目标为Windows 8或更高版本的应用程序,不建议使用此元素。
dshowvideosink (deprecated)
此视频接收器基于Direct Show。它可以使用不同的 渲染后端,例如 EVR, VMR9 或者 VMR7, 其中EVR仅在Windows Vista或更高版本中可用。它支持缩放和过滤以减轻锯齿现象的缩放图像。它实现了VideoOverlay接口,因此可以将视频窗口重新设置为其他窗口(嵌入在其他窗口中)。大多数情况下不建议使用此元素。
wasapisink
和wasapi2sink
这些元素是基于 WASAPI的默认音频接收器元素,在Vista或更高版本上可用。请注意,wasapi2sink是wasapisink的替代品,并且wasapi2sink是Windows 8或更高版本的默认音频接收器元素。否则,wasapisink将是默认音频接收器元素。
directsoundsink (deprecated)
此音频接收器元素基于 DirectSound,可在 所有Windows版本。
dshowdecwrapper
Direct Show 是一个与GStreamer类似的多媒体框架。尽管它们之间有很大的不同,但它们的管道无法互连。但是,通过此元素,GStreamer可以从Direct Show中的解码器中受益。dshowdecwrapper包装了多个Direct Show解码器,以便它们可以嵌入GStreamer管道中。使用gst-inspect-1.0工具(参见基本教程10:GStreamer工具) 可用的解码器。
Android
openslessink
这是GStreamer在Android上唯一的音频接收器。它基于OpenSL ES。
OpenSL ES。
openslessrc
这是Android上GStreamer唯一可用的音频源。它是 基于OpenSL ES。
androidmedia
android.media. MediaCodec 是用于访问可用编解码器的Android特定API 设备,包括硬件编解码器。它从API级别开始可用 16(JellyBean)和GStreamer可以通过androidmedia插件使用它 用于音频和视频解码。在Android上,连接硬件 解码器对glimagesink
元件可以产生高性能 零拷贝解码带管道。
ahcsrc
此视频源可以从Android设备上的摄像头捕获,它是一部分 的androidmedia插件,并使用android.hardware.CameraAPI。
iOS
osxaudiosink
这是GStreamer在iOS上唯一可用的音频接收器。
iosassetsrc
用于读取iOS资源的源元素,即存储在库中的文档(如照片、音乐和视频)。当URI使用assets-library://方案时,它可以由playbin自动实例化。
iosavassetsrc
用于读取和解码iOS音视频资源的源元素,即存储在库中的文档(如照片、音乐和视频)。当URI使用ipod-library://方案时,它可以由playbin自动实例化。解码由系统执行,因此如果可用,将使用专用硬件。
结论
本教程展示了一些特定于平台的GStreamer元素的细节,这些元素并非在所有平台上都可用。在使用像playbin或autovideosink这样的跨平台元素时,您不必担心它们,但如果手动实例化它们,了解它们的个人特性是有好处的。