【问题标题】:Playing mp3 Shoutcast streams with HTML5 audio in Firefox?在 Firefox 中播放带有 HTML5 音频的 mp3 Shoutcast 流?
【发布时间】:2013-06-05 13:03:45
【问题描述】:

我正在尝试播放带有 HTML5 音频的 mp3 广播流广播电台。

我认为这无关紧要,但这里是代码:

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 检查从广播服务器发送的内容,它清楚地指出“内容类型:音频/mpeg”。有什么方法可以强制 Firefox 播放带有 HTML5 音频的直播流?

【问题讨论】:

  • Firefox 通常不支持 MP3。 developer.mozilla.org/en-US/docs/HTML/Supported_media_formats你的版本可以吗?
  • @Brad MP3 本身不受支持,但它使用操作系统的编解码器。我尝试播放非 Shoutcast mp3 流并且它可以工作,但对于shoutcast 它没有。我猜 FF 认为它是 text/plain 因为 ICY 的文本元数据标头。
  • ICY-* 标头不会影响任何内容。错误消息要么被误报,要么在您以某种方式加载不同 URL 的地方存在错误。 (我怀疑这是一个错误,就像你点击该服务器上的任何其他端点一样,你会得到text/html。)
  • @Brad:这是 Mozilla 的最新更改,导致非标准端口上的非 http 内容 (HTTP/0.9) 被强制为 text/plain content-type,所以是的,ICY 标头在这里创造与众不同的世界。请参阅下面的答案。
  • @spender, ICY 在状态行...是的,这是有道理的。我指的是实际的 ICY-MetaInt 标头,什么不是。

标签: html audio-streaming radio shoutcast internet-radio


【解决方案1】:

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

我决定调查一下。

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 不允许它播放。

好消息是I fixed this annoyance 和 Mozilla 现在将 ICY 协议视为等同于 HTTP/1.0。这反过来意味着 Mozilla 可以解码标题并读取正确的内容类型audio/mpeg 并恢复播放。

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

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

【讨论】:

  • 刚刚在最新的 Nightly 版本中尝试过,效果很好!感谢您对 ICY 的支持。
猜你喜欢
  • 2013-08-25
  • 1970-01-01
  • 1970-01-01
  • 2019-02-09
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 2012-04-01
  • 2013-12-18
相关资源
最近更新 更多