streaming

RÀDIO A TRAVÉS DE LA XARXA AMB ICECAST

Icecast és un servidor d'streaming de formats multimèdia de la fundació xipgh.org . Actualment suporta audio mp3 i ogg vorbis , i video en theora . Icecast, entre moltes altres coses, ens permet de forma senzilla montant-se la nostra pròpia emisora de ràdio per Internet, bé sigui en directe o amb una playlist amb la música emmagatzemada al nostre disc dur. 

L'esquema funcional de la ràdio que es monta en aquest document amb Icecast és el mostrat per la imatge. On tenim el servidor d'streaming, que serà Icecast, un client que ens genera la font a emetre (source client, o streamer), i finalment el(s) client(s) que rebràn l'audió retransmès per Icecast. Totes aquestes comunicacions es fan per http. Podem imaginar l'streamer com l'estudi de ràdio on s'enregistra el sò i s'envia a un repetiodor de ràdio. La funció d'aquest la faria el servidor d'streaming, que envia el sò rebut als usuaris, que serien com els aparells de ràdio que simplement es limiten a “sintonitzar” una emisora concreta i reproduir-la. En el cas d'Icecast podem tenir varis streamers enviant fluxs d'àudio a un mateix servidor d'streaming, i aquest fent streaming d'aquest diferents audios simultàneament.

 

 
 

Per als tres elements del sistema tenim vàries opcions, algunes lliures i altres no. Partint de la base que volem montar un servidor Icecast, veiem algunes de les opcions que tenim per als altres dos elements:

 

·Source Clients

    -ices

    -DarkIce (darksnow

    -ezstream

    -vlc

    -muse

    -winamp (amb plugins)

    ...

 

·Clients

    ·xmms

    ·vlc

    ·mplayer

    ·winamp

    ....

Més info

Per tal de montar la nostra pròpia ràdio, la feina està bàsicament  en configurar el servidor d'stremaing Icecast, i el(s) source client. Primer de tot doncs, veiem com configurar de forma bàsica el servidor. (NOTA: Tots els passos que es mostren a continuació s'han fet amb màquines Ubuntu).

 
 

·INSTAL·LACIÓ i CONFIGURACIÓ de ICECAST2: (ubuntu feisty server)

Primer instal·lem l'icecast:

 

apt-get install icecast2

 

L'instal·lació ens haurà creat el directori /etc/icecast2, on tenim tots els fitxers de configuració. En el directori /var/log/icecast2, com sempre, hi tindrem els fitxers logs. I finalment, /usr/bin/icecast2 l'executable.

En el directori /etc/icecast2 hi trobem el fitxer icecast.xml, on configurem els paràmetres del servidor streaming. En principi, amb la configuració per defecte, ens hauria de funcionar, però l'adaptem una mica:

-Canviem els passwords que ens venen per defecte en la part 'authentication': Els streamers (o sources, o clients font) es connecten al servidor amb el nom d'usuari 'source', el password d'admin és el que utilitzarem com administradors en l'accés web, i el relay, és el password que utilitzen els relays (en el nostre cas no utilitzem aquesta funció, però és aconsellable canviar el password):

 

<authentication>

    <source-password>nou_password_source</source-password>

    <relay-password>nou_password_relay</relay-password>

    <admin-user>admin</admin-user>

    <admin-password>nou_password_admin</admin-password>

</authentication>

 

-Si volem canviar el port TCP per on escoltarà l'streaming canviem el valor de port dins el listen-socket, per defecte és el port 8000.
 

<listen-socket>

    <port>8000</port>

</listen-socket>

 
 
-En el nostre cas també canviarem el hostname (no és imprescindible):
 
<hostname>poperbu.homedns.org</hostname>
 
-Dins de paths es defineixen les rutes que utilitza icecast per a diferents tasques, en el nostre cas deixem els directoris que ens venen per defecte:
 

<paths>

    <basedir>/usr/share/icecast2</basedir>

    <logdir>/var/log/icecast2</logdir>

    <webroot>/usr/share/icecast2/web</webroot>

    <adminroot>/usr/share/icecast2/admin</adminroot>

    <alias source="/" dest="/status.xsl"/>

</paths>

 
 
 
-Finalment, l'últim paràmetre que modificarem serà el número màxim de clients, que està dins de <limits>, ja que per defecte són 100, el rebaixarem a 10:
 

<limits>

    <clients>10</clients>

    ......

</limits>

 

Hi ha molts més paràmetres que ens permeten configuracions més complexes, o que ens permeten adaptar-les més segons les necessitats que tinguem:

http://www.icecast.org/docs/icecast-2.3.1/icecast2_config_file.html

Un cop tenim la configuació bàsica enllestida, podem posar en marxa el servidor. Primer però, editem el fitxer /etc/default/icecast2 i posem el valor “ENABLE=true”. Ara ja podem posar en marxa el servidor icecast:

/etc/init.d/icecast2 start

 Ara si des del navegador accedim a http://ip_Servidor:8000, s'ens mostrarà la interficie web d'icecast. On podem administrar mínimament el servidor, i veure'n l'estat.

 

·INSTAL·LACIÓ i CONFIGURACIÓ de SOURCE CLIENTS per a ICECAST2:

Ara que tenim el servidor IceCast funcionant, aquest està esperant que algun source client (streamer) li “injecti” algun flux multimèdia per tal de retransmetre'l cap els clients. Com ja hem dit, per montar aquests sources tenim vàries opcions. Ices és la opció que ens ofereix el mateix icecast. Però també tenim les opcions de winamp (amb un plugin especial), muse, videolan, darkice, ezstream,etc.. Aquest source client tant pot ser la mateixa màquina on hi ha corrent el IceCast, com una altra màquina, ja que la comunicació es fa per tcp.

En el nostre cas veurem 2 d'aquestes opcions: darkIce (+darksnow) i ezstream:

DARKICE i DARKSNOW

En aquest cas, volem montar una radio en directe, per tant darkice capturarà el sò del dispositiu d'entrada d'audio (/dev/dsp), ho montarem al mateix servidor on hi ha l'IceCast. DarkIce ens permet transmetre fluxes de ogg o bé mp3 cap el IceCast.

Instal·lem DarkIce :

 

apt-get install darkice

Seguidament hem d'editar (crear) el fitxer de configuració de darkice per tal de que es pugui comunicar amb el servidor Icecast (/etc/icecast2/darkice.cfg):

 
[general]

duration        = 0         # duration of encoding, in seconds.
                            # 0 means forever
bufferSecs      = 5         # size of internal slip buffer, in seconds

# this section describes the audio input that will be streamed
[input]
device          = /dev/dsp  # OSS DSP soundcard device for the audio input
sampleRate      = 44100     # sample rate in Hz. try 11025, 22050 or 44100
bitsPerSample   = 16        # bits per sample. try 16
channel         = 2         # channels. 1 = mono, 2 = stereo

# this section describes a streaming connection to an IceCast2 server
# there may be up to 8 of these sections, named [icecast2-0] . [icecast2-7]
# these can be mixed with [icecast-x] and [shoutcast-x] sections
[icecast2-0]
bitrateMode     = cbr       # average bit rate
format          = vorbis       # format of the stream: mp3
bitrate         = 128       # bitrate of the stream sent to the server
server          = localhost
                            # host name of the server
port            = 8000      # port of the IceCast2 server, usually 8000
password        = password_de_sources   # source password to the IceCast2 server
mountPoint      = directe_musa      # mount point of this stream on the IceCast2 server
name            = mp3 music test
                            # name of the stream
description     = mp3 music test
                            # description of the stream
url             = http://192.168.1.2
                            # URL related to the stream
genre           = test      # genre of the stream
public          = no        # advertise this stream?

[icecast2-1]
bitrateMode     = abr       # average bit rate
format          = vorbis    # format of the stream: ogg vorbis
quality         = 0.8       # encoding quality
bitrate         = 96        # bitrate of the stream sent to the server
server          = localhost
                            # host name of the server
port            = 8000      # port of the IceCast2 server, usually 8000
password        = password_de_sources   # source password to the IceCast2 server
mountPoint      = test.ogg  # mount point of this stream on the IceCast2 server
name            = ogg vorbis music test
                            # name of the stream
description     = ogg vorbis music test
                            # description of the stream
url             = http://test.mydomain.com
                            # URL related to the stream
genre           = music     # genre of the stream
public          = no        # advertise this stream?

 
Un cop configurat, ja podem arrencar darkice:
 
darkice -c /etc/icecast2/darkice.cfg
 

I des de qualsevol client ja podem escoltar la ràdio en directe. En el cas de vlc: menu fitxer, obre flux de xarxa, marquem checkbox de http, i introduïm l'adreça del servidor streaming seguit del punt de muntatge que hem definit a darkIce: 192.168.1.2:8000/test.

 

 
 

Darksnow és un GUI per darkice, que fa que la configuacció del darkice sigui molt més senzilla (sempre i quan tinguem les x's funcionant).

Instal·lem i executem darksnow: 

apt-get darksnow

darksnow

 

 

I a través de les pestanyes configurem el source:

 

 
 
 
 

Un cop configurats tots els paràmetres, cliquem a “start streaming”. I, al igual que en el cas anterior, des de qualsevol client podem accedir al servidor.

 

EZSTREAM

Ezstream és un dels client sources que té icecast.org. Aquest, va per línia de comandes, i la principal característica és el poc consum de cpu que té. Ens permet tant format ogg com mp3, en el meu cas com que tinc quasi tota la música en mp3, aquest source client, m'anirà de conya. (Ices2, només permet ogg, encara que ices0 sí que permet mp3). Amb ezstream deixarem una playlist com a font del streaming. Per tant sempre ens sonarà alguna cosa a la ràdio.

Primer baixem i instal·lem ezstream:

(haurem d'instal·lar algunes dependències, amb apt les he pogut instal·lar totes).

wget http://downloads.xiph.org/releases/ezstream/ezstream-0.4.0.tar.gz

mv ezstream-0.4.0.tar.gz /usr/local/src

tar xvfz ezstream-0.4.0.tar.gz

cd ezstream-04.0

./configure

make

make install

 

Ara cal editar el fitxer de configuració, en el nostre cas: /etc/icecast2/ezstream.cfg, per tal de que envii el flux al servidor Icecast. Anotar que ezstream estarà a la mateixa màquina que IceCast. Per fer una prova, li indiquem, que fagi streaming d'un sol fitxer mp3. La configuació del fitxer és la següent:

<ezstream>

<url>http://localhost:8000/test.mp3</url>

<sourcepassword>passwor_de_source</sourcepassword>

<format>MP3</format>

<filename>/etc/icecast2/samples/example1.mp3</filename>

<svrinfoname>musa Stream</svrinfoname>

<svrinfourl>http://musa.poperbu.net</svrinfourl>

<svrinfogenre>prova</svrinfogenre>

<svrinfodescription>provant ezstream</svrinfodescription>

<svrinfobitrate>192</svrinfobitrate>

<svrinfoquality>4.0</svrinfoquality>

<svrinfochannels>2</svrinfochannels>

<svrinfosamplerate>44100</svrinfosamplerate>

<svrinfopublic>1</svrinfopublic>

</ezstream>

 
 
Per començar a enviar el flux d'audio des de ezstream cap a icecast executem:
 
ezstream -c /etc/icecast2/ezstream.cfg
 

Amb qualsevol client, podem comprovar el funcionament, connectant-nos al punt de montatge indicat per ezstream, en aquest cas test.mp3:

 


 

Un cop hem comprovat que fa l'streaming bé, ara el que ens interessa és crear una playlist, amb tota la música que tenim i volem escoltar des de qualsevol lloc. Per tant, com que ezstream ens permet passar-li una llista, creem una llista amb tota la música que volem retransmetre, en format .m3u. Això ho podem fer automàticament amb qualsevol reproductor, com per exemple xmms. Modifiquem el fitxer de configuració del ezstream, i substituïm el fitxer mp3 per la playlist, en el nostre cas /etc/icecast2/musa_radio.m3u:

<ezstream>

<url>http://localhost:8000/radio_musa</url>

<sourcepassword>password_de_sources</sourcepassword>

<format>MP3</format>

<filename>/etc/icecast2/musa_radio.m3u</filename>

<svrinfoname>musa radio</svrinfoname>

<svrinfourl>http://musa.poperbu.net</svrinfourl>

<svrinfogenre>de tot una mica</svrinfogenre>

<svrinfodescription>musa's radio</svrinfodescription>

<svrinfobitrate>192</svrinfobitrate>

<svrinfoquality>4.0</svrinfoquality>

<svrinfochannels>2</svrinfochannels>

<svrinfosamplerate>44100</svrinfosamplerate>

<svrinfopublic>1</svrinfopublic>

</ezstream>

 

 

Tornem a executar ezstream per enviar el flux d'audio de la llista de reproducció cap al servidor icecast:

ezstream -c /etc/icecast2/ezstream.cfg &

I ja tenim la nostra radio funcionant, i repdroduint la nostra llista continuament:

 


 

Doncs ja hem vist com configurar una ràdio a través d'Internet, bé sigui en directe, com hem vist en el cas de DarkIce, o bé a través d'una playlist amb Ezstream. Tots els programes els hem utilitzat d'una forma molt bàsica, hi ha molts paràmetres configurables en tots els casos per ajustar les configuracion més adients en cada cas. Així, com també hi ha moltes més solucions per fer de client source de Icecast que no hem vist en aquest minihowto, com són vlc, muse, ices, winamp, i altres.

 

 

 

blog comments powered by Disqus

Additional information