Icecast с аутентификацией | IceCast

Появилась необходимость настроить вещание радио в интернет для передачи региональным партнерам. Понятно что Icecast, но с аутентификацией чтобы не каждый мог получить доступ к источнику. Источник сигнала – кодеры Barix (http://www.barix.com/), эти железки берут источник cигнала, кодируют и отдают сигнал на ретранслятор (в нашем случае Icecast 2). Icecast уже «вещает» в инет – вы можете клиентом (VLC, winamp) подключиться на сокет который слушает icecast и получить аудиопоток.
Конечно можно настроить так чтобы Icecast вещал c самого сервака треки которые вы укажете, но это не наш случай.

Сервер с Icecast можно поставить с одним интерфесом на котором он будет и принимать поток от Barix’а и вещать.
Логика работы простая – указываем айпишник на котором icecast работает, определяем на каких портах он слушает и готов принять поток и описываем точки монтирования через которые поток будет передаваться.

По идее этого достаточно, потому как в настройках сорса который вещает на IceCast (в нашем случае BARIX) указываем пароль на релей, адрес релея и его порт (тот же пароль – в настройках айскаста (relay password). Далее, там же в настройках барикса указываем моунт пойнт на который вешаем поток – например /192, в айскасте достаточно порта на котором он будет слушать 8000, 80001 (рекомендуют для клиентов два последующих порта (есть такие клиенты которые этого требуют). Всё. Барекс авторизуется на айскасте передает поток, айскаст передаетв сеть, моунт пойнт – тот же что и у Барикса – то есть 19.167.13.11:8010/192 (http://195.210.154.127:8010/192.mp3) проверять лучше VLC плеером.

Можно настроить более гибко – прописать секцию релей, указать в ней адрес источника, моунт пойнт источника (/192) и моунт пойнт куда монтировать поток (/radio.mp3) и задать другие параметры.
Далее можно ещё более гибко описать локальную точку монтирования – в секции – задать описание потока, аутентификацию, fallback и т.д.

<!-- BARIX MP3 192 -->
  <mount>
     <mount-name>/192</mount-name>
     <max-listeners>5</max-listeners>
     <public>1</public>
     <stream-name>Radio 192</stream-name>
     <stream-description>Regions Stream  BARIX192</stream-description>
     <stream-url>http://19.167.13.11</stream-url>
     <genre>Entertainment</genre>
     <authentication type="htpasswd">
         <option name="filename" value="/usr/local/etc/.htpasswd"/>
	<option name="allow_duplicate_users" value="1"/>
     </authentication>
 </mount>

Точки монтирования в айскасте – это абстракция никаких реальных каталогов в файловой системе сервера нет, не ищите.

Если в названии используем расширение .mp3 или .ogg (в зависимости от того что вещает источник) аккуратнее с клиентами – если вещаем mp3, а точка монтирования с расширением .ogg – клиент может не понять – у меня винамп вис в состоянии Connecting…

Для клиентов как видно из фрагмента конфига доступ к Icecast можно ограничить по паролю и по ip.
Доступ по паролю описан здесь – http://www.icecast.org/docs/icecast-2.3.2/icecast2_listenerauth.html
В описании точки монтирования – описываем тип аутентификации, и настраиваем через вебинтерфейс айскаста. Айскаст имеет свой механизм управления учётными записями типа апача, но если на сервере есть апач с htpasswd – можно организовать все им.
При настройке аутентификации из вебинтерфейса айскаста – ругнется на дефолтную настройку – не найдет файл паролей и не сможет создать его (может нет прав на запись в директории прописанной в как base dir (/usr/local/share/icecast)… Можно создать файл руками (например /usr/local/etc/.htpasswd и прописать его в опции точки монирования. Пользователей в вебинтерфейсе теперь добавлять можно без ошибок, а вот удалять не даст. :) Если нужно кого-то удалить можно ручками строку из файла убрать.

Теперь при обращении к http://19.167.13.11/192 клиентом типа VLC сервер спросит логин и пароль и отдаст поток только после аутентификации.

PS: Получилось немного сумбурно но ключевые моменты думаю понятны. :)

  1. Alexey:

    А как по IP ограничить средствами самого Icecast?