使用audioContext.decodeAudioData时Safari浏览器解码失败

问题描述 投票:0回答:1

我有一个 Vue JS 应用程序,在其中播放来自 Websocket 连接的音频流。音频流以块的形式连续传入,因此我实现了一个逻辑来播放队列中传入的块。在 Chrome 浏览器中一切正常,但不幸的是在 Safari 中却崩溃了。我对此做了很多研究,但我无法找到解决这个问题的方法。

这是我的代码

vm.socket = new WebSocket('wss://my_website.com');

//required to receive data in array buffer type. If not mentioned I get Blob's
vm.socket.binaryType = 'arraybuffer'


vm.socket.addEventListener("message", (event) => {


    const audioData = new Uint8Array(event.data);

    this.audioQueue.push(audioData);
    if (!this.isPlaying) {
        this.playNextChunk();
    }

});

//Main method which is responsible to process incoming audio chunks
async playNextChunk() {

    if (this.audioQueue.length === 0) {
        this.isPlaying = false;
        return;
    }

    this.isPlaying = true;
    const audioData = this.audioQueue.shift();

    try {
        //decode audio data (This fails randomly in between in Safari browser)
        const audioBuffer = this.audioContext.decodeAudioData(audioData.buffer);
        const source = this.audioContext.createBufferSource();
        source.buffer = audioBuffer;
        source.connect(this.audioContext.destination);
        source.onended = this.playNextChunk;
        source.start();
    } catch (error) {
        console.error('Error decoding audio data', error);
    }

}


这是控制台日志的屏幕截图

websocket safari vuejs3 audio-streaming web-audio-api
1个回答
0
投票

自版本 15 起,Safari 不再支持除 WAV 文件之外的任何文件的解码音频数据。

© www.soinside.com 2019 - 2024. All rights reserved.