逐行解析node.js child_process的STDERR输出

时间:2011-12-21 01:45:49

标签: node.js ffmpeg

我正在使用FFMPEG和Node.js编写一个简单的在线转换工具。我正在试图弄清楚如何解析从FFMPEG接收的转换输出的每一行,并仅在浏览器中显示客户端的相关结果。在我的情况下,我想要FFMPEG在命令行上吐出的编码时间计数器。

到目前为止我的功能是:

function metric(ffmpeg, res) { 

  ffmpeg.stdout.on('data', function(data) {
     res.writeHead(200, {'content-type': 'text/html'});
     res.write('received upload:\n\n');
     console.log(data);
  });

  ffmpeg.stderr.on('data', function (data) {
     var temp += data.toString();
            var lines = temp.split('\n');

            //for debugging purposes
            for(var i = 0;i<lines.length;i++) {
                console.log('this is line: ' + i + '----' + lines[i]);
            }
     res.write(lines);
  });

  ffmpeg.on('exit', function (code) {
     console.log('child process exited with code ' + code);
     res.end();
  });     
}

最终返回的是多个数组,每个数组都包含来自前一个数组的数据以及下一个数据块。例如,函数返回数组1:{0 =&gt; A,1 =&gt; B},数组2:{0 =&gt; A,1 =&gt; B,2 =&gt; C},数组3:{ 0 =&gt; A,1 =&gt; B,2 =&gt; C,3 =&gt; D},依此类推。

我对Node很陌生,所以我可能会错过一些简单的东西。任何指导都将非常感谢!

1 个答案:

答案 0 :(得分:0)

这应该做的工作:

var buff = new Buffer(data);
console.log(buff.toString('utf8'));

有关缓冲区的更多信息,请参阅doc:http://nodejs.org/docs/v0.4.2/api/buffers.html

的链接