我有几个关于 mp3 广播流设置的问题

I have a few questions about the setup of an mp3 radio stream

所有这些有什么区别?它们的含义是什么?

  1. /;stream.mp3 [; 分号在 / 斜杠后究竟表示什么?]

  2. 另外,如果我去掉 stream.mp3,只在斜杠 /; 后面留下分号,或者如果我保留 `stream.mp3 附件,有什么区别?

  3. /stream【这个怎么只有stream,就这样了。 [/ 斜杠后没有 ; 分号,也没有 stream.mp3?

  4. 为什么一个流可以没有分号工作,为什么一个流需要分号?

  5. http://91.223.18.205:8000/c11_4? [icecast]为什么这个最后有一个?问号[那是什么意思?]

SHOUTcast 从与流完全相同的端口和路径为其管理界面提供服务。例如,假设我在 198.51.100.100 上的端口 8000 上有一个 SHOUTcast 服务器 运行。如果我在浏览器中转到以下内容...

http:///198.51.100.100:8000/

...我将看到 SHOUTcast 管理页面,我可以在其中登录和断开连接等等。但是,如果我使用媒体播放器(例如 VLC 或 Winamp)访问相同的 URL,我会听到一个流。

SHOUTcast 根据 User-Agent 请求 header 知道给我哪个。此 header 表示客户端正在尝试连接到服务器。当我连接到我的浏览器时,它可能看起来像这样:

Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36

如果我连接 VLC,User-Agent 请求 header 可能如下所示:

NSPlayer/7.10.0.3059

SHOUTcast 没有所有浏览器的列表。相反,它只查找一个关键字... Mozilla。由于历史原因,这在大多数浏览器的用户代理字符串中都可以找到。如果 MozillaUser-Agent 请求 header 中,则 SHOUTcast 发送管理页面。对于所有其他人,它发送一个流。

这会产生很多问题。最值得注意的是,这意味着您无法在浏览器中收听流。如果您在网页上加载该流,User-Agent 字符串将包含 Mozilla,并且 SHOUTcast 服务器将发送管理页面,导致播放器出错。

有办法解决这个问题。如果在请求路径中添加分号 ;,SHOUTcast 将忽略实际的 User-Agent 并将其替换为 MPEG OVERRIDE。 (您可以在 SHOUTcast 服务器日志中看到这一点。)这会导致服务器发送实际的无线电流。

因此,在 SHOUTcast 流的路径中经常看到分号 ;。但是,;stream.mp3 呢?有一天有人做了它,其他人都复制并粘贴了它。就那么简单。 SHOUTcast 服务器忽略该分号后的所有内容,因此您可以将任何内容放在那里。

偶尔,.mp3 可能是有原因的。当通过 HTTP 加载时,您应该能够通过 Content-Type 响应 header 确定某物的类型。 "file name" 完全没有意义。您可以将 Web 服务器配置为使用任何文件扩展名来命名任何您想要的东西,只要您发送正确的 Content-Type 响应 header,一切都很好。有一次,在过去的 ~15 年里,我遇到了 software that assumed file name extensions were valid and required。这是一种非常错误的做事方式。幸运的是,他们修好了,一切都很好。这是一个非常罕见的问题,不是您应该担心的问题。

既然解释了 SHOUTcast hacks... 到你的其他问题。

/stream [How come this one has only stream, and that's it. [There's no ; semicolon after the / slash and there's no stream.mp3?

那些运行服务器可以为所欲为。这只是普通的 HTTP。路径可以是任何东西。在这种情况下,有人决定调用 运行 那里的任何东西 /stream。他们可能也没有使用 SHOUTcast。 (同样,SHOUTcast 是 non-standard 并且不正常。)

Why would one stream be able to work without a semicolon, and why would one stream need to have one?

只有 SHOUTcast 需要分号 ; 才能按预期工作。其他服务器不需要这个 hack。

http://91.223.18.205:8000/c11_4? [icecast] Why does this one have a ? question mark at the end [and what does that signify?]

URL 中的问号 ? 将路径与 query string 分开。查询字符串可用于提供参数列表,通常用于路径中的脚本。在这种情况下,问号无关紧要,因为它后面没有参数。

旧的 IE(我认为是 4)曾经过度缓存东西,但如果涉及查询字符串,通常不会。有时人们会添加带有随机数的查询字符串,以确保他们从服务器收到了新的副本。这是很长时间以来不需要的 hack。 IE 4 大约在 20 年前问世。这些天,我们使用适当的缓存控制 headers。 SHOUTcast、Icecast 和其他人都正确地做到了这一点。