如果您意识到发布者是嵌入式系统专家,那么这个问题并不像听起来那么奇怪。
许多加速的片上系统设计都有专用的、加速的、在某些情况下与 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 !队列 !视频转换!队列 !自动视频接收器解复用器。!队列 !作品!队列 !音频转换!音频重采样!队列 !自动音频接收器
......任何比这更复杂的事情都会变得非常可怕。好有趣!
我有几个建议:
- 向头部射击 GStreamer 0.10,直到它死了,死了,死了。
- 永远不要使用早于 GStreamer 1.3.6 的任何东西来进行嵌入式系统工作。曾经。曾经。严重地。
- 如果可能,请使用 GStreamer 1.8.2 或更新版本。
- 熟悉硬件加速的 GStreamer 分支和副项目(尤其是 IMX6)发生的奇怪历史。
- 在早期测试期间,使用“aasink”在控制台上将视频/图像渲染为 ASCII 动画。
- 试图通过多播将 Vorbis 或 Theora 推出是疯狂的。压缩字典是可变的,不是固定的,但它们没有在流中编码。将它们移动到带外的机制是可怕且不完整的,如果您想尝试将它们干扰到 SDP 文件中,情况会更糟。等待大量无关库和六个 RFC 的重大更新,或者选择不同的格式。
第 5 条让我们回到了更字面意义上的原始问题——“我想看一部没有 GUI 的电影”。
实际上,您可以使用 ASCII 艺术视频渲染接收器“aasink”来真正做到这一点。默认情况下,它并非在所有发行版中都可用,您可能必须构建它。事实上,您不仅应该计划完全重新配置和重建所有 GStreamer,还应该计划尽可能多地重新配置和重建它的支持库,并针对您的目标进行优化。
如果打开它,您将在终端上获得视频流的“矩阵”式视图,前提是数据速率足够快,您的终端仿真相当完整,您记得运行一次“重置”命令一段时间,您的终端将调整为小尺寸。
但是,除非音频传输到某个地方,否则您的图表仍会停止。为此,还有“monoscope”,它将音频渲染到波形视图。但这通常需要一个 GUI……除非……看看这是怎么回事?您可以构建一个 gst-launch 行,将视频和音频渲染为 ASCII 序列,方法是使用其中一个合成器插件来覆盖它们。可怕,但令人满意!
希望那些帮助!和其他人一样,请记住,如果海报的问题对您的桌面没有意义,它可能仍然对其他东西有很大的意义。