icecast возвращает text/html вместо 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

НЕКОТОРЫЕ станции работают нормально, а другие возвращают html вместо потоковых данных. Например: SheRadio: http://66.85.88.242:8136/1139_128 — возвращает

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

отправленные другими станциями.

Я совершенно не мог понять, почему что-то работает, а что-то нет. Заранее спасибо за любую помощь/идеи.


person pisicaverde    schedule 15.06.2018    source источник


Ответы (1)


Обратите внимание, что вы ДОЛЖНЫ указать правильный путь в запросе HTTP GET!

GET / HTTP/1.1 НЕ запрашивает 'http://66.85.88.242:8136/1139_128', но '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

vs.

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-запросов вместо подверженного ошибкам ручного изготовления.

person TBR    schedule 16.06.2018
comment
Работал как шарм. Пришлось изменить заголовки на: GET /chill HTTP/1.1 User-Agent: Windows-Media-Player/10.00.00.1111 Host: 203.146.251.172 Icy-Metadata:1 Accept: audio/mpeg,audio/aacp Connection: keep-alive (для такой станции, как 203.146.251.172:80/chill ) - person pisicaverde; 16.06.2018