定期更改音频元素源会导致弹出/卡顿

时间:2016-11-22 21:37:01

标签: javascript html5 audio media html5-audio

我正在开展一个项目,要求我将客户端A的音频数据代理到客户端B.将其视为客户端A通过麦克风与客户端B通过中间服务器进行通信,因此不会欺骗IP地址。我处理这个问题的方法是记录客户端A的输入音频,每隔150毫秒将录制的音频输出到WAVE(.wav)音频文件,然后将其转发给客户端B.我目前面临的问题是每当客户端B接收到新的音频文件并播放它时,在先前播放的音频块和刚收到的音频文件之间存在微小的断续/弹出/暂停(客户端B将不再能够识别单词,它是那么不好)。起初,我想通过使音频块更大来解决这个问题,因此更少的弹出发生,问题是它增加了客户端A发送音频和客户端B接收它之间的延迟,延迟在这里很重要。

客户A的代码(发件人):

navigator.mediaDevices.getUserMedia({audio: true, video: false}).then(function(mediaStream) {

    mediaRecorder = new MediaRecorder(mediaStream);
    mediaRecorder.mimeType = "audio/wav";

    mediaRecorder.ondataavailable = function (blob) {
        //  Turn blob (short wav file) into string and send it to server which forwards it to client B
        sendToServer(MakeDataURL(blob));
    };

    mediaRecorder.start(150);

}).catch(function(err) {
    alert(err);
});

客户B的代码(接收方):

var audioElement = document.querySelector("audio");

serverConnection.on("message", function(audioAsDataUrl) {   
    //  Works but audio pops each time this is called :(     
    audioElement.src = audioAsDataUrl;
});

正如您所知,代码已经过简化,但除了音频弹出或其他任何内容之外,一切都有效。

当从代理服务器收到新的音频块时,是否可以在更改音频元素的源后摆脱此弹出窗口?

0 个答案:

没有答案