gpt4 book ai didi

javascript - 通过 websocket 传输音频,延迟低且无中断

转载 作者:太空宇宙 更新时间:2023-11-04 01:31:31 27 4
gpt4 key购买 nike

我正在开发一个项目,该项目需要能够将音频从网页流式传输到其他客户端。我已经在使用 websocket,并希望在那里传输数据。

我当前的方法使用媒体记录器,但采样存在问题,会导致中断。它注册 1 秒音频,然后将其发送到服务器,服务器将其中继到其他客户端。有没有办法捕获连续的音频流并将其转换为 Base64?

也许如果有一种方法可以毫不延迟地从 MediaStream 创建 Base64 音频,那么问题就可以解决。你觉得怎么样?

我想继续使用 websockets,我知道有 webrtc。你有没有做过这样的事情,这可行吗?

                                                                --> Device 1
MediaStream -> MediaRecorder -> base64 -> WebSocket -> Server --> Device ..
--> Device 18

这里是当前方法的演示...您可以在这里尝试:https://jsfiddle.net/8qhvrcbz/

var sendAudio = function(b64) {
var message = 'var audio = document.createElement(\'audio\');';
message += 'audio.src = "' + b64 + '";';
message += 'audio.play().catch(console.error);';
eval(message);
console.log(b64);
}

navigator.mediaDevices.getUserMedia({
audio: true
}).then(function(stream) {
setInterval(function() {
var chunks = [];
var recorder = new MediaRecorder(stream);
recorder.ondataavailable = function(e) {
chunks.push(e.data);
};
recorder.onstop = function(e) {
var audioBlob = new Blob(chunks);
var reader = new FileReader();
reader.readAsDataURL(audioBlob);
reader.onloadend = function() {
var b64 = reader.result
b64 = b64.replace('application/octet-stream', 'audio/mpeg');
sendAudio(b64);
}
}
recorder.start();
setTimeout(function() {
recorder.stop();
}, 1050);
}, 1000);
});

最佳答案

Websocket 不是最好的。我通过使用 WebRTC 而不是 websocket 解决了。使用 websocket 的解决方案是在记录 1050 毫秒而不是 1000 毫秒时获得的,它会导致一些重叠,但仍然比听到空白要好。

关于javascript - 通过 websocket 传输音频,延迟低且无中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55975895/

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