Receive Shoutcast radio with Flash or RTMP over Red5
А что, собственно, такое?
ААААааааааахренительно неудобно сделали Adobe, решив, что девелоперы флеша ну просто-таки через одного – сплошные редиски, ждущие возможности воспользоваться наивным пользователем и под шумок скачать что-нибудь с чужого сайта. Однако, они так решили и внедрили технологию Cross-domain policy, которая описывается в одноимённом файле. Что она даёт? Она даёт возможность сайту example.org запретить юзать его содержимое с любого другого сайта (используя флеш в виде юзатора, разумеется). Или наоборот разрешить…
К чему бишь я это всё? А к тому, что взбредило в мою голову написать Flex-плеер для онлайн-радио. Оччень удобно, усер заходит на сайт, давит батон, и играет его (не)любимое радио. Сайт он закрывает, радио обрывается. 0 проблем с плейлистом и винампоподобным плеером, 0 проблем с необходимостью что-то ещё делать, кроме нажатий на сайте. И всё-бы ничего, если-бы Флеш небыл так неклассен.
Оказывается, при запросе какого-то внешнего ресурса, Флеш шлёт туда заголовки. При чём в основном они берутся из того, откуда этот флеш был запущен (т.е. обычно – браузер).
Лирическое отступление. Возьмём любой радио-стример, допустим, Shoutcast от NullSoft. Он с закрытым сорсом, но что-то да про него известно. В основном меня интересовало то, как он различает, кто к нему подключился – браузер или плеер, потому что браузеру он выдаёт статистику (какая песня в эфире, сколько её слушают и.т.д.), а вот плееру достаётся уже непосредственно live-stream.
*SPOILER*
You also must make sure that when you make your HTTP calls that it comes from a browser or program that specifies the User-Agent: header as Mozilla.
*/SPOILER*
Что это значит? Это значит, что если флешопросматриватель не говорит, что он, мол-де, Mozillo, то он явно хочет послушать музончик. А что хочет практически любой браузер (включая даже GoogleBot’a)? Правильно, быть похожими на Мозилл. И в итоге отправлять серверу честный хидер. Результат: скомпилленый в .exe флеш-мувик слушает музон на ура, а вот вложенный в страничу – ни разу не на ура. Обидно.
А что там Red5?…
Red5 живёт своей жизнью, и вряд-ли когда-то данная возможность (Shout/icecast->Red5->RTMP_for_Flash) будет в нём реализована. WowzaMedia предлогает такую возможность, но цена его за 10+ подключений – всё ещё $999…

Привет. У меня сейчас такая же задача – создать радио. Есть проблемы с буферизацией. Поиск в нете привел к Red5. Но информации по аудио стримингу маловато. Неужели действительно эту задачу не решить с помощью Red5?
Привет. В принципе можно сделать это в рамках erlyvideo: http://erlyvideo.org/
Я думаю, что сжевать shoutcast не очень сложно.
Привет, Макс. Спасибо за бистрий ответ. Просмотр http://erlyvideo.org/ не очень помог мне понять как ето возможно.. Можете обяснить вкратце как можно решить даную задачу с erlyvideo?
@Iris Вам надо захватить shoutcast поток и раздать его RTMP клиентам, верно? Я могу добавить поддержку shoutcast-а
@Iris Я добавил поддержку shoutcast-а, теперь erlyvideo умеет проигрывать AAC-радио во флешки, на веб-страницах.
@Макс Лапшин
Привет. Не было возможности отписать. К сожелению моя работа над проектом радио сейчас приостановлена, но хочу закончить его самостоятельно. Спасибо, что добавили такую поддержку! Если у меня будут вопросы по внедрению erlyvideo в проект, могу я обратиться к Вам?
@Iris: конечно можно!