3

我正在使用 GStreamer 设置我的第一个应用程序,其中一个要求是必须优化环境,因此没有图形界面。我在没有图形的 Pandaboard (ARMv7 - TI OMAP4 - Rev 3.2) 上运行 Arch Linux。只是文本终端。

我现在想做的就是播放一部电影。第二步是定制媒体播放器的快速原型。

作为 GStreamer 的初学者,我可能会做一些毫无意义的事情,真的,但是http://docs.gstreamer.com/display/GstSDK/Basic+tutorials上的所有示例都可以在板上正确编译,但它们都不起作用.

此外,像 gst-inspect-0.10 和 gst-launch-0.10 这样的所有命令都失败了。

问题是:

  1. 是否可以让 GStreamer 从纯 shell 工作?
  2. 并创建一个使用在纯 shell 中工作的 GStreamer 的应用程序?

非常感谢!

任何帮助高度赞赏。

4

3 回答 3

9

如果您意识到发布者是嵌入式系统专家,那么这个问题并不像听起来那么奇怪。

许多加速的片上系统设计都有专用的、加速的、在某些情况下与 DRM 隔离的视频输出硬件和子系统。这些与“图形用户界面”显示完全无关——尽管它们经常从它们那里窃取内存。(当存在 GUI 时,硬件合成器叠加在另一个之上是很常见的。这意味着您可以在电影上看到屏幕显示,但不能破解盒子的 OSD 来做例如,来自受 DRM 保护的内容的屏幕抓取。)

所以,发帖人很可能会说,“我必须通过 SSH 连接到这个生锈的桶,而且 HDMI 端口还不能工作,出于某种该死的原因。我至少可以判断加速视频接收器是否工作,这样我就可以告诉我的项目经理,今年我们可以给人们放圣诞节假?”

然而,应该做的第一件事是验证纯软件解复用器和纯软件解码器是否工作。然后,测试硬件加速解码器,然后测试硬件加速解复用器(如果有的话)。只有这样,您才能测试硬件加速的视频渲染接收器。

要进行这样的零碎测试,您需要熟悉一个名为“gst-launch”的命令行工具。要找出可用的部件,您还需要习惯“gst-inspect”。最后,您需要在某处安装 GraphViz 并学习如何让 GStreamer 转储“.dot”文件调试图以供检查。

您的测试应该从实例化读取的文件开始并将其转储到遗忘中,如下所示:

gst-启动文件rc location=foo.mkv !假水槽

然后将其解复用为音频和视频流,并将它们中的每一个都扔掉:

gst-启动文件rc location=foo.mkv !队列 !matroskademux 名称=demux 解复用器。!队列 !fakesink 解复用器。!队列 !假水槽

相信我,语法从那里变得更加神秘。这些符号中没有一个符合您的预期,包括空格。请仔细阅读文档。基本上, !是“连接”,“.name”表示“名称的输入端”,“名称”。表示“名称的输出端”,空格的作用完全取决于它的另一端。您必须阅读大量示例并使用它一段时间才能感觉可用,这就是它的工作原理。我强烈建议将长启动行放入 shell 脚本中,以便您可以清理它们并使用变量替换。

完整的解码和渲染通常看起来像这样:

gst-启动文件rc location=foo.mkv !队列 !matroskademux 名称=demux 解复用器。!队列 !vp8dec !队列 !视频转换!队列 !自动视频接收器解复用器。!队列 !作品!队列 !音频转换!音频重采样!队列 !自动音频接收器

......任何比这更复杂的事情都会变得非常可怕。好有趣!

我有几个建议:

  1. 向头部射击 GStreamer 0.10,直到它死了,死了,死了。
  2. 永远不要使用早于 GStreamer 1.3.6 的任何东西来进行嵌入式系统工作。曾经。曾经。严重地。
  3. 如果可能,请使用 GStreamer 1.8.2 或更新版本。
  4. 熟悉硬件加速的 GStreamer 分支和副项目(尤其是 IMX6)发生的奇怪历史。
  5. 在早期测试期间,使用“aasink”在控制台上将视频/图像渲染为 ASCII 动画。
  6. 试图通过多播将 Vorbis 或 Theora 推出是疯狂的。压缩字典是可变的,不是固定的,但它们没有在流中编码。将它们移动到带外的机制是可怕且不完整的,如果您想尝试将它们干扰到 SDP 文件中,情况会更糟。等待大量无关库和六个 RFC 的重大更新,或者选择不同的格式。

第 5 条让我们回到了更字面意义上的原始问题——“我想看一部没有 GUI 的电影”。

实际上,您可以使用 ASCII 艺术视频渲染接收器“aasink”来真正做到这一点。默认情况下,它并非在所有发行版中都可用,您可能必须构建它。事实上,您不仅应该计划完全重新配置和重建所有 GStreamer,还应该计划尽可能多地重新配置和重建它的支持库,并针对您的目标进行优化。

如果打开它,您将在终端上获得视频流的“矩阵”式视图,前提是数据速率足够快,您的终端仿真相当完整,您记得运行一次“重置”命令一段时间,您的终端将调整为小尺寸。

但是,除非音频传输到某个地方,否则您的图表仍会停止。为此,还有“monoscope”,它将音频渲染到波形视图。但这通常需要一个 GUI……除非……看看这是怎么回事?您可以构建一个 gst-launch 行,将视频和音频渲染为 ASCII 序列,方法是使用其中一个合成器插件来覆盖它们。可怕,但令人满意!

希望那些帮助!和其他人一样,请记住,如果海报的问题对您的桌面没有意义,它可能仍然对其他东西有很大的意义。

于 2017-02-18T01:21:36.557 回答
1

如果基本教程没有运行,那么您可能必须检查是否所有元素都已正确创建。

“他们都没有工作”是什么意思......?
您得到的错误是什么,或者只是黑屏。它必须打印一些日志,否则程序会在一段时间后停止而不显示任何内容。

检查autovideosink元素是否可用并正确创建。

ximagevsinkAns 1. 我认为,如果图形界面 X ( ) 不可用,将无法显示视频

Ans 2. 如果基本教程不能正常工作,我认为应用程序不会。

于 2013-08-16T05:22:37.883 回答
0

简短回答:1. 是 2. 是

稍长一点:我不太明白你在问什么?您想播放电影,但不使用图形?无论如何,通常只有 GStreamer 视频接收器会对环境的 GFX 端做任何事情(比如 X 和 ximagesink),而大多数其他元素几乎只是 C 代码,做诸如复用/解复用、编码/解码和不同管道之类的事情- 配件(阀门、三通、漏斗等)

于 2013-08-15T21:18:19.170 回答