目标

虽然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. JS学习之--比较两个Object数组是否相等

    一.问题 在js中是不能直接用“==”或者“===”来计算两个数组是否相等的,那么就需要对数组的值进行比较: 二.次解决方案 对于比较两个数组次要的方法有如下几种,为什么说是次要解决方案呢?因为它不能 ...

  2. GSS4 D - Can you answer these queries IV

    //给你一个序列,有两种操作: //1.给定x和y,将区间[x,y]内的数开方 //2.询问区间和 // // 因为一个longlong类型的数最多开6次方就变成了1,所以对于1操作,我们暴力修改, ...

  3. 10分钟教你用python 30行代码搞定简单手写识别!

    欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 手写笔记还是电子笔记好呢? 毕业季刚结束,眼瞅着2018级小萌新马上就要来了,老腊肉小编为了咱学弟学妹们的学习,绞尽脑汁准备编一套大学秘籍, ...

  4. Angular发送广播和接收广播

    home.module.ts import {BroadcastService} from "../broadcast.service"; @NgModule({ imports: ...

  5. linux 日志写入到指定文件中

    php  /data/xxx/aaa.php > test.log 2>&1 >覆盖, >>追加 2>&1 表示不仅命令行正常的输出保存到test. ...

  6. Pytest权威教程08-使用tmp目录和文件

    目录 使用tmp目录和文件 tmp_path Fixture方法 tmp_path_factory Fixture方法 tmpdir Fixture方法 tmpdir_factory Fixture方 ...

  7. 【多线程与并发】:Java中的锁

    锁的概念 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁可以防止多个线程同时访问共享资源(但有些锁可以允许多个线程并发的访问共享资源,如读写锁). 在JDK1.5之前,Java是通过sync ...

  8. ssh端口映射总结

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/boliang319/article/det ...

  9. 关于PHP中token的生成的解析

    背景 很多时候我们需要用 token 来作为一些标识, 比如: 一个用户登录后的认证标识. 实现方式 md5 的方式: $v = 1; // 自己定义的 需要hash 的value 值 $key = ...

  10. http://stblog.baidu-tech.com/?p=1684) coredump调试记录 - PHP篇 原创: 扶墙 贝壳产品技术 今天

    http://stblog.baidu-tech.com/?p=1684) coredump调试记录 - PHP篇 原创: 扶墙 贝壳产品技术 今天