首页 > 解决方案 > 需要将rtsp视频输出到stdout

问题描述

我需要让 gstreamer 从 rtsp uri 获取视频并将视频发送到标准输出,以便模拟 fluent ffmpeg 的类似行为。

我可以在终端上执行此操作(并获取原始二进制数据),但是在节点内部时,我得到:

“错误的管道语法错误”。

gst-launch-1.0 uridecodebin silent=true uri=rtsp://192.168.x.x:8800/test.stm ! fdsink fd=1 

当上述命令与“autovideosink”一起使用时,我可以观看视频。

我需要使用 stdout 的原因是因为现有应用程序使用 fluent-ffmpeg 并且它使用“pipe:1”,这基本上是相同的。我希望尽可能减少对现有应用程序的干扰。

在节点应用程序中,我通过“spawn”命令调用 gst-lauch-1.0,如下所示:

var gstreamerProc = spawn(command, args, options);

在哪里:

 command: '/usr/bin/gst-launch-1.0'
 args:     ["uridecodebin","silent=true","uri=rtsp://192.168.x.x:8800/test.stm","!","queue","! fdsink fd=0"]
 options:  {"captureStdout":false,"niceness":0}"

从原始的 fluent-ffmpeg/lib/processor.js 中,此注释描述了“选项”中的值

  /*
   :
   * The 'options' argument may contain the following keys:
   * - 'niceness': specify process niceness, ignored on Windows (default: 0)
   * - `cwd`: change working directory
   * - 'captureStdout': capture stdout and pass it to 'endCB' as its 2nd argument (default: false)
   * - 'stdoutLines': override command limit (default: use command limit)
   *
   :
   */

正如我所说,上面的命令行在常规终端上工作,没有错误,没有警告,当它被放置在 Node.js 中时,它会抛出

“错误的管道语法”

警告。非常感谢解决此问题的任何帮助。

标签: node.jsstdoutgstreamer

解决方案


好吧,我知道出了什么问题。我在终端和 node.js 应用程序中设置GST_DEBUG_FILE=/tmp/gst_debug.logGST_DEBUG=*:7提高了日志记录级别。并注意到以下内容: 在此处输入图像描述

如您所见,gstreamer 解析不喜欢转义的空格。然后我设置shell: true传递给spawn的选项参数,错误消失了。谢谢你。


推荐阅读