我正在开发一个项目,需要从网页流式传输音频到其他客户端的能力。我已经在使用websocket,并希望将数据通道化。
我的当前方法使用Media Recorder,但是存在采样问题会导致中断。它会注册1秒音频,然后将其发送到服务器,再转发给其他客户端。有没有一种方法可以捕获连续的音频流并将其转换为base64?
也许如果有一种方法可以从MediaStream创建无延迟的base64音频,这将解决问题。你怎么看?
我想继续使用websocket,我知道有webrtc。你做过类似的事情吗?这可行吗?
这是当前方法的演示...你可以在此处尝试:https://jsfiddle.net/8qhvrcbz/
我的当前方法使用Media Recorder,但是存在采样问题会导致中断。它会注册1秒音频,然后将其发送到服务器,再转发给其他客户端。有没有一种方法可以捕获连续的音频流并将其转换为base64?
也许如果有一种方法可以从MediaStream创建无延迟的base64音频,这将解决问题。你怎么看?
我想继续使用websocket,我知道有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);
});