Instalar icecast2, servidor de radio en Ubuntu 11.10

   Icecast2 es un servidor media streaming que soporta los formatos ogg y mp3. Es accesible desde un navegador web por lo que cualquier usuario se puede conectar a nuestro PC y escuchar los contenidos que emitamos en tiempo real, es decir que podemos tener nuestra propia radio por internet.

Icecast2 necesita lo que se denomina un cliente streaming que le entregue contenidos para que funcione. Estos contenidos pueden ser archivos ubicados en una carpeta en el PC, un reproductor de CD, un micrófono conectado a la tarjeta de sonido.
El cliente “oficial” de Icecast2 es Ices2, aunque existen otros como por ejemplo Muse. Existen dos versiones, una le suministra archivos en formato mp3, la otra versión le suministra archivos en formato ogg.

 

PASOS A SEGUIR

1.- INSTALACIÓN DE icecast2, ices2

2.- CONFIGURACIÓN DE icecast2

3.- HABILITAR EL SERVICIO

4.- CONFIGURACIÓN DEL CLIENTE  ices2 PARA icecast2

5.- CONFIGURACIÓN DEL ARCHIVO DE CANCIONES A REPRODUCIR (playlist)

6.- ARRANCAR EL CLIENTE ices2

7.- DETENER icecast2 ,  ices2

8.- INICIAR icecast2 , ices2 AL INICIAR UBUNTU

————————————————————————————————

 

1.- INSTALACIÓN DE icecast2, ices2
Instalamos icecast2e, ices2 y herramientas vorbis para manejo de formatos de audio libres (ogg). Nos vamos a una terminal y tecleamos

sudo apt-get install icecast2 ices2 vorbis-tools

 

2.- CONFIGURACIÓN DE icecast2
Icecast2 viene con los archivos de configuración ubicados en /etc/icecast2. Debemos configurar los password para las fuentes y para el administrador, así como el nombre del servidor, editando el archivo /etc/icecast2/icecast.xml

sudo gedit /etc/icecast2/icecast.xml

 

♦ Buscamos la sección  <authentication>  y configuramos los siguientes parámetros

PASSWORD_FUENTES , PASSWORD_RELAY , ADMINISTRADOR, PASSWORD_ADMINISTRADOR

<authentication>
<source-password>PASSWORD_FUENTES</source-password>
<relay-password>PASSWORD_RELAY</relay-password>
<admin-user>ADMINISTRADOR</admin-user>
<admin-password>PASSWORD_ADMINISTRADOR</admin-password>
</authentication>

 

♦ Buscamos la sección <hostname> Indicamos el nombre del servidor que vamos a utilizar. Si emitimos desde nuestro equipo en local ponemos localhost

It affects mainly the urls generated by Icecast for playlists and yp listings. –>
<hostname>http://www.miservidor.com</hostname>

 

♦ Buscamos la sección <listen-socket> Indicamos el puerto desde el que emitimos. Si emitimos desde nuestro equipo en local podemos dejar el 8000

         <listen-socket>
               <port>8000</port>

 

3.- HABILITAR EL SERVICIO.

Nos vamos a una terminal y editamos el archivo /etc/default/icecast2  poniendo la variable  ENABLE  a  true  que por defecto viene inhabilitada.

sudo gedit /etc/default/icecast2

# Edit /etc/icecast2/icecast.xml and change at least the passwords.
# Change this to true when done to enable the init.d script
ENABLE=true

 

icecast2 viene con un servicio montado en  /etc/init.d/icecast2 (el cual acabamos de habilitar), ahora lo activamos

sudo /etc/init.d/icecast2 start

En consola nos mostrará

Starting icecast2:

 

Si ahora nos vamos a la barra de direcciones del navegador web y tecleamos  http://localhost:8000 , si todo fue correcto veremos la página de icecast , desde la cual tenemos acceso a administración, listas de reproducción, conexiones clientes

Como vemos aún no tenemos ningún Active Mountpoints, lo cual conseguiremos tras instalar el cliente ices2 y establezcamos las “lista de canciones

4.- CONFIGURACIÓN DEL CLIENTE  ices2 PARA icecast2

Ices2 no viene con archivos de configuración por defecto. Lo que si trae en  /usr/share/doc/ices2/examples  son archivos de ejemplo para configuraciones de alsa (ices-alsa.xml), oss (ices-oss.xml) y playlist (ices-playlist.xml).

Vamos a utilizar esta última: creamos una carpeta en /etc llamada ices2 ,copiamos allí el archivo y le otorgamos permisos

sudo mkdir /etc/ices2

sudo cp /usr/share/doc/ices2/examples/ices-playlist.xml /etc/ices2/

sudo chmod +x  /etc/ices2/ices-playlist.xml

A continuación editamos el archivo y lo configuramos

sudo gedit /etc/ices2/ices-playlist.xml

 

Es muy sencillo, vamos a ir viéndolo por secciones:

♦ En la sección <background> cambiamos el 0 por 1, de esta forma evitaremos que se mantenga la terminal abierta hasta que lo cerremos.

<background>1</background>

 

♦ En la sección <metadata> configuramos:

<name>NOMBRE ESTACION</name>
<genre>GENERO ESTACION</genre>
<description>DESCRIPCION ESTACION</description>

 

♦ En la sección <input> configuramos:

<param name=”file”>/miruta/playlist.txt</param>
<param name=”random”>1</param>
<param name=”once”>0</param>

Establecemos la ruta al archivo que contiene la lista de canciones: /miruta/playlist.txt

Random: indicamos si queremos que la reproducción de los archivos sea secuencial (0) o aleatoria (1).

Once: Indicamos si queremos que la emisora deje de emitir al terminar la lista de reproducción (1) o que continúe emitiendo sin interrupción (0).

 

♦ En la sección <instance> configuramos:

<hostname>localhost</hostname>
<port>8000</port>
<password>PASSWORD_FUENTES</password>
<mount>/lista_de_reproduccion.ogg</mount>

La dirección del servidor: localhost  (porque lo tengo en local, si lo instalásemos en un hosting pondríamos la URL)
El puerto: por defecto trae 8000 (lo dejamos tal cual)
El password de las fuentes: PASSWORD_FUENTES (es el mismo password que hemos puesto en /etc/icecast2/icecast.xml)

En <mount></mount> debemos elegir el ‘mount point’ que queramos para emitir. Podemos poner algo descriptivo (sin espacios y acabado en .ogg), por ejemplo lista_de_reproduccion.ogg

 

Y aquí está el archivo completo:

<?xml version="1.0"?>
<ices>
    <!-- run in background -->
    <background>1</background>
    <!-- where logs, etc go. -->
    <logpath>/var/log/ices</logpath>
    <logfile>ices.log</logfile>
    <!-- 1=error,2=warn,3=info,4=debug -->
    <loglevel>4</loglevel>
    <!-- set this to 1 to log to the console instead of to the file above -->
    <consolelog>0</consolelog>

    <!-- optional filename to write process id to -->
    <!-- <pidfile>/home/ices/ices.pid</pidfile> -->

    <stream>
        <!-- metadata used for stream listing (not currently used) -->
        <metadata>
            <name>Radio La Vida es TUX</name>
            <genre>Linux Ubuntu Radio</genre>
            <description>Música para relajarse</description>
        </metadata>

        <!-- input module

            The module used here is the playlist module - it has 
            'submodules' for different types of playlist. There are
            two currently implemented, 'basic', which is a simple
            file-based playlist, and 'script' which invokes a command
            to returns a filename to start playing. -->

        <input>
            <module>playlist</module>
            <param name="type">basic</param>
            <param name="file">/home/greiscool/musicaradio/playlist.txt</param>
            <!-- random play -->
            <param name="random">1</param>
            <!-- if the playlist get updated that start at the beginning -->
            <param name="restart-after-reread">0</param>
            <!-- if set to 1 , plays once through, then exits. -->
            <param name="once">0</param>
        </input>

        <!-- Stream instance
            You may have one or more instances here. This allows you to 
            send the same input data to one or more servers (or to different
            mountpoints on the same server). Each of them can have different
            parameters. This is primarily useful for a) relaying to multiple
            independent servers, and b) encoding/reencoding to multiple
            bitrates.
            If one instance fails (for example, the associated server goes
            down, etc), the others will continue to function correctly.
            This example defines two instances as two mountpoints on the
            same server.  -->
        <instance>
            <!-- Server details:
                You define hostname and port for the server here, along with
                the source password and mountpoint.  -->
            <hostname>localhost</hostname>
            <port>8000</port>
            <password>PASSWORD_FUENTES</password>
            <mount>/lista_de_reproduccion.ogg</mount>

            <!-- Reconnect parameters:
                When something goes wrong (e.g. the server crashes, or the
                network drops) and ices disconnects from the server, these
                control how often it tries to reconnect, and how many times
                it tries to reconnect. Delay is in seconds.
                If you set reconnectattempts to -1, it will continue 
                indefinately. Suggest setting reconnectdelay to a large value
                if you do this.
            -->
            <reconnectdelay>2</reconnectdelay>
            <reconnectattempts>5</reconnectattempts> 

            <!-- maxqueuelength:
                This describes how long the internal data queues may be. This
                basically lets you control how much data gets buffered before
                ices decides it can't send to the server fast enough, and 
                either shuts down or flushes the queue (dropping the data)
                and continues. 
                For advanced users only.
            -->
            <maxqueuelength>80</maxqueuelength>

            <!-- Live encoding/reencoding:
                Currrently, the parameters given here for encoding MUST
                match the input data for channels and sample rate. That 
                restriction will be relaxed in the future.
            -->
            <encode>  
                <nominal-bitrate>64000</nominal-bitrate> <!-- bps. e.g. 64000 for 64 kbps -->
                <samplerate>44100</samplerate>
                <channels>2</channels>
            </encode>
        </instance>

    </stream>
</ices>

Creamos el archivo log para ices

sudo mkdir /var/log/ices

y le damos permisos, si no lo hacemos al arrancar ices2 nos lanzará un ERROR

sudo chmod 777 /var/log/ices

 

5.- CONFIGURACIÓN DEL ARCHIVO DE CANCIONES A REPRODUCIR (playlist)

Para ello tenemos dos opciones:

Opción a) Creamos la ruta hacia un archivo con la lista de canciones con el comando siguiente

sudo find /RUTA_DONDE_ESTAN_LAS_CANCIONES -iname “*.ogg” > /RUTA_DONDE_TENGO_EL_ARCHIVO_LISTA/LISTA.TXT

 

Opción b) Editamos el archivo y tecleamos la ruta completa para cada canción

sudo gedit /RUTA_DONDE_TENGO_EL_ARCHIVO_LISTA/LISTA.TXT

/RUTA_DONDE_ESTAN_LAS_CANCIONES/nombre_cancion1.ogg
/RUTA_DONDE_ESTAN_LAS_CANCIONES/nombre_cancion2.ogg
…..

 

 

6.- ARRANCAR  ices2

Tecleando en consola

sudo ices2 /etc/ices2/ices-playlist.xml &

 

Si ahora nos vamos a la página (en este caso http://localhost:8000 veremos que aparece el enlace http://localhost:8000/lista_de_reproduccion.ogg , con el que podemos conectarnos a la radio.

 7.- DETENER icecast2 ,  ices2

Si deseamos detener  icecast2  tecleamos en una terminal

sudo /etc/init.d/icecast2 stop

nos responderá

Stopping icecast2: icecast2.

 

Si deseamos detener  ices2  tecleamos en una terminal

ps ax | grep ices2

nos responderá dandonos el pid del proceso, algo como lo siguiente

23242 pts/0    S+     0:00 grep  – -color=auto ices2

(23242 es el pid que me ha dado,  debemos comprobarlo en el momento que deseemos cerrarlo)

Este número nos permitirá detener el ices2 (la emisión) cuando deseemos, tecleando en consola

sudo kill -9  23242

 

8.- INICIAR icecast2 , ices2 al iniciar Ubuntu

Creamos un archivo icecast2 y lo colocamos en  /etc/init.d , tecleando en consola

sudo gedit /etc/init.d/icecast2

con las siguientes líneas de código (aunque tiene una cabecera que identifica al autor original, ha sido modificado posteriormente en varias ocasiones, incluso yo mismo lo he modificado) es funcional si se han seguido los pasos anteriores.

#! /bin/sh
### BEGIN INIT INFO
# Provides:          icecast2
# Required-Start:    $remote_fs $network
# Required-Stop:     $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Starts the icecast audio streaming server daemon
### END INIT INFO
#
# icecast2
#
#                Written by Miquel van Smoorenburg <miquels@cistron.nl>.
#                Modified for Debian
#                by Ian Murdock <imurdock@gnu.ai.mit.edu>.
#
#                Further modified by Keegan Quinn <ice@thebasement.org>
#                for use with Icecast 2
#

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/icecast2
NAME=icecast2
DESC=icecast2
ICES=/usr/bin/ices2
ICES_CONFIGFILE=/etc/ices2/ices-playlist.xml

test -x $DAEMON || exit 0

# Defaults
CONFIGFILE="/etc/icecast2/icecast.xml"
CONFIGDEFAULTFILE="/etc/default/icecast2"
USERID=icecast2
GROUPID=icecast
ENABLE="false"

# Reads config file (will override defaults above)
[ -r "$CONFIGDEFAULTFILE" ] && . $CONFIGDEFAULTFILE

if [ "$ENABLE" != "true" ]; then
        echo "$NAME daemon disabled - read $CONFIGDEFAULTFILE."
        exit 0
fi

set -e

case "$1" in
  start)
        echo -n "Starting $DESC: "
        start-stop-daemon --start --quiet --chuid $USERID:$GROUPID \
                --exec $DAEMON -- -b -c $CONFIGFILE
        sleep 3
        start-stop-daemon --start --quiet --exec $ICES $ICES_CONFIGFILE
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --stop --oknodo --quiet --exec $ICES

        start-stop-daemon --stop --oknodo --quiet --exec $DAEMON
        echo "$NAME."
        ;;
  reload|force-reload)
        echo "Reloading $DESC configuration files."
        start-stop-daemon --stop --oknodo --quiet --exec $ICES
        start-stop-daemon --stop --signal 1 --quiet --exec $DAEMON
        sleep 3
        start-stop-daemon --start --quiet --exec $ICES $ICES_CONFIGFILE
        ;;
  restart)
        echo -n "Restarting $DESC: "
        start-stop-daemon --stop --oknodo --quiet --exec $ICES

        start-stop-daemon --stop --oknodo --quiet --exec $DAEMON
        sleep 3
        start-stop-daemon --start --quiet --chuid $USERID:$GROUPID \
                --exec $DAEMON -- -b -c $CONFIGFILE
        sleep 3
        start-stop-daemon --start --quiet --exec $ICES $ICES_CONFIGFILE
        echo "$NAME."
        ;;
  *)
        echo "Usage: $0 {start|stop|restart|reload|force-reload}" >&2
        exit 1
        ;;
esac

exit 0

Una vez creado el archivo hacemos que se agregue como servicio y así será iniciado durante el arranque de Ubuntu.

sudo update-rc.d icecast2 defaults

 

Listo, cada vez que arranquemos Ubuntu ya tendremos icecast2 y su cliente ices2 operativos.

Fuente -> icecast

==========================================================================

Nota.-  En este artículo se muestra como emitir desde una lista de reproducción (playlist); en el artículo  Transmitir radio en vivo con Icecast2 desde Linux Ubuntu   se detalla como emitir radio en vivo (live)

==========================================================================

About these ads

Publicado el 9 diciembre, 2011 en Linux, Ubuntu, Web y redes y etiquetado en , , , , , , , . Guarda el enlace permanente. 19 comentarios.

  1. Hola amigo Greiscool. Estupendo artículo, como siempre.

    Sabes que te lo han copiado tal cual, han cambiado un par de imágenes, pero sin duda es éste artículo (la estructura de tus artículos y tu forma de expresarte es inconfundible), y ni te han mencionado. Lo he visto aquí:(he sustituido http por **** para no poner un enlace directo)

    ****://jalapalug.slgt.org/web/index.php?option=com_content&view=article&id=290:instalar-icecast2-servidor-de-radio-en-ubuntu-1110&catid=28:instalaciones-y-configuraciones-de-gnulinux&Itemid=41

    Les he dejado un comentario (que no se si publicarán), porque no me parece bien lo que han hecho.
    Un saludo,
    Jaime

    • Hola Jaime. La verdad es que estoy alucinando, no me lo terminaba de creer. Esto si que es un plagio en toda regla. Ya sabes que no me importa que utilicen mis aportes, lo que hago es para todo el mundo….ahora que, copiar el artículo tal cual y encima no citar la fuente dice mucho (o más bien muy poco de esta gente)…que le vamos a hacer…

      Un saludo compañero.

  2. hola como estas, esta muy bueno el tutorial y es facil de entender, te hago una pregunta conoces algun programa para transmitir video en vivo , que soporte camaras con conexion firewire , probe vlc pero no funciona muy bien la camara, estaria bueno que hagas un tutorial como este sobre como transmitir video en vivo, chau muchas gracias

  3. Hola jeronimoacero, gracias por manifestar tu interés.
    Icecast2 también puede utilizarse como servidor de vídeo, para ello debemos instalar los codecs de compresión de vídeo Theora.

    “Theora es un formato de compresión de video libre y abierto de la Fundación Xiph.org … puede ser utilizado para distribuir películas en línea y video y en disco…”

    Creo que esto puede responder a tu pregunta.

    He probado a transmitir vídeo “desde un archivo en disco” utilizando Theora, pero ahora me ha picado el gusanillo y ….

    Trataré de preparar un tutorial sobre como transmitir vídeo en vivo. Todo lo que recogen mis artículos está basado en mi experiencia personal (de esta forma puedo ofrecer toda la información necesaria paso a paso) por lo que es posible que me lleve un tiempo.

    Gracias y un saludo.

  4. Muchisimas gracias por este increible tutorial :D
    Me ha ayudado un monton.

    te lo agradezco de corazon ^^

  5. Hola,
    Primero que nada, felicitarte por el post, muy buena calidad.

    Ahora quería comentarte algo que me pasa. Tengo Ubuntu 12.04 instalado en una pc donde quiero correr el servidor de audio.

    Instale todo tal cual esta en tu manual y en otros que fui consultando luego, primero Icecast2, el cual entrando en localhost pude ver bien que estaba funcionando.
    Hice un dominio de listen2myradio para hacer una prueba real en web, lo configure con ese host y puerto.

    El problema surge cuando quiero correr IceS2, el log me dice lo siguiente:

    [2012-05-31 18:28:42] INFO playlist-builtin/playlist_read Currently playing “/etc/ices2/music/02.ogg”
    [2012-05-31 18:28:42] EROR input/input_calculate_ogg_sleep Timing control: corrupt timing information in vorbis file, cannot stream.

    Así con todos los temas que cargue en la carpeta.

    ¿Sabes cual podría ser el problema? No he encontrado en Internet alguna solución al problema.

    Saludos
    Gracias

    • Hola Mariano, muchas gracias.
      Para emitir en la web puedes hacerlo desde tu propio equipo. Para ello solo tienes que cambiar “localhost” por tu “ip pública” en los archivos “icecast.xml” y “ices-playlist.xml”, abrir el puerto en tu router para salida/entrada y ya estás emitiendo a internet. Si ya se que esto implica tener un ancho de banda decente, y configurar otros parámetros como en nº de oyentes simultáneos para dar un servicio aceptable, pero de esta forma no dependes de terceros.

      El método que tratas de utilizar (empleando un servidor de radio alojado en una web como listen2myradio y utilizando tu equipo como cliente del servicio de radio) no lo he probado, pero por el error que te lanza parece ser que el problema reside en el flujo de datos desde el cliente al servicio. Se me ocurre que compruebes que tienes abierto el puerto en tu router, que el cortafuegos no esté bloqueándote el puerto o el servicio.

      Como te digo no lo he probado pero si tiene especial interés en hacerlo de esta forma házmelo saber y me pongo a ello, y vemos si podemos solucionarlo.

      • Saludos Greiscool!

        Coloque mi ip publica en los archivos que dijiste pero se logra conectar el ices. Me dice esto:

        EROR stream/ices_instance_stream Failed initial connect to “mi ip”:8000 (Couldn’t connect: Connection timed out)

        evidentemente cambien la información de mi ip por “mi ip”.

        Que me sugieres que haga?

        • Hola Hierro59.
          - Antes de nada comprueba que no te has saltado ningunos de los pasos.
          - Asegúrate de que has puesto correctamente los diferentes “Passwords”.
          ¿Te lanza el mismo error en localhost o sólo cuando pones la IP pública?

          - Comprueba que tienes abierto el puerto en el cortafuegos y en el router.

        • Gracias por contestar.
          He comprobado y no me he salta ningún paso. La salida de nmap es esta:

          8000/tcp open http-alt

          Creo que eso quiere decir que el puerto esta abierto.
          El error lo lanza solo cuando coloco la ip publica.
          leyendo en el foro de Ubuntu creo que el problema tiene que ver con lo de las iptables. Mi versión de ubuntu es Quantal.

        • Iptables es el cortafuegos por defecto de Ubuntu. Se encuentra integrado en el kernel GNU/Linux y manejarlo desde la terminal es muy tedioso ya que se hace necesario conocer y manejar una sintaxis muy complicada; para hacerlo mas sencillo el manejo apareció la herramienta “ufw” que viene integrada en ubuntu y posteriormente una interface gráfica “Gufw”.
          Existen diversas herramientas gráficas que facilitan al usuario la configuración del cortafuegos. Yo he utilizado dos “Gufw” y “Firestarter”. Ambas se encuentran en los repositorios y tambien pueden instalrse desde la terminal. No se si tu tienes ya instalada alguna de ellas, pero si te decantas por instalar Firestarter el artículo Firewall Firestarter (cortafuegos) en Ubuntu puede servirte de guía.

  6. Muy buen tutorial , me gustaria saber como hago para tener una lista pero de videos .mpg en el servidor icecast. He intentado con ogg theora, pero solo logro transmitir un video y no logro dejarlo permanente en la pagina del servidor. Gracias!

  7. Hola David. En cuanto a los vídeos, sólo he hecho algunas pruebas a nivel local, por lo que no sabría darte una respuesta. Con el tiempo he ido actualizando los equipos (siempre desde una instalación limpia) y no tengo instalado Icecast2 por lo que no puedo hacer pruebas.
    Últimamente estoy muy liado y no he podido retomar el tema; espero que en un futuro cercano pueda ponerme de nuevo. Tengo pendiente un artículo específico sobre transmisión de vídeo online.

  8. Tengo un pequeño problema a ver si alguien puede resolverlo cuando creo la emisora de radio y enchufo el micro no lo reconoce y por lo tanto no reproduce sonido que puede ser???

  9. Queria consultarles tengo icecast2 instalado en ubuntu 12.04 para una radio en una red local y logro conectarme desde cualquier pc windows con vlc pero no logro transmitir un playlist seguido con vlc, sino que solo me emite una cancion.
    conocen algun programa que logre emitir un playlist completo sin necesidad de estar el locutor frente al pc para ir cambiando de cancion, sino que se reproduzca un playlist de unas 20 canciones por ejemplo,
    Muchas gracias por su ayuda..

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s