html - 在 Firefox 中播放带有 HTML5 音频的 mp3 Shoutcast 流?

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

我正在尝试使用 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 的支持中断了两次(参见 herehere),所以这对我来说是一个非常重要的问题。

我决定调查一下。

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/

相关文章:

html - 如何删除表单顶部的空白?

javascript - Web 音频/ radio 流客户端 : use Howler. js、 native 音频、其他库?

c++ - 用于音频文件流的 FFMPEG 命令

javascript - jQuery .fadeOut() 然后 .show();不使用 keyup

javascript - 更改 div 中的文本

javascript - 在 cordova 应用程序中播放 MP3 blob

angularjs - 更改 html 5's source "src"属性对 angularjs 无效

javascript - 如何检测我的音频流是 : playing, 暂停还是结束?

audio-streaming - 传输音频的 WebRTC 服务器

php - 当仅为用户创建用户时,如何创建新文件夹