2013-10-11 47 views
1

我试图从节点中的流(从子进程创建)中读取大量的二进制数据。我正在使用stdout.on('data')事件来获取数据。
无论我搜索多少,我似乎都无法找到传入回调的参数的任何文档。 typeof(data)说这是一个对象,但从我可以告诉,它只是一个数组。在NodeJS中读取二进制数据的连续流

它是一个数组吗?或者一个字符串?无论如何,我怎样才能得到一个字节数组?
这里是我的代码:

var childProc = require('child_process'), 
    spawn = childProc.spawn; 

// /home/ubuntu/bin/ffmpeg -f video4linux2 -r 1 -s 640x480 -i /dev/video0 -c:v rawvideo -f rawvideo -pix_fmt rgb8 - 

var streamProc = spawn('/home/ubuntu/bin/ffmpeg', [ 
    '-f', 'video4linux2', 
    '-r', '1', 
    '-s', '640x480', 
    '-i', '/dev/video0', 
    '-c:v', 'rawvideo', 
    '-f', 'rawvideo', 
    '-pix_fmt', 'rgb24', 
    '-' 
    ]); 

streamProc.stdout.on('data', function(data) { 

    var bytes = []; 

    //Do some magical conversion here to populate the array 

    //debugger; 
    console.log('OUT: ' + bytes.join()); //Just some debugging steps 
}); 

streamProc.stderr.on('data', function(data) { 
    //debugger; 
    if(process.argv.indexOf('showerr') != -1) 
     console.log('ERR: ' + data); 
}); 

streamProc.on('close',function(exitCode) { 
    console.log('EXT: Program exited with code ' + exitCode); 
}); 

我失去了一些东西明显?

回答

1

这是Buffer例如

而且看看NodeBasicFFMPEGffmpeg-nodenode-fluent-ffmpeg

注意,“数据”事件给你只是一个数据块,您可能需要使用自己的东西重新组装起来像bufferlist

+0

我可以仔细看看,但我已经看过FFMPEG的大部分节点模块。我需要一个可以在ARM机器上工作的程序,并且我决定将它作为子进程写出来会更容易。 –

+0

这可能只是我愚蠢,但不应该'typeof(data)'返回'缓冲',如果它是从一个类内部创建的? –

+0

data.constructor.name =='Buffer'。 typeof总是返回对象的对象,尝试它与函数F(){this.foo = 1; }; f = new F(); console.log(typeof(f))' –