我正在尝试使用HTML5音频播放mp3 shoutcast流电台。
我不认为这是相关的,但无论如何这里是代码:
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服务器发送的内容,并清楚地说明“content-type:audio / mpeg”。有没有办法强制Firefox使用HTML5音频播放shoutcast流?
答案 0 :(得分:3)
对Shoutcast的Adobe Flash Player支持在去年已经破了两次(见here和here),所以这对我来说是一个非常重要的问题。
我决定调查。
Shoutcast不使用标准HTTP,而是使用ICY协议,它与HTTP / 1.0大致相同。
Shoutcast发送的状态行是
ICY 200 OK
但Mozilla不理解此状态行的ICY部分,因此它假定响应是HTTP / 0.9(没有内容类型/标题)。这样做的结果是流的主体包括ICY状态行和标题(即标题是不由Mozilla解析)。由于没有内容类型,Mozilla会进行一些“媒体嗅探”,并在内容的一小部分偏移处发现有效的MP3帧,<audio>
标记使用此嗅探内容类型正确运行。
现在来an issue通过强制所有HTTP / 0.9内容通过非标准端口(即非端口80/443)转换为内容类型text/plain
来解决问题。现在,当内容正文传递给HTML <audio>
标记时,它已经具有text/plain
的内容类型,因此它不再像在此问题之前那样被嗅探,而是Mozilla没有允许它播放。
好消息是I fixed this annoyance和Mozilla现在将ICY协议视为等同于HTTP / 1.0。这反过来意味着Mozilla可以解码标头并读取正确的内容类型audio/mpeg
并恢复播放。
我的修复应该会在今年晚些时候进入Mozilla24。
与此同时,如果您想在Mozilla中播放Shoutcast,则需要通过端口80进行广播。