【发布时间】:2017-10-19 21:52:33
【问题描述】:
所以我看到了很多关于 FFMPeg 的主题,它是我今天学到的一个很棒的工具,但是我花了一天时间完善命令,现在有点卡在 NodeJS 部分。
本质上,该命令执行以下操作:从 Mac OSX 网络摄像头获取输入,然后将其流式传输到网络套接字。现在我查看了很多 NodeJS 库,但找不到一个满足我需要的库;或者不明白怎么做。这是我正在使用的命令示例:
ffmpeg -f avfoundation -framerate 30 -video_size 640x480 -pix_fmt uyvy422 -i "0:1" -f mpegts -codec:v mpeg1video -s 640x480 -b:v 1000k -bf 0 http://localhost:8081/stream
这可以满足我在流式传输方面所需的一切,但我希望通过 NodeJS 调用它,然后能够监控日志并解析返回的数据,例如:
frame= 4852 fps= 30 q=6.8 size= 30506kB time=00:02:41.74 bitrate=1545.1kbits/s speed= 1x \r
并使用它来获取一个 JSON 数组,以便我输出到网页。
现在我所做的只是研究实际解析数据的方法,并且我已经查看了很多其他类似的答案,但我似乎无法拆分/替换/正则表达式。除了一长串,我什么也得不到。
这是我正在使用的代码(NodeJS):
var ffmpeg = require('child_process').spawn('/usr/local/Cellar/ffmpeg/3.3.1/bin/ffmpeg', ['-f', 'avfoundation', '-framerate', '30', '-video_size', '640x480', '-pix_fmt', 'uyvy422', '-i', '0:1', '-f', 'mpegts', '-codec:v', 'mpeg1video', '-s', '640x480', '-b:v', '1000k', '-bf', '0', 'http://localhost:8081/test']);
ffmpeg.on('error', function (err) {
console.log(err);
});
ffmpeg.on('close', function (code) {
console.log('ffmpeg exited with code ' + code);
});
ffmpeg.stderr.on('data', function (data) {
// console.log('stderr: ' + data);
var tData = data.toString('utf8');
// var a = tData.split('[\\s\\xA0]+');
var a = tData.split('\n');
console.log(a);
});
ffmpeg.stdout.on('data', function (data) {
var frame = new Buffer(data).toString('base64');
// console.log(frame);
});
我尝试使用新行、回车符、空格、制表符进行拆分,但我似乎无法获得可以使用的基本位数组。
另外需要注意的是,您是否会注意到日志是通过 stderr 返回的,我在网上看到过,显然很多人都这样做了?所以我不确定这是怎么回事?但代码是 sdterr 回调。
非常感谢任何帮助,因为我真的对自己做错了什么感到困惑。
谢谢。
【问题讨论】:
-
我认为回调中的 stderr 类型是“readable.stream”......你不应该将它用作字符串..尝试查看流接口,然后将 CB.stderr 作为流使用看看是否有帮助
-
谢谢,是可读流,只是不知道为什么要用stderr输出,但是实际返回是解析不了的。
标签: json node.js parsing ffmpeg spawn