GStreamer学习十(GSteamer常见问题)

GStreamer是媒体播放器吗?

不,GStreamer是用于创建诸如媒体播放器,视频编辑器,流媒体广播器等应用程序的开发框架。这就是说,很不错的媒体播放器可以很容易地使用高层次的API,我们提供特别是当上了GStreamer上方内置了如GstPlayer或playbin和playbin3元素。

为什么GStreamer用C编写?为什么不使用C ++ / Objective-C / ...?

我们喜欢C。除了“个人喜好”外,还有很多技术原因使C在此项目中表现出色:

  • C非常便于携带。

  • C很快。

  • 对用C编写的库进行语言绑定很容易。

  • 由GObject对象提供的对象系统GLib以可移植且功能强大的方式在C中实现对象。该库提供自省和运行时动态类型。它是一个完整的OO系统,但没有语法糖。如果您想要糖,请看看 Vala

  • C的使用与Gtk +和GNOME很好地集成在一起。有些人很喜欢,但是GStreamer不需要Gtk +和GNOME。

还有历史原因:启动GStreamer时,C ++和*开源C ++编译器不像今天那样稳定和成熟,并且人们希望提供一定程度的API和ABI稳定性。

最后,我们喜欢C。如果您不喜欢,那很好。如果您仍然想在GStreamer上提供帮助,我们总是需要更多的语言绑定人员。

GStreamer中编写了哪些应用程序?

GStreamer从一开始就被设计为一种通用的多媒体框架,可用于编写各种多媒体应用程序。

当然,有大量的媒体播放应用程序,还有音频和视频捕获应用程序,它们将捕获的内容记录到文件或实时流式传输。音频CD和DVD备份应用程序。媒体格式转换和转码工具。流服务器,既适用于需要严格控制资源使用的小型嵌入式设备,也适用于以可伸缩性为关键的服务器。当然还有音频和视频编辑应用程序。

有关项目列表,请查看GStreamer项目网站上的应用程序列表

GStreamer是否支持我的媒体文件格式?

GStreamer是基于插件的,并且从一开始就设计为可扩展的,因此,只要有合适的插件可用,它就可以支持任何媒体格式。

它具有适用于所有常见媒体格式和数百种不常见媒体格式的解复用器,解析器和解码器。如果您在播放文件时遇到问题,请首先确保已安装所有必需的插件。

GStreamer旨在支持所有可能的格式,但这并不意味着开发人员已经设法实现了这一目标。如果启用了GStreamer的应用程序无法播放您的文件,则可以通过针对该格式提交增强请求来帮助我们解决该问题。如果有,请提供:

  • 链接到其他播放器,最好是开放源代码并在Unix上工作

  • 链接到格式说明。

  • 获取该格式的媒体文件进行测试的方法。

GStreamer及其插件的确切许可条款是什么?

所有GStreamer,包括我们自己的插件代码,均已获得GNU LGPL 2.1 许可。但是,我们用于某些插件的某些库在GPL下,这意味着这些插件不能由非GPL兼容应用程序使用。但是,它们之间的距离很少,而且相距甚远,并且对于这些GPL库,通常存在非GPL替代方案。

通常,GStreamer旨在仅使用LGPL或BSD许可的库,并且仅在没有可用的LGPL或BSD替代品时才使用GPL或专有库。

您可以在以下命令的输出中的“ 许可证”字段中看到插件的有效许可证:

gst-inspect-1.0 <plugin name>

GStreamer是声音服务器吗?

不,GStreamer不是声音服务器。但是,GStreamer确实具有支持当今大多数主要声音服务器的插件,包括pulseaudio,Jack等。

GStreamer是否可用于Linux以外的平台?

是的,GStreamer是一个跨平台的多媒体框架,可在所有主要操作系统上使用,包括但不限于Linux,Android,iOS,macOS,Windows和* BSD,并且有适用于Android,iOS,macOS的官方SDK二进制软件包。 Windows随每个GStreamer版本一起提供。

GStreamer与GNOME社区有什么关系?

GStreamer是一个独立的项目,但是传统上我们确实与GNOME社区有着密切的关系。我们的许多黑客都认为自己也是GNOME社区的成员。GStreamer正式与GNOME桌面捆绑在一起,因为许多GNOME应用程序都在使用它。当然,这完全不排除其他社区使用GStreamer。

GStreamer与KDE社区有什么关系?

GStreamer社区希望与KDE保持尽可能良好的关系,我们希望有一天KDE决定采用GStreamer作为其多媒体平台。GStreamer社区和KDE之间有时会有联系,并且各种KDE和Qt多媒体API都使用GStreamer。另外,一些KDE黑客已经创建了GStreamer的Qt绑定,制作了一个简单的视频播放器,并将其用于某些音频播放器(JuK和AmaroK)中。

我正在考虑将GStreamer输出添加到我的应用程序中...

那真的没有道理。GStreamer不是声音服务器,因此您不会直接输出到GStreamer,它也不是音频数据和各种音频接收器之间的中间API。在您的应用程序中使用GStreamer是一个基本的设计决策;没有简单的方法可以将数据从您的应用程序“传输”到GStreamer(当然,有,但是它们将保留用于特殊用例)。相反,您的应用程序必须使用或实现许多GStreamer元素,将它们串在一起,然后告诉它们运行。这样,数据将全部位于GStreamer管道的内部。

也就是说,可以编写一个特定于您的应用程序的插件,该插件可以获取音频或视频数据。

版本0.10和1.0有什么区别?

似乎有不同的GStreamer版本,例如0.10和1.0?那是怎么回事?

GStreamer-0.10和GStreamer-1.0是当前使用的主要版本“系列”。出于所有实际目的,您应该将它们视为两个完全不同的库,它们恰好具有相似的名称。它们可以并行安装,并且完全独立。

自2012年以来,GStreamer 1.x一直是主要的稳定产品系列。不再维护GStreamer 0.10。

对于0.10版本,您将需要0.10插件和绑定(gst-plugins 0.10.x,gst-ffmpeg 0.10.x,gst-python 0.10.x等),而对于1.0版本,则需要1.0插件和绑定(即gst-plugins-base 1.0.x,gst-plugins-good 1.0.x,gst-plugins-ugly 1.0.x,gst-plugins-bad 1.0.x,gst-ffmpeg 1.0.x,gst-python 1.0 。X)。每个主要版本的微型版本不必完全匹配,只有主要版本需要相同(即,当前的gst-plugins-good版本为1.0.6,而当前的GStreamer核心版本为1.0) .13)。GStreamer-1.0将不会看到或使用任何GStreamer-0.10插件,反之亦然。

所有GStreamer命令行工具的主要版本均带有后缀,例如gst-launch-1.0和gst-inspect-1.0。

应用程序将使用GStreamer-1.0或GStreamer-0.10,因为1.0和0.10 API / ABI不兼容。

奇数版本(例如0.9.x,0.11.x,1.3.x,1.5.x,1.7.x等)是不稳定的显影剂版本,通常不应使用。

如何从源代码安装GStreamer?

我们在自己的网站上(http://gstreamer.freedesktop.org/src/)提供发行版本的压缩包。

从源代码进行编译时,请确保将PKG_CONFIG_PATH 环境变量正确设置为安装前缀的libdir的pkgconfig子目录,以确保在针对GStreamer进行构建时可以选择新安装的GStreamer版本。例如,如果您使用默认前缀(/usr/local)配置了GStreamer ,则需要:

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

在构建GStreamer插件模块之前。在Linux上从源代码安装GStreamer之后,请运行sudo ldconfig以确保将找到新的库。

请注意,从源代码构建GStreamer并非易事,因为它具有来自多个模块的如此多的互连部件,这些部件必须全部正确安装并且必须在正确的版本中相互找到。

如果您已经从软件包中安装了GStreamer,则强烈建议您查找较新的软件包,而不是从源代码安装,或者升级到附带较新软件包的发行版。如果安装不正确,则从源代码安装到一个前缀中,而发行版软件包中又安装了另一个前缀可能会导致问题,而且任何人都很难在这种设置上提供帮助。

是否有预制的二进制文件?

是的,我们目前提供适用于Windows,OS / X,Android和iOS的预编译软件包

当前,我们不提供Linux发行版的软件包,而是依靠发行版。GStreamer软件包应可用于所有主要(和次要)发行版。

如何通过git获取GStreamer?请参阅此页面: https://gstreamer.freedesktop.org/dev/以进行git访问(匿名和开发人员)。

我的系统可以通过GStreamer播放声音吗?

您可以通过尝试播放正弦音来进行测试。为此,您需要将audiotestsrc元素链接到与您的硬件匹配的输出元素。音频输出插件的(不完整)列表是

  • pulsesink 用于Pulseaudio输出, PulseAudio运行于Microsoft WindowsPOSIX兼容系统(如Linux和FreeBSD)。PulseAudio是*软件,基于GNU宽通用公共许可证 (LGPL)2.1协议。

  • alsasink 用于ALSA输出

  • osssink和oss4sink用于OSS / OSSv4输出 (OSS:open sound system开发声音系统,被ALSA替代)

  • jackaudiosink 用于JACK输出, Jack(JACK Audio Connection Kit 的递归缩写)是一个专业级的声音服务(守护进程),它为声音和MIDI数据提供实时的、低延时的连接,有关的程序使用JACK的API。

  • autoaudiosink 用于自动音频输出选择

首先,在要使用的输出插件上运行gst-inspect-1.0,以确保已安装它。例如,如果您使用Pulseaudio,请运行

$ gst-inspect-1.0 pulsesink

并查看是否可以打印出该插件的一系列属性。

然后尝试通过运行来播放正弦音

$ gst-launch-1.0 audiotestsrc ! audioconvert ! audioresample ! pulsesink

看看你是否听到了什么。确保已调高音量,但也请确保音量不要太大并且没有戴耳机。

上一篇:GStreamer 1.18.4稳定的错误修复版本


下一篇:编译gstreamer for android