0
我的应用程序应该从客户端传输Web音频,将其编码为MP3,然后再通过WebSocket将其发送回客户端。节点 - 我如何管道到一个新的可读流?
我目前可以编码和管到一个文件是这样的:
inbound_stream.pipe(encoder).pipe(fs.createWriteStream('audio.mp3'));
如果我已经在服务器上的文件,我可以做到这一点:
var mp3File = fs.createReadStream('audio.mp3');
mp3File.on('data', function(buffer){
io.sockets.emit('audio', { buffer: buffer });
});
然而,我想要实时访问编码的块,并将它们发送给客户端 - 而不是写入文件。
我想是这样的,有效的:
inbound_stream.pipe(encoder).pipe(newReadStream);
newReadStream.on('data', function(buffer){
io.sockets.emit('audio', { buffer: buffer });
});
我已经看了复式和变换流,但坦率地说,我仍然在学习和原型使我晕头转向。
我该怎么做?谢谢。
UPDATE
从@Nazar Sakharenko下面的解决方案当然不会是我想要的,而是实时编码开销似乎使这个inpossible,所以写编码的MP3,和预缓冲它似乎是唯一的(感谢各种人的建议)。
但是我仍然有这种方法的问题。新的问题在这里:
node.js - create a new ReadStream for a new file, when that file reaches a certain size
非常感谢,我非常感谢。 它的工作,但不幸的是编码卡住了流,意味着它不能实时使用。我想知道我是否更好地写入文件,然后使用增长文件在达到一定大小后进行流式处理。 – user3174541
我对MP3流不熟悉,可能你可以在内存中预先解压mp3的一些解码部分,并在最小尺寸解码后开始流式传输。 –
你能解释你的工作流程吗? –