binaryjs - nodejs mp3音频流和播放

时间:2014-02-05 11:27:49

标签: javascript node.js audio streaming

我想将.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'
       });
});

服务器:

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);
            });
        });
    });

我得到了我的二进制数据流并希望它们 使用player.js之类的工作 使用nodejs获得直接音频输出。

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

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

1 个答案:

答案 0 :(得分:0)

所以对于遇到类似问题的每个人都要解决:

  1. 尝试在收集数据时立即从数据阵列创建新的BlobFile,而不是在结束时
  2. 将Blob读作ArrayBuffer
  3. 解码音频数据
  4. 播放他们
  5. 这是一个片段:

       ....
    
       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()
            });
    
    
        ....
    

    没有经过测试,可能没有工作,但我希望它会帮助你们中的一些人