Re-broadcast Icecast2
от Илия Няголов на ное..13, 2007, категории Линукс
Накратко да обясня, преди време един от клиентите ни искаше интернет радио. В смисъл той да си направи плей-листа и посредством нея shoutcast да излъчва тези песни от localftp:8000. Точно как става това сега няма да обяснявам защото не засяга темата, просто реших да му изпълня това желание и толкоз. Но още първата седмица ми се стори много тъпо така понеже както винаги бях много зает го зарязах така да си дрънка там. Въпреки че ми заемаше 10% от процесорното време което не ме радваше хич (бе от самото начало не ми хареса тоя shoutcast, затворен код какво да кажа повече … 🙁 ), така си работи няколко месеца.
Та миналата седмица си викам на акъла, няма ли да е по хубаво да захапя няколко истински интернет радия и да ги препредавам от localftp:8000. По този начин клиентите ми на по нисък тарифен план, ще могат да спестят малко от личния си интернет трафик, които е неограничен по трафик и време но лимитиран по скорост по обясними причини :).
Инсталирах си Icecast2.
#първо реших да проверя имам ли го тоя пакет и с какви опции ще се компилира
emerge -pv icecast
[ebuild R ] net-misc/icecast-2.3.1-r1 USE=“-theora* -yp*“
#Както винаги ми хареса всичко 🙂 и го инсталирах
emerge icecast
# след 1мин всичко бе6ше инсталирано
След като инсталирах Icecast си направих копие на конфигурационните файлове
cp -R /etc/icecast2 /etc/icecast2_org
След 5 минутки и малко повече 🙂 , намерих в нета че опцията която прави тези хубави неща е „Icecast 2 Relaying“.
Отидох на техния сайт и си прочетох набързо документацията:
http://www.icecast.org/docs/icecast-2.3.1/icecast2_relay.html
Type of Relays
There are two types of relays that icecast supports. The first type is when both master and slave servers are icecast2 servers. In this case, a „master-slave“ relay can be setup such that all that needs to be done is configure the slave server with the connection information (serverip:port) of the master server and the slave will mirror all mountpoints on the master server. The slave will also periodically check the master server to see if any new mountpoints have attached and if so will relay those as well. The second type of relay is a „single-broadcast“ relay. In this case, the slave server is configured with a serverip+port+mount and only the mountpoint specified is relayed. In order to relay a broadcast stream on a Shoutcast server, you must use the „single-broadcast“ relay and specify a mountpoint of „/“.
Setting Up A Master-Slave Relay
In order to setup a relay of this type both servers (the one you wish to relay and the one doing the relaying) need to be icecast2 servers. The following configuration snippet is used as an example:
<master-server>192.168.1.11</master-server>
<master-server-port>8001</master-server-port>
<master-update-interval>120</master-update-interval>
<master-password>hackme</master-password>Setting Up A Single-Broadcast Relay
In this case, the master server need not be an icecast2 server. Supported master servers for a single-broadcast relay are Shoutcast, Icecast1.x, and of course Icecast2. The following configuration snippet is used as an example:
<relay>
<server>192.168.1.11</server>
<port>8001</port>
<mount>/example.ogg</mount>
<local-mount>/different.ogg</local-mount>
<relay-shoutcast-metadata>0</relay-shoutcast-metadata>
</relay>
От горе написаното разбрах, че вариантите са два.
Първия вариант отсреща главния сървър който излъчва трябва да е Icecast2, Icecast1.x или Shoutcast не стават (Icecast2 to Icecast2 only). Тоя вариант на мен не ми харесва лично, защото почети всички Icecast2 сървъри излъчват поне по 5 6 радия наведнъж, а на мен по някога канала не ми го позволява :(. Другото което тоя трябва да ми даде паролата до неговия Icecast2 сървър, аз не мисли и да е искам :).
Ясно е че втория вариант е моето решение, чрез него мога единични станции да препредавам, както и не ми трябват никакви пароли, което може само да ме радва :).
Ето го най-после и моя напълно работещ конфигурационен файл.
# cat /etc/icecast2/icecast.xml
<icecast>
<limits>
<clients>320</clients>
<sources>30</sources>
<threadpool>5</threadpool>
<queue-size>524288</queue-size>
<client-timeout>30</client-timeout>
<header-timeout>15</header-timeout>
<source-timeout>10</source-timeout>
<burst-on-connect>1</burst-on-connect>
<burst-size>524288</burst-size>
</limits><authentication>
<source-password>vrusiasam</source-password>
<relay-password>vrusiasam</relay-password>
<admin-user>admin</admin-user>
<admin-password>vrusiasam</admin-password>
</authentication><hostname>192.168.10.100</hostname>
<listen-socket>
<port>8000</port>
</listen-socket><relays-on-demand>1</relays-on-demand>
<relay>
<server>80.72.68.217</server>
<port>80</port>
<mount>/bgradio.ogg</mount>
<local-mount>/bgradio.ogg</local-mount>
<on-demand>0</on-demand>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay><relay>
<server>80.72.68.217</server>
<port>80</port>
<mount>/nova.ogg</mount>
<local-mount>/nova.ogg</local-mount>
<on-demand>0</on-demand>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay><relay>
<server>80.72.68.217</server>
<port>80</port>
<mount>/radio1.ogg</mount>
<local-mount>/radio1.ogg</local-mount>
<on-demand>0</on-demand>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay><relay>
<server>80.72.68.217</server>
<port>80</port>
<mount>/nrj.ogg</mount>
<local-mount>/nrj.ogg</local-mount>
<on-demand>0</on-demand>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay><relay>
<server>80.72.68.217</server>
<port>80</port>
<mount>/veronika.ogg</mount>
<local-mount>/veronika.ogg</local-mount>
<on-demand>0</on-demand>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay><relay>
<server>80.72.68.217</server>
<port>80</port>
<mount>/retroradio.ogg</mount>
<local-mount>/retroradio.ogg</local-mount>
<on-demand>0</on-demand>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<fileserve>1</fileserve><paths>
<basedir>/usr/share/icecast</basedir>
<logdir>/var/log/icecast</logdir>
<webroot>/usr/share/icecast/web</webroot>
<adminroot>/usr/share/icecast/admin</adminroot>
<pidfile>/usr/share/icecast/icecast.pid</pidfile>
<alias source=“/“ dest=“/status.xsl“/>
</paths><logging>
<accesslog>access.log</accesslog>
<errorlog>error.log</errorlog>
<loglevel>4</loglevel>
<logsize>10000</logsize>
<logarchive>1</logarchive>
</logging><security>
<chroot>0</chroot>
<changeowner>
<user>icecast</user>
<group>nogroup</group>
</changeowner>
</security>
</icecast>