需要将rtsp视频输出定向到stdout

时间:2019-04-18 22:59:54

标签: node.js stdout gstreamer

我需要让gstreamer从rtsp uri拍摄视频并将其发送到stdout,以便模拟流利的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中时,它会抛出

  

“错误的管道语法”

警告。非常感谢您为解决此问题提供的帮助。

2 个答案:

答案 0 :(得分:1)

不是.js专家-但我认为:

args:     ["uridecodebin","silent=true","uri=rtsp://192.168.x.x:8800/test.stm","!","queue","! fdsink fd=0"]

应为:

args:     ["uridecodebin","silent=true","uri=rtsp://192.168.x.x:8800/test.stm","!","queue","!","fdsink","fd=0"]

我认为您错过了一些",

答案 1 :(得分:1)

好吧,我弄清楚出了什么问题。我设置了<ComboBox x:Name="ComboBoxOperationMode" DisplayMemberPath="." /> GST_DEBUG_FILE=/tmp/gst_debug.log来增加终端和node.js应用程序中的日志记录级别。并注意到以下几点: enter image description here

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