node.js - 使用管道字符 |与 child_process 产卵

标签 node.js ffmpeg child-process

我在树莓派上运行 nodejs,我想运行一个子进程来生成网络摄像头流。

在 Node 外我的命令是:

raspivid -n -mm matrix -w 320 -h 240 -fps 18 -g 100 -t 0 -b 5000000 -o - | ffmpeg -y -f h264 -i - -c:v copy -map 0:0 -f flv -rtmp_buffer 100 -rtmp_live live "rtmp://example.com/big/test"

对于 child_process,我必须分解每个参数

var args = ["-n", "-mm", "matrix", "-w", "320", "-h", "240", "-fps", "18", "-g", "100", "-t", "0", "-b", "5000000", "-o", "-", "|", "ffmpeg", "-y", "-f", "h264", "-i", "-", "-c:v", "copy", "-map", "0:0", "-f", "flv", "-rtmp_buffer", "100", "-rtmp_live", "live", "rtmp://example.com/big/test"];
camera.proc = child.spawn('raspivid', args);

但是它在 | 字符上窒息:

error, exit code 64
Invalid command line option (|)

如何使用这个管道字符作为参数?

最佳答案

这已在另一个问题中得到回答:Using two commands (using pipe |) with spawn

总而言之,对于 child.spawnargs 中的所有内容都应该是您的“raspivid”命令的参数。在您的情况下,管道及其后的所有内容实际上是 sh 的参数。

解决方法是调用 child.spawn('sh', args),其中 args 是:

 var args = ['-c', <the entire command you want to run as a string>];

关于node.js - 使用管道字符 |与 child_process 产卵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28968662/

相关文章:

node.js - Node-sass 不在 npm-start V6.0.0 上运行

javascript - 了解 node.js 的某些方面

node.js - 网络安全。我是否正确保护了我的 REST api? (node.js 表达)

node.js - gulp bourbon 无法导入 bourbon 引用

video - 为什么ffmpeg的v0、v1、v2还在积极开发中? ppa :jon-severinsson/ffmpeg? 发生了什么

FFMPEG 将 RTSP 转换为 RTMP 覆盖管道

即使在关闭其输入后,子进程也会挂起

windows - 对 'ff_put_pixels_clamped_mmx' 的 undefined reference

node.js - 在管理器/ worker 模式中使用子进程以确保线程安全时,Node.js 中是否需要锁定?

node.js - Nodejs child_process spawn get命令运行