0

我正在尝试制作 SHOUTcast 音频流的实时频谱图。我找到了这个页面http://www.aerodynes.fr/2014/04/14/a-pure-javascript-audio-waterfall/有人几乎完全按照我的意愿行事,但使用声卡中的音频。如何以与他相同的方式打开 SHOUTcast 流进行处理?我似乎无法在 Web Audio API 中找到有关它的信息

// Open the microphone
function init() {
    var audioConstraints = {
        audio: true
    };
    getUserMedia(audioConstraints, gotStream);
}
...

感谢您的任何建议/信息。

4

1 回答 1

0

你不能直接。您必须向 MacGyver 提供一些解决方案。

您将遇到的第一个问题是您无法从大多数浏览器直接连接到 SHOUTcast 流。虽然 SHOUTcast 本质上是 HTTP,但有一个小区别会破坏兼容性,尤其是对于更现代的客户端。正常的 HTTP 服务器在其响应中返回一个状态行,如下所示:

HTTP/1.1 200 OK

SHOUTcast 服务器返回这个:

ICY 200 OK

解决这个问题的唯一方法(假设您仍然需要使用 SHOUTcast)是在重写响应状态行时代理数据服务器端。

下一个问题是 SHOUTcast/Icecast 流使用编解码器,通常是 ADTS 中的 MP3 或 AAC,将音频压缩到适合互联网流的带宽。Web Audio API 处理浮点 PCM 样本。您将不得不解码音频流。虽然这通常可以在浏览器中完成,但这取决于您使用的编解码器。否则,您必须在服务器端执行此操作,此时您还不如在服务器端执行频谱分析并流式传输频带值。

我认为处理此问题的最佳方法是让您的流在音频元素或对象中播放,并将其用作 Web 音频 API 节点,然后将其连接到您的分析器节点以获取频谱。您将希望将 Icecast 用于您的服务器,并且您必须将您的流转码为几个编解码器以获得更广泛的浏览器支持。

于 2014-12-11T19:55:16.107 回答