Tag Archives: streaming

Creazione di una Web Radio completa

In questo articolo vi spiegherò come ho creato la mia web radio: Radio passaggio a Scirocco partendo da zero ed utilizzando supporti open-source e musica libera dai diritti d’autore.

Si parte inizialmente dalla filosofia e dalla possibilità o meno di “pagare”. Per avere una webradio “regolare” occorre essere iscritti alla SIAE. Ad oggi, per una radio da massimo 30 utenti simultanei NON COMMERCIALE bisogna pagare circa 300 euro l’anno.

Essendo il mio un progetto totalmente amatoriale e personale, ho deciso di evitare di pagare la SIAE e di utilizzare soltanto musica di artisti non iscritti alla SIAE (licenze creative common e aperte), però in caso vi interessasse qualcosa di più “main stram”, potete fare un giro nel sito di Mondo, che è molto ferrato in materia.

Per avere un po’ di buon “materiale” da suonare, mi sono fatto un giro su Free Music Archive, un database di musica gratuita che può essere riprodotta e scaricata gratis.

Al momento non prevedo di inserire delle trasmissioni “live“, ma di suonare musica a rotazione (un jukebox via internet insomma). Ho poi pensato che sarebbe stato meglio registrare le trasmissioni in locale e poi farle ruotare sul server. Questo perché non è facile con una strumentalizzazione amatoriale (pc + streaming server) creare buoni stacchi e tagli.

Come server utilizzerò una Debian Squeeze aggiornata, server web Apache e Icecast2 come server di streaming.

Per prima cosa installiamo icecast2 ed ices2, i due programmi che si occuperanno di effettuare lo streaming della musica ai vostri ascoltatori:

apt-get install icecast2 ices2

una volta installati, questi programmi vanno configurati. Si parte con il file di configurazione di icecast2: /etc/icecast2/icecast.xml. Le parti più importanti del file sono:

<--! massimo numero di clienti simultanei -->
<clients>100</clients>
<sources>2</sources>
<threadpool>5</threadpool>
<queue-size>902400</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>65535</burst-size>

<authentication>
<!-- Password di Ices2 -->
<source-password>sourcepass</source-password>
<!-- Password per Relay (inutilizzato al momento) -->
<relay-password>relaypass</relay-password>

<!-- Password per la web UI -->
<admin-user>admin</admin-user>
<admin-password>adminpass</admin-password>
</authentication>
<hostname>buleria.acido.be</hostname>

<listen-socket>
<port>8000</port>
<!-- <bind-address>109.169.37.166</bind-address> -->
<!-- <shoutcast-mount>/stream</shoutcast-mount> -->
</listen-socket>

Una volta modificato il file, lo avviamo:

/etc/init.d/icecast2 restart

Passiamo poi a ices2: prima di tutto creo il suo ambiente e mi prendo un file di configurazione standard:

mkdir -p /home/ices/music
cp /usr/share/doc/ices2/examples/ices-playlist.xml > /home/ices/

Inizio poi a modificare il file di configurazione. Ecco le parti più importanti:

<ices>
<!-- fork in background -->
<background>1</background>
<!-- location dei logs -->
<logpath>/var/log/ices</logpath>
<logfile>ices.log</logfile>
<!-- 1=error,2=warn,3=info,4=debug -->
<loglevel>4</loglevel>

<stream>

<input>
<module>playlist</module>
<param name="type">basic</param>
<param name="file">/home/ices/playlist.txt</param>
<!-- random play -->
<param name="random">1</param>
<!-- Se la playlist viene cambiata, il playback inizia da capo -->
<param name="restart-after-reread">0</param>
<!-- Se è messo a 1, riproduce tutta la playlist e poi esce -->
<param name="once">0</param>
</input>
<instance>
<!-- Credenziali per il collegamento ad icecast2 -->
<hostname>localhost</hostname>
<port>8000</port>
<password>sourcepass</password>
<mount>/radio</mount>
<reconnectdelay>2</reconnectdelay>
<reconnectattempts>5</reconnectattempts>
<maxqueuelength>80</maxqueuelength>
<encode>
<!-- Bitrate -->
<nominal-bitrate>64000</nominal-bitrate>
<samplerate>44100</samplerate>
<channels>2</channels>
</encode>
</instance>

</stream>
</ices>

A questo punto dobbiamo caricare la nostra prima canzone! Ices2 utilizza OGG come formato musicale open source, quindi probabilmente dovremo convertire il nostro mp3 prima di poterlo mettere in playlist:

mpg321 -q nomefile.mp3 -w - | oggenc -b256 -o nomefile.ogg -

e poi metterlo in playlist:

ls ./*.ogg > /home/ices/playlist.txt

Nel mio caso, dopo qualche test ho preferito effetturare l’encoding del file a 256kb/s ed uno stream a 64kb/s. Questo mi permette di risparmiare banda utilizzando uno stream bitrate basso, ma di avere comunque una buona qualità di ascolto.

Feedbacks sono ben accetti.

Infine avviamo ices2:

ices2 /home/ices/ices-config.xml

Proviamo ad aprire il nostro player musicale (iTunes, VLC, Winamp..), inserendo nel mio caso il seguente URL:

http://buleria.acido.be:8000/radio

Se tutto è andato bene, possiamo mettere l’avvio automatico di ices inserendo il comando nel file /etc/rc.local

Per fare questa operazione su un largo numero di files, mi sono creato uno scriptino in bash: mp32ogg.sh  che rinomina i files mp3 togliendo gli spazi, fa l’encoding dei files ogg inserendo anche gli ID3 ed infila tutto nella playlist di ices2.

Per poterlo usare, la cartella contenente i files mp3 non può avere spazi (mentre i nomi dei files sì) e lo script va lanciato con i path ASSOLUTI. Es:

sh mp32ogg.sh /home/ices/music/album_in_mp3

Il problema è che su Debian al momento, lo script ufficiale per fare encoding di files ogg – mp32ogg – è rotto e perl va in errore. Ho dovuto riparare da me.

Questo script è scritto “con la zappa”, ovvero fa uscire a video un sacco di errori, a volte mpg123 va in segfault, ed è successo che gli ID3 se non sono scritti bene uscissero errati, ma funziona nel 95% dei casi. Se qualcuno ha voglia e tempo di fargli un paio di fix ne sarei contento 😉

Potete controllare tutti i parametri della radio aprendo con un browser questo indirizzo:

http://buleria.acido.be:8000

Per entrare nell’area admin dovrete loggarvi con “admin” e la “adminpass” che avete specificato nel file di configurazione di icecast2

A questo punto, dopo aver messo in piedi la vostra radio bisogna passare al sito web.

Ho pensato che, essendo una web radio, la parte più importante debba essere la musica, quindi ho voluto creare una pagina web molto semplice dove ci fosse solo il player in html5 e qualche info:

http://pas.acido.be

Una cosa che in una web radio è molto utile è l’indicazione in tempo reale della canzone che si sta ascoltando. Per fare questo, ho trovato uno script da qualche parte nel web che prende le info di http://buleria.acido.be:8000/status.xsl e le inserisce in un html. Nella pagina index ho poi inserito un javascript che fa l’update del DIV dove verranno stampate le informazioni.

Per comodità potete scaricare il sorgente completo di http://pas.acido.be e modificarlo a vostro piacimento.

A questo punto la radio è completa! Buon divertimento!

Share This: