我正在尝试使用 HTML5 音频播放 mp3 shoutcast 流广播电台。
我不认为它是相关的,但这里是代码:
var player = new Audio();
player.autobuffer = true;
player.src = "http://173.192.48.71:9048/;";
player.volume = 1;
player.play();
Shoutcast 检测到请求来自浏览器并返回 radio 状态页面,所以我放了“;”在流的末尾强制服务器返回音频流而不是状态页面。这在 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 和 here),所以这对我来说是一个非常重要的问题。
我决定调查一下。
Shoutcast 没有使用标准的 HTTP,而是使用 ICY 协议(protocol),它与 HTTP/1.0 大致相同。
Shoutcast 发送的状态行是
ICY 200 OK
但 Mozilla 不理解此状态行的 ICY 部分,因此它假定响应是 HTTP/0.9(没有内容类型/ header )。这样做的结果是流的主体包括 ICY 状态行和标题(即标题不由 Mozilla 解析)。因为没有内容类型,Mozilla 做了一些“媒体嗅探”并在内容和 <audio>
的小偏移处发现有效的 MP3 帧。使用此嗅探到的内容类型,标签功能正常。
现在来了 an issue通过强制所有来自非标准端口(即非端口 80/443)的 HTTP/0.9 内容为 text/plain
的内容类型来修复.现在,当内容主体被传递给 HTML <audio>
标记它已经具有 text/plain
的内容类型,因此它不再像在此问题之前那样被嗅探,而是 Mozilla 不允许播放它。
好消息是I fixed this annoyance Mozilla 现在将 ICY 协议(protocol)视为等同于 HTTP/1.0。这反过来意味着 Mozilla 可以解码标题并读取正确的内容类型 audio/mpeg
并恢复播放。
我的修复程序应该会在今年晚些时候进入 Mozilla24。
与此同时,如果您想在 Mozilla 中播放 Shoutcast,则需要通过端口 80 进行广播。
关于html - 在 Firefox 中播放带有 HTML5 音频的 mp3 Shoutcast 流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17014317/