LINUX.ORG.RU
ФорумAdmin

squid и интернет-радио


0

0

Я как-то столкнулся с одной проблемой: ни один плеер по неизвестным причинам не хотел нормально воспроизводить интернет радио. Опытным путём удалось выяснить, что проблема в squid'е, а точнее в не совсем корректном HTTP, которым вещают почти все *cast-сервера. Вместо привычного ответа «HTTP/1.0 200 OK» они выдают «ICY 200 OK» + некоторые нестандартные заголовки (ну это уже не так критично). Когда squid видит это безобразие, он считает что это устаревший HTTP 0.9 и радостно добавляет валидные заголовки. В результате получается примерно такая каша:

HTTP/1.0 200 OK
Date: Thu, 18 Dec 2008 13:20:04 GMT
X-Cache: MISS from homeserver.home
X-Cache-Lookup: MISS from homeserver.home:3128
Via: 0.9 homeserver.home:3128 (squid/2.7.STABLE5)
Connection: close

ICY 200 OK
icy-notice1: <BR>This stream requires <a href="http://www.winamp.com/">Winamp</a><BR>
icy-notice2: Firehose Ultravox/SHOUTcast Relay Server/Linux v2.6.0<BR>
icy-name: D I G I T A L L Y - I M P O R T E D - European Trance, Techno, Hi-NRG... we can't define it!
icy-genre: Trance Techno Dance
icy-url: http://www.di.fm
content-type: audio/mpeg
icy-pub: 1
icy-br: 96

... тут начинается собственно эмпэтри поток ...

Медиа-плееры в свою очередь корректно обрабатывали первую порцию заголовков, а вторую порцию уже считали данными и пытались начать декодирование потока, с переменным успехом 8). Тогда для решения этой проблемы я поставил ещё один тупой прокси-сервер на другом порту (tinyproxy), чтобы его прописать в настройках проигрывателей. А сегодня в стабильной ветке gentoo размаскировали squid 2.7stable5, в котором для решения этой проблемы добавили опцию:

#  TAG: upgrade_http0.9
#       This access list controls when HTTP/0.9 responses is upgraded
#       to our current HTTP version. The default is to always upgrade.
#
#       Some applications expect to be able to respond with non-HTTP
#       responses and clients gets confused if the response is upgraded.
#       For example SHOUTcast servers used for mp3 streaming.
#
#       To enable some flexibility in detection of such applications
#       the first line of the response is available in the internal header
#       X-HTTP09-First-Line for use in the rep_header acl.
#
# Don't upgrade ShoutCast responses to HTTP
acl shoutcast rep_header X-HTTP09-First-Line ^ICY\s[0-9]
upgrade_http0.9 deny shoutcast

Теперь всё работает нормально и без лишних костылей =).

Deleted

Спасибо, при случае воспользуюсь.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.