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