SHOUTcast 从与流完全相同的端口和路径为其管理接口提供服务。例如,假设我有一个 SHOUTcast 服务器在端口8000
上运行198.51.100.100
。如果我在浏览器中转到以下内容...
http:///198.51.100.100:8000/
...我将看到 SHOUTcast 管理页面,我可以在其中登录和断开连接,等等。但是,如果我使用媒体播放器(例如 VLC 或 Winamp)访问相同的 URL,我会听到流。
User-Agent
SHOUTcast 根据请求标头知道要给我哪个。此标头指示正在尝试连接到服务器的客户端。当我连接浏览器时,它可能看起来像这样:
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36
如果我使用 VLC 连接,User-Agent
请求标头可能如下所示:
NSPlayer/7.10.0.3059
SHOUTcast 没有所有浏览器的列表。相反,它只寻找一个关键字Mozilla
...... 由于历史原因,这在大多数浏览器的用户代理字符串中都可以找到。如果Mozilla
在User-Agent
请求标头中,则 SHOUTcast 发送管理页面。对于所有其他人,它发送一个流。
这会产生很多问题。最值得注意的是,这意味着您无法在浏览器中收听流。如果您在网页上加载该流,则User-Agent
字符串将包含Mozilla
,并且 SHOUTcast 服务器将发送管理页面,从而导致播放器出错。
有办法解决这个问题。如果在请求路径中添加分号;
,则 SHOUTcast 会忽略实际User-Agent
并将其替换为MPEG OVERRIDE
. (您可以在 SHOUTcast 服务器日志中看到这一点。)这会导致服务器发送实际的无线电流。
因此,;
在 SHOUTcast 流的路径中看到分号是很常见的。但是,怎么;stream.mp3
办?有一天有人做了,其他人都复制粘贴了。就那么简单。SHOUTcast 服务器会忽略该分号之后的所有内容,因此您可以将任何您想要的内容放在那里。
有时,这可能是有原因的.mp3
。通过 HTTP 加载时,您应该能够通过Content-Type
响应标头确定某物的类型。“文件名”完全没有意义。您可以将 Web 服务器配置为使用任何文件扩展名命名您想要的任何内容,并且只要您发送了正确的Content-Type
响应标头,一切都很好。有一次,在过去的 15 年里,我遇到了假定文件扩展名有效且必需的软件。这是一种非常错误的做事方式。幸运的是,他们修好了它,一切都很好。这是一个非常罕见的问题,而不是您应该担心的问题。
既然已经解释了 SHOUTcast hacks...关于您的其他问题。
/stream [这个怎么只有stream,就是这样。[没有; /斜线后的分号并且没有stream.mp3?
那些运行服务器的人可以为所欲为。这只是普通的HTTP。路径可以是任何东西。在这种情况下,有人决定调用那里运行的任何东西/stream
。他们可能也没有使用 SHOUTcast。(同样,SHOUTcast 是非标准的,不正常的。)
为什么一个流可以在没有分号的情况下工作,为什么一个流需要有分号?
只有 SHOUTcast 需要分号;
才能按预期工作。其他服务器不需要此 hack。
http://91.223.18.205:8000/c11_4?[icecast] 为什么这个有一个?最后的问号[那是什么意思?]
URL 中的问号?
将路径与查询字符串分开。查询字符串可用于提供参数列表,通常用于路径中的脚本。在这种情况下,问号无关紧要,因为它后面没有参数。
旧的 IE(我认为是 4)过去常常过度缓存东西,但如果涉及查询字符串,通常不会。有时人们会添加带有随机数的查询字符串,以确保他们收到来自服务器的新副本。这是一个很长一段时间都不需要的 hack。IE 4 大约在 20 年前问世。这些天来,我们使用适当的缓存控制标头。SHOUTcast、Icecast 等都正确地做到了这一点。