我一直在尝试使用Socket.io和Node.js麦克风库创建Node.js音频流脚本。
问题是,当SoX / ALSA仍在录制音频时,Socket.io不会将音频传输到远程服务器。
audio-stream-tx(客户端):
var io = require('socket.io-client');
var ss = require('socket.io-stream');
var mic = require('microphone');
var fs = require('fs');
var socket = io.connect('ws://localhost:25566');
var stream = ss.createStream();
ss(socket).emit('stream-data', stream);
mic.startCapture();
mic.audioStream.pipe(stream);
process.on('SIGINT', function () {
mic.stopCapture();
console.log('Got SIGINT. Press Control-D to exit.');
});
audio-stream-rx(服务器):
var io = require('socket.io')();
var ss = require('socket.io-stream');
var fs = require('fs');
var port = 25566;
io.on('connection', function (socket) {
ss(socket).on('stream-data', function(stream, data) {
console.log('Incoming> Receiving data stream.');
stream.pipe(fs.createWriteStream(Date.now() + ".wav", { flags: 'a' }));
});
});
io.listen(port);
microphone library会产生SoX / ALSA命令(取决于平台)来录制麦克风的音频。上面的脚本工作正常。只是在调用mic.stopCapture()
后,音频数据才会传送到流。
是否有一种解决方法可以在调用mic.startCapture()
时强制socket.io-stream传输音频数据?