小编Pet*_*oek的帖子

从NodeJS服务器获取实时流式音频到客户端

我需要从1个客户端到服务器到多个侦听器客户端的实时实时音频流.

目前我从客户端进行录音工作,并通过socket.io将音频流传输到服务器.服务器接收此数据,并且必须将音频(也通过socket.io?)传输到想要侦听此流的客户端.它必须尽可能实时(最小化延迟).

我正在使用GetUserMedia来录制麦克风(浏览器兼容性在这里并不重要).我希望客户端使用HTML5音频标签来收听流.在服务器上接收的数据是打包在带有audio/wav类型的blob中的块(当前由700打包).

这是我将代码发送到服务器的代码:

mediaRecorder.ondataavailable = function(e) {
    this.chunks.push(e.data);
    if (this.chunks.length >= 700)
    {
        this.sendData(this.chunks);
        this.chunks = [];
    }
};
mediaRecorder.sendData = function(buffer) {
    blob = new Blob(buffer, { 'type' : 'audio/wav' });
    socket.emit('voice', blob);
}
Run Code Online (Sandbox Code Playgroud)

在服务器上,我能够以相同的方式将块发送到客户端:

socket.on('voice', function(blob) {
    socket.broadcast.emit('voice', blob);
});
Run Code Online (Sandbox Code Playgroud)

在客户端我可以这样玩:

var audio = document.createElement('audio');
socket.on('voice', function(arrayBuffer) {
    var blob = new Blob([arrayBuffer], { 'type' : 'audio/wav' });
    audio.src = window.URL.createObjectURL(blob);
    audio.play();
});
Run Code Online (Sandbox Code Playgroud)

这适用于我发送的第一个块的块,但是你不允许继续更改为audio.src到新的URL源,所以这不是一个有效的解决方案.

我想我必须在服务器上创建某种流,我可以在侦听客户端上放入HTML5的音频标签,但我不知道如何.接收到的带有块的blob应该实时附加到此流.

这样做的最佳方法是什么?我是从客户端麦克风到服务器吗?

html5 node.js html5-audio socket.io webrtc

11
推荐指数
1
解决办法
1万
查看次数

标签 统计

html5 ×1

html5-audio ×1

node.js ×1

socket.io ×1

webrtc ×1