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
6.- ARRANCAR EL CLIENTE ices2
7.- DETENER icecast2 , ices2
8.- INICIAR icecast2 , ices2 AL INICIAR UBUNTU
————————————————————————————————
1.- INSTALACIÓN DE icecast2
Instalamos icecast2, ices2 y herramientas vorbis para manejo de formatos de audio libres (ogg). Nos vamos a una terminal y tecleamos
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
<hostname>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:
<metadata>
<name>NOMBRE ESTACION</name>
<genre>GENERO ESTACION</genre>
<description>DESCRIPCION ESTACION</description>
</metadata>
♦ 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 dirección)
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 escojer 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 la carpeta para 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
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)
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 <[email protected]>.
# Modified for Debian
# by Ian Murdock <[email protected]>.
#
# Further modified by Keegan Quinn <[email protected]>
# 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 el 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)
=========================================================================
Tags: Linux, Ubuntu, Icecast, ogg, streaming, servidor de radio
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:instalacion es-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
P.D. Te he dejado un comentario en tu otro blog (La vida es TUX)
Hola Jaime. La verdad es que estoy alucinando, no me lo terminaba de creer. Esto si que es un plagio en toda regla del articulo del otro blog "La vida es TUX", aunque como sabes es un espejo de éste blog).
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.
porfavor ayudame :(
cuando arranco el servidor me pone asi :
sudo ices2 /etc/ices2/ices-playlist.xml &
[1] 20047
root@h1993630:/etc/ices2# /etc/ices2/ices-playlist.xml:16: parser error : Input is not proper UTF-8, indicate encoding !
Bytes: 0xFA 0x6E 0x69 0x63
<!-- El <input> es lo único diferente al fichero ices2-live.xml -->
^
Failed to read config file "/etc/ices2/ices-playlist.xml"
Hola ¡ invitado !. por favor indica tu nombre o nick, así esto no será tan impersonal. Veamos:
El 200047 es el PID del proceso que trata de iniciarse.
Te está diciendo que encuentra un error de codificación (al leer el archivo encuentra algo que no reconoce como UTF-8, que es una codificación unicode estandar -> tienes información aquí http://es.wikipedia.org/wiki/UTF-8).
Según esto creo que al editar el archivo "ices-playlist.xml" has debido de tocar algo sin darte cuenta. Si me envias una copia del mismo le echaré un vistazo, seguro que es un momento.
Puedes enviérmelo a este correo [email protected]
Un saludo,
Muy buenas.
Muchas gracias por la este artículo.
He seguido los pasos que indicas, pero no consigo que me salga en mount point el archivo que indicas. Evidentemente no he hecho algo correctamente.
¿Podrías ayudarme?
Estamos pensando en realizar un taller de radio y veo que tu nos estás dando las herramientas que necesitamos.
Muchas gracias de nuevo.
Hola Salvador. Por lo que comentas has llegado hasta "Icecast2 Status" pero no te muestra el "lista_de_reproduccion.ogg". Me da la sensación de que no has iniciado el cliente "Ices2". Supongo que has seguido todos los puntos y pretendes que se te inicie como servicio con el arranque del sistema, tal como se indica en el punto (8), pero haz un prueba: Inícialo según se indica en el punto (6) sudo ices2 /etc/ices2/ices-playlist.xml & . Si de esta forma te muestra el "mount point" entonces es que tienes algún problema en el archivo /etc/init.d/icecast2 y no se inicia durante el arranque. Si es así comprueba que dicho archivo tiene los permisos necesarios: sudo chmod +x /etc/ices2/ices-playlist.xml . Comprueba esto y me cuentas.
Muy buen tutorial, muchisimas gracias!
He estado haciendo algunas pruebas y he conseguido que funcionara. Me ha costado un poquito ya que he realizado un fallo tonto en uno de los pasos (un error ortografico en uno de los pasos) y he tardado mucho en darme cuenta. Una vez arreglado todo a ido como una seda!
Felicidades por el trabajo!
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)...puedes conectar un micro, un equipo reproductor, etc...