Skip to main content

Servidor streaming con IceCast2 y DarkIce

Posted in

En este artículo se detallará la instalación de un servidor de audio streaming. Por streaming entendemos el poder escuhar sonido mediante un protocolo web sin necesidad de descargarlo. De manera que podemos montar nuestra propia radio por internet, o simplemente configurarnos un sistema para escuchar nuestra música desde cualquier sitio. Utilizaremos IceCast como servidor web de streaming, y DarkIce como codificador de audio. De manera que nos quedará una estructura: DarkIce -> IceCast -> Cliente Web


IceCast

Como ya hemos dicho, IceCast se encarga de servir el audio a los clientes web. Es principalmente un servidor HTTP capaz de contener varios mountpoints. Un "mountpoint" (punto de montaje) es un subdirectorio donde encontramos un hilo streaming concreto (source). Es decir, podriamos tener:

http://ServidorStreaming.com:8080/rock
http://ServidorStreaming.com:8080/jazz
http://ServidorStreaming.com:8080/clasica

El audio para cada uno de esos hilos los sirve un cliente codificador distinto. Existen varios softwars para ello, como LiveIce o DarkIce (el que utilizaremos).

1. Descargamos el código fuente de IceCast: http://www.icecast.org

2. Antes que nada, instalamos los siguientes paquetes que necesitaremos:


libxml2 libxslt1-dev libvorbis-dev curl 

3. Descomprimimos y compilamos:

tar xvzf icecast-2.*.tar.gz
cd icecast-2.*
./configure
make
sudo make install

Esto nos instalará IceCast en /usr/local

4. Configuramos

Editamos el fichero: /usr/local/etc/icecast.xml

En especial debemos modificar las siguientes líneas:

 <authentication>
		<source-password>SOURCE_PASS</source-password>
		<relay-password>RELAY_PASS</relay-password>
		<admin-user>admin</admin-user>
		<admin-password>ADMIN_PASS</admin-password>
 </authentication>
    SOURCE_PASS: El password que utilizarán los clientes codificadors
    RELAY_PASS: El password que utilizaran los relay servers (mirrors)
    ADMIN_PASS: El password per administrar/monitorizar via web
 <listen-socket>
	  <port>8080</port>
 </listen-socket>
 <mount>
	  <mount-name>/musica</mount-name>
	  <max-listeners>100</max-listeners>
 </mount>
    Donde /musica es uno de los mountpoints que utilizaremos



5. Creamos los directorios necesarios:


 sudo mkdir -p /usr/local/var/log/icecast
 sudo chown nobody /usr/local/var/log/icecast



6. Arrancamos


sudo -u nobody /usr/local/bin/icecast -b -c /usr/local/etc/icecast.xml

Ya tenemos IceCast escuchando en nuestro ordenador por el puerto 8080: http://localhost:8080

Pero como podemos comprobar en la pestaña "List Mounts", nos falta el cliente codificador


DarkIce

DarkIce se encarga de codificar el audio y enviarlo a IceCast, puede utilizar los siguientes formatos: LAME (mp3), Vorbis (ogg) o FAAC (aac)

Aunque siempre es mejor utilizar un formato libre como Vorbis, lo haremos con mp3 debido a que es el más extendido actualmente. Y como interfaz de sonido alsa, aunque también serviria jack o esd

Necesitamos los siguientes paquetes que instalaremos con nuestro gestor (¿apt?)

libtool autoconf alsa-lib alsa-utils alsa-lib-devel

LAME

Alguien un poco espavilado se dará cuenta que en esa lista falta el elemento esencial: LAME, vamos a compilarlo manualmente para que se integre mejor con darkIce. Descargamos las fuentes de: http://lame.sourceforge.net

tar xvzf lame-3.*
cd lame-3.*
./configure --with-fileio=lame --without-vorbis --disable-gtktest --prefix=/usr --enable-nasm --enable-mp3x
make
sudo make install

De vuelta a DarkIce

Descargamos el código fuente de DarkIce: http://code.google.com/p/darkice

Compilamos e instalamos

tar xvzf darkice-0.*.tar.gz
cd darkice-0.*
./configure --with-lame --with-alsa --with-debug --prefix=/usr
make
sudo make install
cp darkice.cfg /etc/darkice.cfg

Cuando hagamos el configure, hay que fijarse que realmente encuentra las cabeceras de LAME:

checking for lame library at /usr ... found at /usr 

Suponiendo como punto de montaje /musica, nos quedará el fichero de configuración /etc/darkice.cfg así:

 [general]
 duration        = 0       # duration of encoding, in seconds. 0 means forever
 bufferSecs      = 5         # size of internal slip buffer, in seconds
 reconnect       = yes       # reconnect to the server(s) if disconnected

 [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

 [icecast2-0]
 bitrateMode     = abr       # average bit rate
 format          = mp3    # format of the stream: ogg vorbis
 bitrate         = 64        # bitrate of the stream sent to the server
 server          = localhost # host name of the server                           
 port            = 8080      # port of the IceCast2 server, usually 8000
 password        = SOURCE_PASSWORD    # source password to the IceCast2 server
 mountPoint      = musica  # mount point of this stream on the IceCast2 server
 name            = musica # name of the stream
 description     = Radio Musica # description of the stream
 url             = http://localhost:8080/musica # URL related to the stream
 genre           = Radio    # genre of the stream
 public          = yes       # advertise this stream?

La configuración puede variar lijeramente para cada caso. Por ejemplo, en lugar de /dev/dsp puede ser /dev/dsp1

DarkIce empezará a codificar la entrada de audio /dev/dsp y la enviará a IceCast. Podemos escucharlo en la url:

 http://localhost:8080/musica

Ahora el resto es jugar un poco con alsamixer para reproducir lo que deseemos