我正在1000ms
使用从客户端获取音频块getUserMedia()
并将其转换为 1 秒的音频 blob,然后使用 socket-io 将它们发送到服务器(以及其他客户端),直到用户停止录制。
在服务器上,我将获得的 blob 重新发送到使用 blob 的 URL 获取的其他客户端,createObjectURL()
然后将此 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();
})
如何在过渡期间使音频保持一致并减少明显的延迟