我需要让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中时,它会抛出
“错误的管道语法”
警告。非常感谢您为解决此问题提供的帮助。
答案 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)