我正在使用1000ms
从客户端获取getUserMedia()
音频块,并将其转换为1秒的音频Blob,然后使用socket-io将它们发送到服务器(以及其余的客户端),直到用户停止录制。
在服务器上,我将获取的Blob重新发送给其他使用createObjectURL()
获得Blob URL的客户端,然后将该URL设置为前端src
标签的<audio>
。每隔1000毫秒,客户端就会获得一个新的Blob,并获得其URL,然后将其馈送到<audio>
标签。
但是,从以前的URL过渡到新的URL会有一些可见的延迟,这会导致音频不完整且不平滑和不一致。
在客户端,这就是我录制音频Blob的方式,
var chunks = [];
var mediaRecorder = new MediaRecorder(stream, { bitsPerSecond: 32000 });
mediaRecorder.ondataavailable = function (e) {
chunks.push(e.data);
}
mediaRecorder.start();
setInterval(() => {
mediaRecorder.stop();
mediaRecorder.start();
}, 1000);
mediaRecorder.onstop = function (e) {
var blob = new Blob(chunks, { 'type': 'audio/ogg; codecs=opus' });
chunks = [];
socket.emit('audio-blob', blob);
}
在服务器上,我只是将Blob重新发送给客户端,
socket.to(String(socket.room)).broadcast.emit('audio-blob', blob);
在接收方客户端上,这样播放blob,
socket.on('audio-blob', blob => {
var newblob = new File([blob], "filename")
var audioURL = window.URL.createObjectURL(newblob);
window.audio = new Audio();
window.audio.src = audioURL;
window.audio.play();
})
在过渡过程中,如何使音频保持一致并减少明显的延迟