icecast returns text/html 而不是 audio/mpeg

icecast returns text/html instead of audio/mpeg

我用ESP8266+VS1053搭建了一个简单的网络收音机。有用。 发送到 icecast 服务器的查询如下所示:

GET / HTTP/1.1
User-Agent: Windows-Media-Player/10.00.00.1111
Host: 66.85.88.242
Icy-Metadata:1
Accept: audio/mpeg,audio/aacp
Connection: keep-alive

某些站点工作正常,而其他站点 returns html 而不是流数据。例如: SheRadio: http://66.85.88.242:8136/1139_128 -- returns

HTTP/1.1 200 OK
Content-Length: 501
Content-Type: text/html
Date: Fri, 15 Jun 2018 22:05:43 GMT
Server: Icecast 2.4.0-kh3
Cache-Control: no-cache, no-store
Pragma: no-cache
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Origin, Accept, X-Requested-With, Content-Type
Access-Control-Allow-Methods: GET, OPTIONS, HEAD
Connection: Close
Expires: Mon, 26 Jul 1997 05:00:00 GMT


DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
  <head>
    <link rel="stylesheet" type="text/css" href="/style.css" />
    <title>Icecast Streaming Media Server</title>

(等等) 而不是:

HTTP/1.0 200 OK
icy-notice1:<BR>This stream requires <a href="http://www.winamp.com">Winamp</a><BR>
icy-notice2:SHOUTcast DNAS/posix(linux x64) v2.5.5.733<BR>
Accept-Ranges:none
Access-Control-Allow-Origin:*
Cache-Control:no-cache,no-store,must-revalidate,max-age=0
Connection:close
icy-name:Goldradio Network
icy-genre:60s, 70s, 80s, Top 40, Oldies
icy-br:24
icy-sr:16000
icy-url:http://www.goldradio.org.uk
icy-pub:1
content-type:audio/mpeg
icy-metaint:8192
X-Clacks-Overhead:GNU Terry Pratchett

其他站发送

我完全无法理解为什么有些有效而有些无效。 提前感谢任何 help/ideas.

请注意,您必须在您的 HTTP GET 请求中提供正确的路径!

GET / HTTP/1.1 不是 请求“http://66.85.88.242:8136/1139_128', but 'http://66.85.88.242:8136/”。后者'text/html'的内容。

这可以使用以下方法轻松验证:

curl -v --user-agent "Windows-Media-Player/10.00.00.1111" -H "Icy-Metadata: 1" -H "Accept: audio/mpeg,audio/aacp" http://66.85.88.242:8136/ >/dev/null

对比

curl -v --user-agent "Windows-Media-Player/10.00.00.1111" -H "Icy-Metadata: 1" -H "Accept: audio/mpeg,audio/aacp" http://66.85.88.242:8136/1139_128 >/dev/null

不确定 ESP8266 的情况如何,但至少对于 ESP32,libcurl 构建得非常好,是我处理 HTTP 请求而不是容易出错的手工制作的首选。