如何桥接字节数组和音频流?

时间:2015-05-31 14:48:22

标签: node.js audio streaming bytearray audio-streaming

我正在为我的流媒体应用创建中继服务器。基本上,它应该像这样工作:

  1. 客户端A通过套接字将麦克风音频流式传输到服务器
  2. 服务器a获取流并可能暂时将其存储在某个地方?(不确定)
  3. 客户端B从服务器获取流并播放它。
  4. 基本上,我已完成第一部分(将麦克风音频发送到服务器):

    while(isStreaming)
    {
        minBufSize = recorder.read(buffer, 0, buffer.length);
        mSocket.emit("stream", Arrays.toString(buffer));
    }
    

    完成第三部分,只是播放音频:

    mediaplayer.reset();
    mediaplayer.setDataSource("http://192.168.1.2:1337/stream");
    mediaplayer.prepare();
    mediaplayer.start();
    

    现在我不确定如何桥接传入的字节数组和流。这是我当前的服务器代码:

    var ms = require('mediaserver');
    // from server to Client B
    exports.letsStream = function(req, res, next) {
        ms.pipe(req, res, "sample_song_music_file.mp3");
    };
    
    // from Client A to server
    exports.handleSocketConnection = function(socket)
    {
        console.log("connected");
        socket.on('stream', function(data)
        {
            var bytes = JSON.parse(data);
            console.log("GETTING STREAM:" + bytes);
        });
    }
    

    有什么建议吗?如何直接传输该字节数组?

1 个答案:

答案 0 :(得分:0)

mediaserver模块仅支持流式传输现有音频,而不支持" live"流。这不会奏效。

实现这三项任务的一种方法是:

  1. https://www.npmjs.com/package/microphone将麦克风音频作为字节流读取。
  2. http://binaryjs.com/处理通过websockets将字节流传输到服务器然后发送到客户端。如果设置了两个单独的路径,一个用于发送数据,一个用于接收。将数据从一个流发送到另一个流。
  3. 使用https://github.com/TooTallNate/node-speaker在客户端B上播放传入的PCM数据流