在 Firefox 中使用 HTML5 音频播放 mp3 Shoutcast 流?

2023-12-03

我正在尝试使用 HTML5 音频播放 mp3shoutcast 流广播电台。

我认为这不相关,但无论如何,这里是代码:

var player = new Audio();
player.autobuffer = true;
player.src = "http://173.192.48.71:9048/;";
player.volume = 1;
player.play();

Shoutcast 检测到请求来自浏览器并返回无线电状态页面,因此我输入“;”在流的末尾,强制服务器返回音频流而不是状态页面。这在 Chrome 和 Safari 中工作正常,但在 Firefox 中不行。

Firefox 由于某种原因将其检测为文本/纯内容并拒绝播放,并出现以下错误:

HTTP "Content-Type" of "text/plain" is not supported. 
Load of media resource http://173.192.48.71:9048/; failed.

我使用 Fiddler 检查从shoutcast 服务器发送的内容,它明确指出“内容类型:音频/mpeg”。有没有办法强制 Firefox 播放带有 HTML5 音频的shoutcast 流?


Adobe Flash Player 对 Shoutcast 的支持已两次中断(请参阅here and here)在去年,所以这对我来说是一个非常重要的问题。

我决定调查一下。

Shoutcast 不使用标准 HTTP,而是使用 ICY 协议,该协议与 HTTP/1.0 大致相同。

Shoutcast 发送的状态行是

ICY 200 OK

但 Mozilla 不理解此状态行的 ICY 部分,因此它假设响应是 HTTP/0.9(没有内容类型/标头)。这样做的结果是流的主体包括 ICY 状态行和标头(即标头是not由 Mozilla 解析)。因为没有内容类型,所以 Mozilla 会进行一些“媒体嗅探”,并在内容和内容的较小偏移处发现有效的 MP3 帧。<audio>使用此嗅探的内容类型,标签可以正确运行。

现在来了an issue通过强制所有来自非标准端口(即非端口 80/443)的 HTTP/0.9 内容的内容类型为text/plain。现在,当内容正文传递到 HTML 时<audio>标记它已经有一个内容类型text/plain,因此不再像此问题之前那样嗅探它,而是 Mozilla 不允许播放它。

好消息是我解决了这个烦恼Mozilla 现在将 ICY 协议视为等同于 HTTP/1.0。这反过来意味着 Mozilla 可以解码标头并读取正确的内容类型audio/mpeg并恢复播放。

我的修复应该会在今年晚些时候进入 Mozilla24。

同时,如果您想在 Mozilla 中播放 Shoutcast,则需要通过端口 80 进行广播。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Firefox 中使用 HTML5 音频播放 mp3 Shoutcast 流? 的相关文章

随机推荐