binaryjs - nodejs mp3音频流和播放

Mos*_*eed 5 javascript audio streaming node.js

我想将.mp3文件从客户端流式传输到服务器,两者都使用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'
       });
});
Run Code Online (Sandbox Code Playgroud)

服务器:

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);
            });
        });
    });
Run Code Online (Sandbox Code Playgroud)

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

但我不知道如何将二进制数据转换为可用的流文件
,该文件适用于像player.js这样的解决方案.

希望有人能帮助我找到一个有效的解决方案.
提前致谢.

kla*_*anm 0

所以对于有类似问题需要解决的大家:

  1. 尝试在收集数据时立即从数据数组创建一个新的 BlobFile,而不是在最后
  2. 将 Blob 作为 ArrayBuffer 读取
  3. 解码音频数据
  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()
        });


    ....
Run Code Online (Sandbox Code Playgroud)

未经测试,可能无法正常工作,但我希望它能对你们中的一些人有所帮助