目标

虽然GStreamer是跨平台的framework,但不是所有的element都是在所有平台下都有的。比如,音频和视频的sink都非常依赖于当前的window系统,根据当前的平台需要选择不同的element。当然,你在运行playbin2或者autovideosink这些element时不需要考虑跨平台的问题,但是,当你使用仅仅在特定的平台存在的sink时,这个问题就绕不过去了。本教程会介绍这些element的一些特性。

Linux

ximagesink

标准的基于X系统的视频sink。它实现了XOverlay接口,所以视频窗口可以嵌入其他窗口。它不支持视频缩放,需要实现这个功能必须使用其他的方法(比如videoscale element)。

xvimagesink

一个基于X系统的视频sink,使用了XVideo_Extension(Xv)方法。它实现了XOverlay接口,所以视频窗口可以嵌入其他窗口。它支持在GPU上进行高效的视频缩放。它仅在硬件和驱动支持Xv扩充的情况下才可以使用。

cluttersink

这个Gstreamer视频sink会给ClutterTexture发送数据用来显示。Clutter是一个跨平台的库,所以每个平台都可以使用这个sink。Clutter通过使用OpenGL作为后台渲染的方法来获得平台无关性,所以必须保证系统支持OpenGL。

alsasink

这个音频sink会通过ALSA来输出到声卡。这个sink在几乎所有的linux平台上都有。它通常被看做声卡底层的接口,同时配置起来比较复杂。

plusesink

这个sink在一个PulseAudio服务器上播放声音。它是比ALSA更高层级的抽象,而且使用更加方便并且提供更多地一些高级功能。但是,在一些旧的linux系统上不够稳定。

Mac OS X

osxvideosink

这是在Mac OSX系统上唯一提供的视频sink。

cluttersink

这个Gstreamer视频sink会给ClutterTexture发送数据用来显示。Clutter是一个跨平台的库,所以每个平台都可以使用这个sink。Clutter通过使用OpenGL作为后台渲染的方法来获得平台无关性,所以必须保证系统支持OpenGL。

osxaudiosink

这是在Mac OSX系统上唯一提供的音频sink。

Windows

directdrawsink

这是Windows下最老的基于DirectDraw的视频sink。它仅需要DirectX7,所以在目前几乎所有的Windows平台上都支持。

dshowvideosink

这是基于DirectShow的一个视频sink。它可以使用不同的后端做渲染,比如EVR,VMR9或VMR7。它支持视频图像尺寸调节并且可以过滤调节过得图像来避免混淆。它实现了XOverlay的接口,所以视频窗口可以嵌入其他窗口中。

d3dvideosink

这是最新的基于Direct3D的视频sink。它支持视频图像尺寸调节并且可以过滤调节过得图像来避免混淆。它实现了XOverlay的接口,所以视频窗口可以嵌入其他窗口中。

cluttersink

这个Gstreamer视频sink会给ClutterTexture发送数据用来显示。Clutter是一个跨平台的库,所以每个平台都可以使用这个sink。Clutter通过使用OpenGL作为后台渲染的方法来获得平台无关性,所以必须保证系统支持OpenGL。

directsoundsink

这是Windows默认的音频sink,基于所有Windows版本都支持的DirectSound。

dshowdecwrapper

DirectShow是类似于GStreamer的一个多媒体框架。但它们也有很多的不同,pipeline是不能相互连接的。但是,通过这个element,GStreamer就可以使用DirectShow的解码element的输出了。dshowdecwrapper可以包装多个DirectShow的解码器,然后放进GStreamer的pipeline。

Android

eglglessink

这个视频sink是基于OpenGLES和EGL的。它支持视频图像尺寸调节并且可以过滤调节过得图像来避免混淆。它实现了XOverlay的接口,所以视频窗口可以嵌入其他窗口中。

openslessink

这是GStreamer在Android平台上唯一的音频sink,它基于OpenSL ES。

androidmedia

android.media.MediaCodec是一个支持在设备侧编解码包括硬件编解码的一个Android上的API。它在JellyBean之后就可以用了,GStreamer可以通过androidmedia插件来用这个API做音频和视频的解码。

iOS

eglglessink

这个视频sink是基于OpenGLES和EGL的。它支持视频图像尺寸调节并且可以过滤调节过得图像来避免混淆。它实现了XOverlay的接口,所以视频窗口可以嵌入其他窗口中。

osxaudiosink

这是iOS上唯一支持的音频sink。

iosassertsrc

读取iOS设备上内容(比如:照片,音乐,录像等等)的source element。当你使用playbin2并且URI使用assets-library://这个格式的时候会用到这个element。

iosavassetsrc

读取iOS设备上音视频内容(比如:照片,音乐,录像等等)的source element。当你使用playbin2并且URI使用ipod-library://这个格式的时候会用到这个element。这里的解码是针对系统优化过的。

【GStreamer开发】GStreamer基础教程16——平台相关的element的更多相关文章

  1. Android程序开发0基础教程(一)

    程序猿学英语就上视觉英语网 Android程序开发0基础教程(一)   平台简单介绍   令人激动的Google手机操作系统平台-Android在2007年11月13日正式公布了,这是一个开放源码的操 ...

  2. Python基础:获取平台相关信息

    Windows 10家庭中文版,Python 3.6.4, 本文介绍了使用os.platform.sys三个模块获取Python程序的运行平台相关的信息. os模块:提供 各种各样的操作系统接口 os ...

  3. 4412开发板Android教程——Android平台简介

    本文转自迅为开发板论坛:http://www.topeetboard.com Android和IOS Android的历史 Android公司 2005年Google收购成立22个月的Android公 ...

  4. Java基础教程(16)--注解

    一.注解基础知识 1.注解的格式   最简单的注解就像下面这样: @Entity   @符号指示编译器其后面的内容是注解.在下面的例子中,注解的名称为Override: @Override void ...

  5. iOS开发零基础教程之生成git所需的SSH keys

    在我们github看到了一个不错的第三方库时,可能我们想把他git clone到本地,我们需要复制他的SSH URL,如下图: 复制完地址之后,我们需要打开终端,然后输入命令: git clone + ...

  6. Ruby 基础教程1-6

    1.循环实现方法 循环语句 (while;for; loop,until) 循环方法(times,each) 2.for           for 变量 in 对象             主体   ...

  7. Chrome扩展开发基础教程(附HelloWorld)

    1 概述 Chrome扩展开发的基础教程,代码基于原生JS+H5,教程内容基于谷歌扩展开发官方文档. 2 环境 Chrome 88.0.4324.96 Chromium 87.0.4280.141 B ...

  8. Java基础教程(18)--继承

    一.继承的概念   继承是面向对象中一个非常重要的概念,使用继承可以从逻辑和层次上更好地组织代码,大大提高代码的复用性.在Java中,继承可以使得子类具有父类的属性和方法或者重新定义.追加属性和方法. ...

  9. 【GStreamer开发】GStreamer基础教程10——GStreamer工具

    目标 GStreamer提供了一系列方便使用的工具.这篇教程里不牵涉任何代码,但还是会讲一些有用的内容: 如何在命令行下建立一个pipeline--完全不使用C 如何找出一个element的Capab ...

随机推荐

  1. Intel 80386 CPU

    一.80386 概述 80386处理器被广泛应用在1980年代中期到1990年代中期的IBM PC相容机中.这些PC机称为「80386电脑」或「386电脑」,有时也简称「80386」或「386」.80 ...

  2. POJ 1927 Area in Triangle

    Area in Triangle Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 1674   Accepted: 821 D ...

  3. Kindle Touch 修砖手札

    首先是网上的修砖教程: 最近有多人反映按照修砖程序走过后依然板砖,和碎平联系和WA沟通后对帖子作新的修改. 新教程直接使用5.1.2的镜像,特别说明. 特别感谢kn007的专业指导 小白帖子现为简化过 ...

  4. 创建一个简单tcp服务器需要的流程

    1.socket创建一个套接字 2.bind绑定ip和port 3.listen使套接字变为可以被动链接 4.accept等待客户端的链接 5.recv/send接收发送数据

  5. [CF 718C] Sasha and Array

    传送门 Solution 用线段树维护矩阵 第一个操作相当于区间乘 第二个操作相当于区间求和 Code  #include<bits/stdc++.h> #define ll long l ...

  6. 2019UNCTF竞技赛部分writeup

    Reverse unctf_babyre2 这题flag分为两部分,第一部分每四个字符一组打包成int后,每次把四个int传入函数,后三个参数异或后先以每位为索引查表,将新数据进行循环移位.异或,将结 ...

  7. fdconnection自动重连

    fdconnection自动重连 1)设置 FDConnection1.ResourceOptions.AutoReconnect := True; 控制自动连接的恢复. 使用AutoReconnec ...

  8. pythonw.exe不能用

    其实可以直接执行python目录下的Lib/idlelib/idle.bat即可,对于非安装版的python来说开始菜单是找不到启动快捷方式的.

  9. HearthBuddy的class276以及class247

    使用de4dot-cex反编译原版的hearthbuddy得到的 链接: https://pan.baidu.com/s/1hT79LpIjbyvODsjnkSe_5A 提取码: iemx class ...

  10. Java 从入门到进阶之路(十六)

    在之前的文章我们介绍了一下 Java 中类的多态,本章我们来看一下 Java 中类的内部类. 在 Java 中,内部类分为成员内部类和匿名内部类. 我们先来看一下成员内部类: 1.类中套类,外面的叫外 ...