GStreamer Basic tutorial 16 Platform Specific Elements

"GStreamer 基本教程16: 特定平台元素"

Posted by Stephen on March 27, 2022

前言

本文是GStreamer学习笔记,也可以看成是对原文的意译。

这些教程描述了理解其余教程所需的GStreamer主题。

GStreamer教程:

基础教程 : GStreamer 介绍

基础教程 1: Hello world!

基础教程 2: GStreamer 概念

基础教程 3: 动态管道

基础教程 4: 时间管理

基础教程 5: GUI工具包集成

基础教程 6: 媒体格式和pad功能

基础教程 7: 多线程和Pad可用性

基础教程 8: 管道短路操作

基础教程 9: 媒体信息收集

基础教程 10: GStreamer工具

基础教程 11: 调试工具

基础教程 12: 流媒体

基础教程 13: 播放速度

基础教程 14: 有用的元素

基础教程 16: 特定平台元素

环境

系统环境

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

此视频接收器基于 OpenGLOpenGL 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。它可以使用不同的渲染后端,例如 EVRVMR9VMR7,EVR 仅在 Windows Vista 或更新版本上可用。它支持缩放图像的重新缩放和过滤以减轻锯齿。它实现了 VideoOverlay 接口,因此可以重新设置视频窗口的父级(嵌入到其他窗口中)。在大多数情况下不推荐使用此元素。

wasapisinkwasapi2sink

这些元素是 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 等多平台元素时,您不必担心它们,但如果手动实例化它们,了解它们的个别不同之处是件好事。

后记