【问题标题】:Play encoded audio stream with web Audio Api使用 Web Audio Api 播放编码的音频流
【发布时间】:2014-12-29 09:19:17
【问题描述】:

我正在通过 websockets 发送编码的实时音频流(mp3 或 ogg),我想使用 web 音频 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,但效果不是很好。在收到的块之间有一个非常小的中断。所以没有流的流畅播放。我不知道这是什么原因......也许 decodedData.duration 属性不够准确,或者任何地方都有某种延迟。

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

网络音频 api 中是否还有其他方法可以播放编码的直播流然后解码音频数据?我找不到任何东西......

感谢您的帮助!

【问题讨论】:

    标签: web-audio-api


    【解决方案1】:

    如果可以,请不要通过 Web 套接字执行此操作。让浏览器完成它的工作并通过 HTTP 播放它。否则你必须重新发明一切。

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

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

    你如何做这些项目取决于你的具体需求和实施,所以如果你遇到任何问题,我建议分开问题。

    【讨论】:

      猜你喜欢
      • 2012-09-20
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      • 1970-01-01
      • 2014-07-06
      • 2015-11-09
      • 2013-06-20
      • 1970-01-01
      相关资源
      最近更新 更多