使用SSL通过WebSocket将二进制流记录到WAV文件

时间:2015-12-16 18:36:18

标签: node.js websocket audio-recording

我有一个NodeJS服务器,它通过带有麦克风的客户端浏览器(Chrome)记录通过WebSocket流式传输的二进制数据(如WAV文件)。此 在非SSL连接(ws:// ...)上正常工作,但不在上通过SSL(wss:// ...) - 音频是完全静止的。

我想知道SSL加密是否在处理服务器上收到的二进制数据。

服务器

var WebSocketServer = require('ws').Server,
  wav = require('wav'),
  http = require('https');

var app = http.createServer({
  key: fs.readFileSync('test.key'),
  cert: fs.readFileSync('test.crt')
}).listen(9001);

var ws = new WebSocketServer({server: app});
ws.on('connection', function(client) {
  var fileWriter = new wav.FileWriter(myFilePath, {
    channels: 1,
    sampleRate: 48000,
    bitDepth: 16
  });

  var data = new Buffer(0);

  client.on('message', function(newData) {
    data = Buffer.concat([data, newData], data.length + newData.length);
  });

  client.on('close', function() {
    fileWriter.write(data);
    fileWriter.end();
  });
});

客户端(注意,客户端正在使用RecordRTC.js:http://recordrtc.org/RecordRTC.html,这些是将数据发送到服务器的主要部分)

var audioProcess = function(e) {
  // get binary audio data and send to server using the open stream
  var left = e.inputBuffer.getChannelData(0);
  stream.write(convertoFloat32ToInt16(left));
};

var convertoFloat32ToInt16 = function(buffer) {
  var l = buffer.length;
  var buf = new Int16Array(l);

  while (l--) {
    buf[l] = buffer[l]*0xFFFF;    //convert to 16 bit
  }
  return buf.buffer
};

提前感谢任何见解/解决方案!

1 个答案:

答案 0 :(得分:0)

我遇到了与网络套接字相同的问题,最后我使用了BinaryJS。创建一个https服务器,然后将二进制服务器附加到它。对我来说很好。