binaryjs – nodejs mp3audiostream并播放

我想将.mp3文件从客户端stream式传输到服务器,都使用NodeJS。
我正在使用binaryjs来传输文件。

客户:

var BinaryClient = require('binaryjs').BinaryClient; var fs = require('fs'); var client = BinaryClient('ws://localhost:9000'); client.on('open', function(stream){ client.send(fs.createReadStream('music.mp3'), { name : 'music' }); }); 

服务器:

 var BinaryServer = require('binaryjs').BinaryServer; var server = BinaryServer({port: 9000}); server.on('connection', function(client){ client.on('stream', function(stream, meta){ var data = []; stream.on('data', function(chunk){ console.log('Recieve Chunk: ' + data.length); data.push(chunk); }); stream.on('end', function() { console.log('complete data' + data); }); }); }); 

我得到了我的二进制数据stream,并希望他们
使用像player.js这样的东西来获得与nodejs的直接audio输出。

但是我不知道如何将二进制数据转换成可用的stream文件
与像player.js这样的解决scheme一起工作 。

希望有人能帮助我得到一个工作的解决scheme。
提前致谢。

所以对于有类似问题的人来解决:

  1. 尝试在收集数据时立即从数据arrays创build一个新的BlobFile,而不是在最后
  2. 将Blob读为ArrayBuffer
  3. 解码audio数据
  4. 玩他们

这里是一个片段:

  .... var context = new (window.AudioContext || window.webkitAudioContext)(); var fileReader = new FileReader(); var source = null; var audioBuffer = null; var data = []; stream.on('data', function(chunk){ console.log('Recieve Chunk: ' + data.length); data.push(chunk); var blob = new Blob(streamData); fileReader.readAsArrayBuffer(blob); context.decodeAudioData(buf, function(buffer) { audioBuffer = null; audioBuffer = buffer; source = context.createBufferSource(); source.buffer = audioBuffer; source.connect(context.destination); source.start() }); .... 

没有经过testing,显然不能工作,但我希望这会帮助你们中的一些人