前言
本文是GStreamer学习笔记,也可以看成是对原文的意译。
这些教程描述了理解其余教程所需的GStreamer主题。
GStreamer教程:
环境
系统环境
Distributor ID: Ubuntu
Description: Ubuntu 18.04.4 LTS
Release: 18.04
Codename: bionic
Linux version : 5.3.0-46-generic ( buildd@lcy01-amd64-013 )
Gcc version: 7.5.0 ( Ubuntu 7.5.0-3ubuntu1~18.04 )
软件信息
version :
GStreamer-1.0
正文
1. 目标
尽管 GStreamer 是一个多平台框架,但并非所有元素都适用于所有平台。 例如,视频接收器在很大程度上依赖于底层的窗口系统,需要根据平台选择不同的。 在使用 playbin 或 autovideosink 等元素时,您通常无需担心这一点,但是,对于那些需要使用仅在特定平台上可用的接收器之一的情况,本教程会向您提示它们的一些特性。
2. 跨平台
glimagesink
此视频接收器基于 OpenGL或OpenGL ES。它支持缩放图像的重新缩放和过滤以减轻锯齿。它实现了 VideoOverlay 接口,因此可以重新设置视频窗口的父级(嵌入到其他窗口中)。这是除 Windows 之外的大多数平台上推荐的视频接收器(在 Windows 上,d3d11videosink
推荐)。特别是,在 Android 和 iOS 上,它是唯一可用的视频接收器。它可以分解为 glupload ! glcolorconvert ! glimagesinkelement
将进一步的 OpenGL 硬件加速处理插入到管道中。
3. Linux
ximagesink
仅基于 X 的标准 RGB 视频接收器。它实现了 VideoOverlay 接口,因此可以重新设置视频窗口的父级(嵌入到其他窗口中)。它不支持RGB以外的缩放或颜色格式;它必须通过不同的方式执行( videoscale
例如,使用元素)。
xvimagesink
基于 X 的视频接收器,使用X 视频扩展(Xv)。它实现了 VideoOverlay 接口,因此可以重新设置视频窗口的父级(嵌入到其他窗口中)。它可以在 GPU 上高效地执行缩放。仅当硬件和相应的驱动程序支持 Xv 扩展时才可用。
alsasink
此音频接收器通过ALSA(高级 Linux 声音架构)输出到声卡 。几乎所有 Linux 平台都提供此接收器。它通常被视为声卡的“低级”接口,配置起来可能很复杂(参见 播放教程 9:数字音频直通的评论)。
pulsesink
此接收器将音频播放到PulseAudio 服务器。它是比 ALSA 更高级别的声卡抽象,因此更易于使用并提供更高级的功能。不过,众所周知,它在一些较旧的 Linux 发行版上不稳定。
4. Window
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 或更新版本上使用。请注意,这是Windows 8 或更新版本wasapi2sink
的替代版本,wasapisink
并且是默认设置。wasapi2sink
否则wasapisink
将是默认的音频接收器元素。
directsoundsink (deprecated)
此音频接收器元素基于 DirectSound,可在所有 Windows 版本中使用。
dshowdecwrapper
Direct Show是一个类似于 GStreamer 的多媒体框架。但是,它们足够不同,因此它们的管道无法互连。但是,通过这个元素,GStreamer 可以从 Direct Show 中的解码元素中受益。dshowdecwrapper
包装了多个 Direct Show 解码器,因此它们可以嵌入到 GStreamer 管道中。使用该gst-inspect-1.0
工具(参见基础教程 10: GStreamer工具)查看可用的解码器。
5. Mac OS X
osxvideosink
这是 Mac OS X 上 GStreamer 可用的视频接收器。也可以glimagesink
使用 OpenGL 进行绘制。
osxaudiosink
这是 Mac OS X 上 GStreamer 唯一可用的音频接收器。
6. Andriod
openslessink
这是 Android 上 GStreamer 唯一可用的音频接收器。它基于OpenSL ES。
openslessrc
这是 Android 上 GStreamer 唯一可用的音频源。它基于OpenSL ES。
androidmedia
android.media.MediaCodec 是一个特定于 Android 的 API,用于访问设备上可用的编解码器,包括硬件编解码器。它从 API 级别 16 (JellyBean) 开始可用,GStreamer 可以通过 androidmedia 插件使用它进行音频和视频解码。在 Android 上,将硬件解码器附加到glimagesink
元素可以生成高性能的零拷贝 decodebin 管道。
ahcsrc
此视频源可以从 Android 设备上的摄像头捕获,它是 androidmedia 插件的一部分并使用android.hardware.Camera API。
7. iOS
osxaudiosink
这是 iOS 上 GStreamer 唯一可用的音频接收器。
iosassetsrc
用于读取 iOS 资产的源元素,即存储在库中的文档(如照片、音乐和视频)。它可以playbin
在 URI 使用该 assets-library://
方案时自动实例化。
iosavassetsrc
用于读取和解码 iOS 视听资产的源元素,即存储在库中的文档(如照片、音乐和视频)。它可以playbin
在 URI 使用该 ipod-library://
方案时自动实例化。解码由系统执行,因此如果可用,将使用专用硬件。
8. 结论
本教程展示了一些 GStreamer 元素的具体细节,这些元素并非在所有平台上都可用。 使用 playbin 或 autovideosink 等多平台元素时,您不必担心它们,但如果手动实例化它们,了解它们的个别不同之处是件好事。