使用web Audio Api播放编码的音频流

时间:2014-12-29 00:51:57

标签: web-audio

我正在通过websockets发送编码的实时音频流(mp3或ogg),我想用网络音频api播放它。 我读了几遍,但到目前为止没有任何工作......

我总是尝试使用decodeAudioData方法。 但是这种方法无法处理连续流。 所以我的最后一种方法就是:

  ws.onmessage = function (evt) {

        context.decodeAudioData(evt.data, function (decodedData) {
            source = context.createBufferSource();
            source.buffer = decodedData;
            source.start(startTime);
            source.connect(context.destination);

            startTime += decodedData.duration;
        }, 
        function(e) {
            var test = e;
        }
        );

    };

这至少适用于mp3,但不是很好。收到的块之间有一个非常小的休息时间。所以没有流的流畅播放。我不知道是什么原因...也许decodeData.duration属性不够准确或者在任何地方都有某种延迟。

无论如何,它根本不适用于ogg文件。我可以听到第一个收到的块,但其余的被忽略了。也许这与丢失的标题有关?

web audio api中是否还有其他方法可以播放编码的直播流,然后是decodeAudioData?我找不到任何东西......

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果您能提供帮助,请不要通过网络套接字执行此操作。让浏览器完成其工作并通过HTTP播放。否则你必须重新发明一切。

如果你因某种原因坚持重新发明一切,你必须:

  • 缓冲传入数据
  • 解码该数据
  • 缓冲区解码数据
  • 使用脚本节点播放已解码的PCM缓冲区
  • 处理缓冲区欠载/溢出的时间(可能通过播放静音或丢弃PCM样本)

如何处理这些项目取决于您的具体需求和实施情况,因此如果您遇到任何问题,我建议您将问题分开。