Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> программы —> icecast2

Inernet Radio в локальную сеть

Автор: schizoid.


        Итак опишу что я хотел сделать. Как-то был у своего брата, весь вечер пока мы общались играла клевая музыка, в основном рок. Я поздравил его за удачный репертуар музыки, но он сказал, что это радио, интернет-радио. И вот тут я загорелся. Ну в начале несколько дней просто слушал прописав его дома в винампе. НО! мне захотелось поделиться им в своей локальной сети! Как раз на форуме я наткнулся на интересующую меня тему, тут человек спрашивал как организовать такое (вещание интернет радио в локальную сеть), ему посоветовали shoutcast.  Ну я не долго думая тоже воспользовался советом. Установив его и настроив я так и не смог перенаправить интересующее меня радио в локаль. Для эксперимента, я тупо ввел в яндексе поиск любого интернет радио и нашел popwave, его мне удалось пробросить в сеть. Пока я на этом остановился, но все же сердце терзалось. Да и еще одно НО мне не очень понравилось в использовании данной пограммки, так это то, что не зависимо от того есть ли клиент слушающий радио или его нет, он все равно забирал под себя определенную полосу.
Порывшись в инете я наткнулся на icecast.
Итак начнем.
# whereis icecast
icecast: /usr/ports/audio/icecast

Но когда я пошел по указанному пути, то обнаружил что есть еще и icecast2. Честно, я не знаю какая между ними разница, но я выбрал 2-й.
cd /usr/ports/audio/icecast2
make install clean

После установки видим месагу нам:
To start icecast at system boot, copy
/usr/local/etc/icecast.xml.sample to /usr/local/etc/icecast.xml, customize
to your environment as desired and add:

icecast_enable="YES"

to /etc/rc.conf. See the icecast -h command for optional additional
flags. To specify an alternative config file for example add:

icecast_flags="-c /path/to/your/configuration.xml"

**********************************************************************
**  Make sure the <changeowner> section in your configuration file  **
**     is NOT commented out. Icecast will refuse to run as root.    **
**                                                                  **
** Also make sure that the user you choose is able to write to your **
**  configured log directory, otherwise icecast will refuse to run. **
**********************************************************************

Что собственно и делаем.
дописываем в /etc/rc.conf строку icecast_enable="YES"
А также копируем дефолтный конфиг в новый.
#cd /usr/local/etc/
# cp icecast.xml.sample icecast_pop.xml
# cp icecast.xml.sample icecast_rock.xml

Далее в  icecast_pop.xml правим такие строки:
   <authentication>
        <!-- Sources log in with username 'source' -->
        <source-password>hackme</source-password>
        <!-- Relays log in username 'relay' -->
        <relay-password>hackme</relay-password>

        <!-- Admin logs in with the username given below -->
        <admin-user>admin</admin-user>
        <admin-password>hackme</admin-password>
    </authentication>

Заменяем на:
    <authentication>
        <!-- Sources log in with username 'source' -->
        <source-password>[color=orange]ПАРОЛЬ[/color]</source-password>
        <!-- Relays log in username 'relay' -->
        <relay-password>[color=orange]ПАРОЛЬ[/color]</relay-password>

        <!-- Admin logs in with the username given below -->
        <admin-user>admin</admin-user>
        <admin-password>[color=orange]ПАРОЛЬ[/color]</admin-password>
    </authentication>

Строки:
  <!-- You may have multiple <listener> elements -->
    <listen-socket>
        <port>8000</port>
        <!-- <bind-address>127.0.0.1</bind-address> -->
    </listen-socket>

Заменяем на:
    <!-- You may have multiple <listener> elements -->
    <listen-socket>
        <port>8000</port>
        <bind-address>192.168.0.100</bind-address>
    </listen-socket>

Где 192.168.0.100 - ИП сервера в локальной сети, 8000 - это порт, по которому наш сервер будет вещать музыку.

Далее, строки:
    <!--
    <relay>
        <server>127.0.0.1</server>
        <port>8001</port>
        <mount>/example.ogg</mount>
        <local-mount>/different.ogg</local-mount>
        <on-demand>0</on-demand>

        <relay-shoutcast-metadata>0</relay-shoutcast-metadata>
    </relay>
    -->

Меняем на
    <relay>
        <server>81.88.113.18</server>
        <port>1072</port>
        <mount>/</mount>
        <local-mount>/radio_pop.mp3</local-mount>
        <on-demand>1</on-demand>

        <relay-shoutcast-metadata>0</relay-shoutcast-metadata>
    </relay>

(т.е. не только изменяем, а и cнимаем коментарий с секции)
Где 81.88.113.18 - ИП-адрес сервера с которго берем радио, 1072 - порт по которому он транслирует это радио. / - точка монтирования. /radio_pop.mp3- локальная точка монтировния (ее будем указывать для прослушивания радио в локальной сети).
Строка <on-demand>1</on-demand> - говорит, что icecast2 будет работать в качестве демона, так же это дает значительное преимущество перед shoutcast-ом, он не занимает полосу, когда радио никто не слушает.
Далее в конфиге я ничего не менял. Для моей задачи этого в полне хватит.
Итак проверяем.
#icecast -b -c /usr/local/etc/icecast_pop.xml

Далее в винампе прописываю url
http://192.168.0.100:8000/radio_pop.mp3

И слышу радио :)
Аналогично я проделал и для второго скопированного файлика (icecast_rock.xml) изменив при этом порт, по которому мой сервер отдает радио, ИП интернет радио и локальную точку монтирования.
    <listen-socket>
        <port>8001</port>
        <bind-address>192.168.0.100</bind-address>
    </listen-socket>

...
   <relay>
        <server>209.51.161.54</server>
        <port>8072</port>
        <mount>/</mount>
        <local-mount>/radio_rock.mp3</local-mount>
        <on-demand>1</on-demand>

        <relay-shoutcast-metadata>0</relay-shoutcast-metadata>
    </relay>

Далее запустил и второе радио:
#icecast -b -c /usr/local/etc/icecast_rock.xml

Также добавил урл в винамп (http://192.168.0.100:8001/radio_rock.mp3) и услышал уже свою любимую волну :)

Потом добавил еще 2 строки в файл /etc/rc.conf
icecast_flags="-b -c /usr/local/etc/icecast_rock.xml"
icecast_flags="-b -c /usr/local/etc/icecast_pop.xml"

И наслаждаюсь вместе со своей сетью слушая интернет-радио :)

З.ы.: Добавив последние две строки в /erc/rc.conf я сервак еще не бутял, по-этому за корректность поднятия icecast-a после ребута не ручаюсь. Проверю - отпишусь.
З.ы.2: Помните мы задавали ПАРОЛЬ? так вот если зайти в браузере по адресу http://192.168.0.100:8000 или http://192.168.0.100:8001, то можно получить некоторую информацию о сервисе icecast2 работающем на вашем сервере.
Вот собственно и все. Подробнее о icecast2 вы можете найти в просторах Интернета, мне же хватило и описанных выше действий.


З.ы.3: Исходя из коментариев к статье, приведу немного видоизмененный конфиг. Тут уже все в одном файле.
Привожу лишь ту часть, которая отвечает на релей радиостанций, все остальное остается прежним.



    <relay>
            <server>81.88.113.18</server>
            <port>1072</port>
            <mount>/</mount>
            <local-mount>/radio_popwave.mp3</local-mount>
            <on-demand>1</on-demand>
            <relay-shoutcast-metadata>0</relay-shoutcast-metadata>
    </relay>

    <relay>
            <server>205.188.215.226</server>
            <port>8000</port>
            <mount>/</mount>
            <local-mount>/radio_paradise.mp3</local-mount>
            <on-demand>1</on-demand>
            <relay-shoutcast-metadata>0</relay-shoutcast-metadata>
    </relay>

    <relay>
            <server>209.51.161.54</server>
            <port>8072</port>
            <mount>/</mount>
            <local-mount>/radio_1.fm.mp3</local-mount>
            <on-demand>1</on-demand>
            <relay-shoutcast-metadata>0</relay-shoutcast-metadata>
    </relay>

<!--В том случае, когда радиостанция источник имеет вид -->
<!-- ссылки: http://mp3.nashe.ru:80/nashe-128 -->
    <relay>
            <server>mp3.nashe.ru</server>
            <port>80</port>
            <mount>/nashe-128</mount>
            <local-mount>/radio_nashe.mp3</local-mount>
            <on-demand>1</on-demand>
            <relay-shoutcast-metadata>0</relay-shoutcast-metadata>
    </relay>

Далее в /etc/rc.conf остается только:
icecast_enable="YES"
icecast_flags="-b -c /usr/local/etc/icecast.xml"

Для этого случая плей-лист выглядит так:
http://192.168.0.100:8000/radio_popwave.mp3
http://192.168.0.100:8000/radio_paradise.mp3
http://192.168.0.100:8000/radio_1.fm.mp3
http://192.168.0.100:8000/radio_nashe.mp3



размещено: 2007-11-03,
последнее обновление: 2008-06-15,
автор: schizoid


squid, 2007-11-03 в 10:58:21

спс, хорошая статья меня уже напрягают сделать радио
не хотелось только шариться в нете

tovdi, 2007-11-03 в 22:18:34

Радио это супер, обязательно попробую.
Кто-то может порекомендовать для системы  "Видео по запросу" ? Ну что-то наподобие этого [url=http://advansib.tomsk.ru/downloads#WatchMe!]

PavelR, 2007-11-04 в 8:50:47

Аналогично я проделал и для второго скопированного файлика (icecast_rock.xml) изменив при этом порт, по которому мой сервер отдает радио, ИП интернет радио и локальную точку монтирования.

Второй порт определять не надо, айскаст отлично будет отдавать различные потоки и по одному порту, различая их по ссылкам (более того, по порту он их и не различает):

http://192.168.0.100:8000/radio_pop.mp3
http://192.168.0.100:8000/radio_rock.mp3

schizoid, 2007-11-04 в 11:49:12

ну и здорово, я как-то и не пробовал :)

NarkomanLove, 2007-11-05 в 0:14:34

Во, класс, эт я тему поднял на форуме про радио в локалке, но так у меня руки не дошли до настройки, куча других забот.
Спасибо огромное за детальное разьяснение и статью как это все настроить.

Rusya, 2007-11-05 в 11:51:59

А кто-то знает, как можно видео поток ретранслировать?

shaman, 2007-11-05 в 14:47:23

Извините за вопрос но , некто не задумывался что имея спутник можно и с него вещять радио в сеть ? может кто занимался подобным ???.

spv, 2007-11-05 в 16:24:48

Я занимался. У меня спутник и радио в сеть, около 20 радиостанций, тока у меня на винде, на юниксе как то руки не доходят сделать, но если честно и на окнах все очень даже стабильно. Если кому интересно прога наз-ся DVBrs.

shaman, 2007-11-05 в 19:05:06

дай свою аську ! Поговорим . Какая машина стоит ?

MaDMaN, 2007-11-06 в 10:43:27

http://www.opennet.ru/base/net/skystar_radio.txt.html -  давно писал...

yakuzzza, 2007-11-07 в 0:25:47

"Строка <on-demand>1</on-demand> - говорит, что icecast2 будет работать в качестве демона, так же это дает значительное преимущество перед shoutcast-ом, он не занимает полосу, когда радио никто не слушает."

Это не режим демона ;) On-demand - переводится как "по запросу", а вот понимание верное, поток идет из Интернета только если кто-то слушает радио.

shaman, 2007-11-07 в 17:32:23

Это все канешно хорошо но ваша MaDMaN статья пол линукс сервер а меня всетаки интересует под FreeBSD

Buttler, 2007-11-09 в 0:11:28

>Добавив последние две строки в /erc/rc.conf я сервак еще не бутял, по-этому за корректность поднятия icecast-a после ребута не ручаюсь
Не поднимется.
Во первых,
>> Make sure the <changeowner> section in your configuration file is NOT commented out. Icecast will refuse to run as root.

т.е. в /usr/local/etc/icecast.xml
— cutting --
<security>
       <chroot>0</chroot>
       <changeowner>
           <user>someuser</user>
           <group>somegroup</group>
       </changeowner>
   </security>
— cutting --

Во вторых,
в /usr/local/etc/rc.d/icecast2
— cutting --
name="icecast"
required_files="/usr/local/etc/$name.xml"
— cutting --

Посему использую один /usr/local/etc/icecast.xml, добавляя лишь <relay>...</relay>

BTW:
icecast -v
Icecast 2.3.1
uname -r
6.2-RELEASE-p8

За статью огромное спасибо =)

felicson, 2007-12-07 в 13:56:21

Я скопировал секцию relay столько раз сколько нужно потоков указав только моунт поинты и все, все потоки вещают у меня на 8000 порту, и работает с одной копией icecastа!!

Green, 2007-12-26 в 14:37:34

мысли по поводу. Можно сделать так, чтобы слушатели сами выбирали трек, который им понравится, что-то вроде голосования, так сказать hitmeup. Плейлист в виде, удобном для редактирования через веб, например, в мискле, отдаем айсу. WEB-часть - скрипт голосования, который редактирует очередь плейлиста.

zerofx, 2007-12-31 в 2:36:44

А как заставить Icecast 2 - проигривать мп3, или где в конфиге впрописать папку? Или для етово надо что то другоє?

Z-16-H, 2008-03-27 в 6:26:27

>zerofx, 2007-12-31 в 2:36:44
>А как заставить Icecast 2 - проигривать мп3, или >где в конфиге впрописать папку? Или для етово надо >что то другоє?

В принципе, можно «вещать» на данный IP
(81.88.113.18:1072) при помощи плагина для WinAMP SHOUTcast server. Только кто музыку будет подготавливать......

Иван, 2008-09-11 в 16:11:46

А как с pf подружить его
при полной свободе - радио вещает
при блокировании и открытии портов 8000 и порт трансляции - не вещает

WMA Relay?, 2008-09-12 в 14:29:41

А если надо WMA Relay (mms://radio/wma)? Есть решение?

schizoid, 2008-09-13 в 23:37:53

Иван, 8000-й порт смотрит внутрь сети, еще нужно открывать ИПы+порты, с которых ты берешь радио-поток.

Yakimoto, 2008-09-30 в 20:27:30

У меня завелось только когда указал не .мр3, а .ogg точка монтирования. Фря 7.0, icecast2-2.3.1_7

Иван, 2008-10-01 в 12:32:17

2tovdi
------------------------------------------------------
Кто-то может порекомендовать для системы  "Видео по запросу" ? Ну что-то наподобие этого
------------------------------------------------------
там убогий интерфейс был,   а вот новая мне понравилась

Иван, 2008-10-03 в 11:14:05

Товарищи! У меня вылазит это как можно исправить? Где ошибка? После команды: icecast -b -c /usr/local/etc/icecast.xml
Вылазит это:
Starting icecast2
Detaching from the console
me# Changed groupid to 65534.
Changed userid to 1001.
FATAL: could not open error logging (/usr/local/var/log/icecast/error.log): Permission denied
FATAL: could not open access logging (/usr/local/var/log/icecast/access.log): Permission denied
FATAL: Could not start logging

kub, 2008-10-03 в 14:06:11

<security>
       <chroot>1</chroot>
       <changeowner>
       <user>icecast</user>
       <group>icecast</group>
       </changeowner>
</security>

KHadorkin, 2008-11-16 в 22:19:25

как я понял, енто радио прокидывает паток из нэта в локалку, но канал не резиновый, как можно сделать чтобы с нэта допустим был 128 кбит/сек, а в локалке раздавлся повозможности самого сервера и сети, т.е. один вход и много выходов

schizoid, 2008-11-17 в 3:51:16

так и есть, 1 вход инесколько выходов.

Khadorkin, 2008-11-17 в 12:10:57

получается если общий канал с нэта 1мбит/с, то сервер будет вещать этот канал, если подконеутяться к радио 7 человек с битрейдом 128кбит/с то они весть канал вытянут, а остальным 8 челам не чё не останется, как сделать чёб не только 7 а может и 20 смогли слушать радио??
буду весьма благодарен за помощь!!!

around, 2008-11-27 в 16:56:40

Всё отлично работает, только на страницах не отображаются точки монтирования и вообще графика... :(
Только надписи
Icecast2 Status

Support icecast development at www.icecast.org

Khadorkin, 2008-11-27 в 17:05:35

на счёт эроглифов, это скорее всего из-за кодировки страницы в браузере, если её изменить то точки (ироглефы) отображаться не будут

Евгений, 2009-04-10 в 16:40:40

Притормаживает поток почему такое может быть ?
Пробовал играть буфером - не помогает, загрузка CPU 2-3%, память свободная есть. Думал на файловую систему т.к. в качестве hdd используется 512 IDE флешка, но отправил логи в /dev/null (вроде бы он больше ничего не пишет), все равно постоянно обваливается в буферизацию...

schizoid, 2009-04-11 в 10:32:47

у меня есть такое на одном из каналов, там просто пинг на хост с радио больше 400. так что посмотри еще в эту сторону тоже.

chupyc, 2009-04-21 в 4:41:16

dns# icecast -b -c /usr/local/etc/icecast.xml
Starting icecast2
Detaching from the console
Couldn't find user "icecast" in password file
Couldn't find group "icecast" in groups file
Changed root successfully to "/usr/local/share/icecast".
dns# ERROR: You should not run icecast2 as root
Use the changeowner directive in the config file

И что с єтим делать???

paradox, 2009-04-26 в 21:45:22

правильно конфиг опишите

Bob_St, 2009-07-07 в 10:53:37

    <security>
       <chroot>0</chroot>
       <changeowner>
       <user>nobody</user>
       <group>nogroup</group>
       </changeowner>
   </security>

luckyredhot, 2009-08-04 в 15:32:41

А почему, соббсно, <relay-shoutcast-metadata>0</relay-shoutcast-metadata> ?
Неужели неинтересно, какой трэк проигрывается?!

slater, 2009-09-05 в 15:26:06

Подскажите, пожалуйста, как ограничить доступ к icecast из локалки?
Где можно записать список ip-адресов, что бы только они мели доступ?
Заранее спасибо!

slater, 2009-09-06 в 8:11:07

Нашел решение вопроса, что задавал, на счет ограничения доступа до сервера.


конструкция поможет:
<allow-ip>/path/to/ip_allowlist</allow-ip>

nikola93, 2009-11-18 в 12:51:54

Люди добрые как mms вещать ?
Уже обгуглился а толку нету

ZeroFX, 2009-11-29 в 17:26:40

Я бы хотел уточнить один момент - по поводу канала. А именно - если я прописал станцию kissfm.ua с битрейтом 128 kb - то icecast будет раздавать контент в сети например для 10-ти пользователей с ущербом для канала (размер которого 256 * 256) - или нет? Или он как бы записывает контент в файл который потом и раздает по сети ..

Ну если говорить коротко - то не посадят 10-ть пользователей канал в интернет ....

schizoid, 2009-12-01 в 10:32:27

а вот если бы вы внимательно перечитали статью, то таких вопросов бы не возникало.

princeps, 2010-02-07 в 14:32:32

Для тех, кто хочет вещать в сеть что-то своё, а не ретранслировать чью-то станцию - вот нашёл, что для icecast есть клиент: http://icecast.org/ices.php, он же: /usr/ports/audio/ices
Может брать звук со звуковой карты (mic, line-in, cd) или из файлов согласно плейлисту, делать из него mp3 или ogg поток и отправлять на icecast.

Мфынф, 2016-10-21 в 2:36:14

Афтар еблан сцко убейся нахуй

ra, 2023-11-20 в 10:22:28

Интересно, у вас был какой-то бэкграунд? В то время, лет так 25 назад, работал на радио и пытался разобраться с этим, в общем разобрался, но голову себе сломал. Сейчас всё это уже не кажется мегасложным и филькиной грамотой, особенно диагностика, но тогда...



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0637 секунд
Из них PHP: 30%; SQL: 70%; Число SQL-запросов: 86 шт.
У Вас отключено GZIP-сжатие в браузере. Размер страницы 63233