gpt4 book ai didi

node.js - 在 node.js 中使用 socket.io 通过 webrtc 广播实时音频

转载 作者:搜寻专家 更新时间:2023-11-01 00:01:23 25 4
gpt4 key购买 nike

我正在尝试使用 webrtc 通过 getUserMedia() 获取音频并使用 socket.io 将其发送到服务器(socket.io 支持音频、视频、二进制数据),然后服务器将其广播到所有连接的客户端。问题是当流到达连接的客户端时,它被转换为 JSON 对象而不是媒体流对象。所以我无法发送音频我也尝试过 socket.io-stream 模块,但我没有成功。你能帮我正确捕获音频流并将其发送到所有连接的客户端吗?

这里是发送数据的客户端代码

navigator.getUserMedia({audio: true, video: false}, function(stream) {
video.src = window.URL.createObjectURL(stream);
webcamstream = stream;
media = stream; /// here the datatype of media is mediaStream object
socket.emit("sendaudio", media);
}, function(e){
console.log(error);
});

接收客户端时的代码如下

socket.on('receiveaudio' , function(media)
{
console.log(media); //but here i am receiving it as a simple object
other.src= media;
});

最佳答案

我从 here 复制了我的答案。

此示例向您展示如何使用 MediaRecorder 上传音频,然后使用 socket.io 转发它。此代码只会在您调用 mediaRecorder.stop() 后广播。您可以选择在 ondataavailable 内部进行广播。如果这样做,您可能希望将 timeslice 传递给 mediaRecorder.start(),这样它就不会如此频繁地触发 ondataavailable .

这个解决方案不是真正的实时,但我认为它会帮助回来找到这个问题的人。

客户端代码

var constraints = { audio: true };
navigator.mediaDevices.getUserMedia(constraints).then(function(mediaStream) {
var mediaRecorder = new MediaRecorder(mediaStream);
mediaRecorder.onstart = function(e) {
this.chunks = [];
};
mediaRecorder.ondataavailable = function(e) {
this.chunks.push(e.data);
};
mediaRecorder.onstop = function(e) {
var blob = new Blob(this.chunks, { 'type' : 'audio/ogg; codecs=opus' });
socket.emit('radio', blob);
};

// Start recording
mediaRecorder.start();

// Stop recording after 5 seconds and broadcast it to server
setTimeout(function() {
mediaRecorder.stop()
}, 5000);
});

// When the client receives a voice message it will play the sound
socket.on('voice', function(arrayBuffer) {
var blob = new Blob([arrayBuffer], { 'type' : 'audio/ogg; codecs=opus' });
var audio = document.createElement('audio');
audio.src = window.URL.createObjectURL(blob);
audio.play();
});

服务器代码

socket.on('radio', function(blob) {
// can choose to broadcast it to whoever you want
socket.broadcast.emit('voice', blob);
});

关于node.js - 在 node.js 中使用 socket.io 通过 webrtc 广播实时音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30520661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com