GStreamer Basic tutorial 学习笔记(十六)

1. 特定平台的元素

1.1 目标

尽管GStreamer是一个跨平台的框架,但并非所有元素都适用于所有平台。例如,视频输出依赖于底层窗口系统,因此需要根据平台选择不同的视频输出。当使用像playbinautovideosink这样的元素时,通常不需要担心这个问题,但是在需要使用仅适用于特定平台的输出元素时,本教程会向您介绍一些它们的特殊性。

1.2 跨平台

1.2.1 glimagesink

该视频输出元素基于OpenGL或OpenGL ES。它支持对缩放图像进行重采样和滤波以减轻混叠效应。它实现了VideoOverlay接口,因此视频窗口可以重新定位(嵌入到其他窗口中)。这是大多数平台上推荐的视频输出元素,除了Windows平台(在Windows上推荐使用d3d11videosink)。特别是在Android和iOS上,它是唯一可用的视频输出元素。它可以通过glupload!glcolorconvert!glimagesinkelement进行分解,以在流水线中插入进一步的OpenGL硬件加速处理。

1.3 Linux

1.3.1 ximagesink

基于X Window的标准RGB视频输出。它实现了VideoOverlay接口,因此视频窗口可以重新定位(嵌入到其他窗口中)。它不支持除RGB以外的其他缩放或颜色格式;可以使用其他方法来执行这些操作(例如使用videoscale元素)。

1.3.2 xvimagesink

基于X Window的视频输出,使用X Video Extension(Xv)。它实现了VideoOverlay接口,因此视频窗口可以重新定位(嵌入到其他窗口中)。它可以在GPU上高效地进行缩放。只有在硬件和对应的驱动程序支持Xv扩展时才可用。

1.3.3 alsasink

该音频输出通过ALSA(Advanced Linux Sound Architecture)输出到声卡。这个输出在几乎所有Linux平台上都可用。它通常被视为与声卡交互的“低级”接口,并且可能配置复杂(参见《Playback tutorial 9: Digital audio pass-through》中的注释)。

1.3.4 pulsesink

该输出将音频播放到PulseAudio服务器。它比ALSA更高级的抽象层次接口,因此更容易使用并提供更高级的功能。但是,已知在一些较旧的Linux发行版上不稳定。

1.4 Mac OS X

1.4.1 osxvideosink

这是在Mac OS X上可用的视频输出元素。也可以使用OpenGL使用glimagesink进行绘制。

1.4.2 osxaudiosink

这是在Mac OS X上唯一可用的音频输出元素。

1.5 Windows

1.5.1 d3d11videosink

该视频输出元素基于Direct3D11,是Windows平台上推荐的元素。它支持VideoOverlay接口,并以零拷贝方式进行缩放和颜色空间转换。该元素是Windows平台上性能最好、功能最丰富的视频输出元素。

1.5.2 d3dvideosink

该视频输出元素基于Direct3D9。它支持对缩放图像进行重采样和滤波以减轻混叠效应。它实现了VideoOverlay接口,因此视频窗口可以重新定位(嵌入到其他窗口中)。不推荐在针对Windows 8或更高版本的应用程序中使用此元素。

1.5.3 dshowvideosink(已弃用)

该视频输出元素基于Direct Show。它可以使用不同的渲染后端,如EVR、VMR9或VMR7,其中EVR仅适用于Windows Vista或更高版本。它支持对缩放图像进行重采样和滤波以减轻混叠效应。它实现了VideoOverlay接口,因此视频窗口可以重新定位(嵌入到其他窗口中)。在大多数情况下,不推荐使用此元素。

1.5.4 wasapisink和wasapi2sink

这些元素是Windows上默认的音频输出元素,基于WASAPI,可在Vista或更高版本中使用。请注意,wasapi2sinkwasapisink的替代品,并且在Windows 8或更高版本上是默认的音频输出元素。否则,wasapisink将是默认的音频输出元素。

1.5.5 directsoundsink(已弃用)

该音频输出元素基于DirectSound,在所有Windows版本中都可用。

1.5.6 dshowdecwrapper

Direct Show是一种类似于GStreamer的多媒体框架。它们之间有足够的差异,无法将它们的流水线相互连接。但是,通过该元素,GStreamer可以从Direct Show中的解码器中获益。dshowdecwrapper将多个Direct Show解码器封装起来,以便将其嵌入到GStreamer流水线中。使用gst-inspect-1.0工具(参见《Basic tutorial 10: GStreamer tools》)查看可用的解码器。

1.6 Android

1.6.1 openslessink

这是在Android上GStreamer可用的唯一音频输出元素。它基于OpenSL ES。

1.6.2 openslessrc

这是在Android上GStreamer可用的唯一音频源元素。它基于OpenSL ES。

1.6.3 androidmedia

android.media.MediaCodec是一个特定于Android的API,可访问设备上可用的编解码器,包括硬件编解码器。它从API级别16(JellyBean)开始提供,并且GStreamer可以通过androidmedia插件来使用它进行音频和视频解码。在Android上,将硬件解码器连接到glimagesink元素可以产生高性能的零拷贝decodebin流水线。

1.6.4 ahcsrc

这个视频源可以从Android设备的摄像头中捕获,它是androidmedia插件的一部分,使用android.hardware.Camera API。

1.7 iOS

1.7.1 osxaudiosink

这是在iOS上GStreamer可用的唯一音频输出元素。

1.7.2 iosassetsrc

这是一个读取iOS资源的源元素,即存储在库中的文档(如照片、音乐和视频)。当URI使用assets-library://方案时,playbin可以自动实例化它。

1.7.3 iosavassetsrc

这是一个读取和解码iOS音视频资源的源元素,即存储在库中的文档(如照片、音乐和视频)。当URI使用ipod-library://方案时,playbin可以自动实例化它。解码由系统执行,因此如果可用,将使用专用硬件进行解码。

1.8 结论

本教程展示了一些GStreamer元素的特定细节,这些元素并非在所有平台上都可用。当使用像playbinautovideosink这样的跨平台元素时,您无需担心这些细节,但是如果需要手动实例化这些元素,了解它们的特殊性是很好的。

你可能感兴趣的:(GStreamer学习笔记,GStreamer,服务器,webrtc,c++)