Tabla de Contenidos

Lo que nosotros llamamos radio por wifi es en realidad un servicio de streaming de audio, este es un pequeño tutorial basado en experiencias al montar nodos.

Primero vamos a usar el servidor icecast2 que se encarga retransmitir streams multimedia (en este caso Ogg) a los clientes o usuarios que se conecten al servicio.

Sin embargo, icecast2 no es el programa que reproduce el audio, sólo se encarga de redistribuirlo. Existen programas que reproducen las pistas de audio y en icecast se llaman programas cliente. Uno de estos programas es ezstream y el otro ices. Ambos se encargan de generar los streams de audio a partir de archivos de música.

Se puede usar cualquiera de los dos aunque ezstream está más actualizado, veremos como configurar la radio por wifi con ambos.

Instalando y configurando icecast2

Siguiendo la guía http://www.icecast.org/docs/icecast-trunk/basic_setup/ podemos resumir en:

1. Instalar icecast2, que en una distribución basada en debian bastará con: sudo apt install icecast2.

2. En el archivo /etc/icecast2/icecast.xml existen varias secciones pero para una configuración básica bastará con modificar:

<hostname>localhost</hostname> 
<source-password>password-para-programas-clientes</source-password>
<admin-passwrod>Password-para-el-administrador-web-de-icecast2</admin-password>
<listen-socket>
    <port>8299</port> 
</listen-socket>

:!: En versiones nuevas de icecast2 además de editar el archivo icecast2.xml, se debe editar el archivo /etc/default/icecast2 y cambiar la línea ENABLE=true.

Para confirmar los cambios se reinicia el servicio con sudo service icecast2 restart, posteriormente para comprobar el funcionamiento se puede ingresar al panel de administración desde un navegador web para nuestro caso; http://localhost:8299/admin

Con esas opciones modificadas se ha terminado con icecast2.

Usando ezstream como cliente

La ventaja de mantener ezstream (o ices) y icecast2 separados es que icecast2 puede distribuir a los clientes varios streams ejecutándose en esta u otra computadora.

Para instalar ezstream en sistemas debian bastaría con instalarlo desde el repositorio oficial:

sudo apt install ezstream

Luego es necesario crear un archivo de configuración para que ezstream genere los streams de audio y se los pase a icecast2. Una vez que se instala ezstream, el paquete incluye ejemplos de configuración en /usr/share/doc/ezstream/examples/. En nuestro caso configuraremos para que se genere un flujo mp3 desde una lista de archivos y se reproduzcan de aleatoriamente.

Creamos un archivo xml con las configuraciones, en este caso lo llamaremos stream_mp3_configs.xml:

<ezstream>
    <url>http://localhost:8299/mp3</url>
    <sourcepassword>password-para-programas-clientes</sourcepassword>
    <format>MP3</format>
    <filename>/home/alguien/musica/playlist.mp3.txt</filename>
    <!-- random order -->
    <shuffle>1</shuffle>
    <!-- Info adicional del stream (opcional) -->
    <svrinfoname>Super Radio</svrinfoname>
    <svrinfogenre>Varios géneros de música</svrinfogenre>
    <!-- configuración del stream de audio -->
    <svrinfobitrate>128</svrinfobitrate>
    <svrinfochannels>2</svrinfochannels>
    <svrinfosamplerate>44100</svrinfosamplerate>
 
    <svrinfopublic>0</svrinfopublic>
</ezstream>

En la configuración se hace referencia a un archivo playlist.mp3.txt que debería contener la lista de archivos de audio mp3 a reproducir, suponiendo que tenemos los archivos en una carpeta /home/alguien/musica/ se puede generar la lista con:

find /home/alguien/musica/ -name *.ogg > /home/alguien/musica/playlist.mp3.txt

Una vez hecho, se puede probar ejecutando ezstream usando el archivo de configuración que creamos:

ezstream -c stream_mp3_configs.xml

Y comprobamos que se está transmitiendo el stream accediendo desde un navegador o programa de reproducción de música como vlc a http://localhost:8299/mp3. Ezstream también puede generar streams para archivos ogg vorbis y otros formatos. (más información)

Usando ices como cliente

Si se opta por ices en lugar de ezstream el procedimiento es el siguiente. Para mantener las cosas ordenadas podemos primero seleccionar los archivos .ogg de música de audio que se escucharán en nuestra radio por wifi, para este ejemplo usaremos la carpeta /home/alguien/musica/

1. Instalar ices en una distribución basada en debian basta con sudo apt install ices2

2. Debemos crear un archivo de configuración, podemos copiar un ejemplo con: cp /usr/share/doc/ices2/examples/ices-playlist.xml /home/alguien/musica

3. Modificamos el archivo /home/alguien/alguien/musica/ices-playlist.xml modificando:

<!-- el archivo playlist.txt deberia contener la lista de archivos a reproducir -->
<param name="file">playlist.txt</param>
<!-- Esto hara que las canciones toquen en orden aleatorio, 0 para desactivarlo -->
<param name="random">1</param>
<!-- reiniciar la reproduccion cuando se termine los archivos en la lista -->
<param name="restart-after-reread">1</param>
<Server>
  <!-- Host donde esta el servidor icecast2 -->
  <Hostname>localhost</Hostname>
  <!-- Este es el mismo puerto que se ha configurado para icecast2 -->
  <Port>8299 </Port>
  <!-- El password especificado para acceder a icecast2 -->
  <Password>password-para-programas-clientes</Password>
</Server>
<!-- Punto de montaje o la direccion desde la cual se podra acceder al stream -->
 <Mountpoint>/super_radio</Mountpoint>

4. Ahora debemos crear el archivo playlist.txt que debería contener la lista de archivos .ogg a reproducir, se puede crear con:

find /home/alguien/musica/ | grep ".ogg" > playlist.txt

5. Probar la conexión entre icecast2 y ices2:

sudo service icecast2 restart
sudo ices2 /home/alguien/musica/ices-playlist.xml

Con esto, si ingresamos desde un navegador web a http://localhost:8299/super_radio deberíamos poder escuchar una canción. Pero es probable que el servicio se detenga y para evitarlo tendremos que seguir el siguiente paso.

Si queremos integrar el servicio de radio por wifi en una página web, bastaría poner un enlace hacia el host:puerto/punto_de_montaje. Por ejemplo si nuestro nodo se llamaría “tantawawa” sería http://radio.tantawawa.lor:8299/super_radio

Automatizando el inicio

Esto para hacer que se ejecute automáticamente la reproducción de streams de audio ya sea con ices2 o ezstream.

Usando systemd (para ices2)

Creando por ejemplo: /etc/systemd/system/ices2.service

[Unit]
Description=ices2 deamon
# la siguiente linea asegura que primero se inicie icecast2
After=icecast2.service

[Service]
User=www-data
Group=www-data
WorkingDirectory=/usr/bin/ices2
ExecStart=ices2 "/home/alguien/musica/ices-playlist.xml"

[Install]
WantedBy=multi-user.target

Luego probarlo con:

sudo systemctl daemon-reload
sudo systemctl start ices2.service
# si funciona se habilita el servicio para que se ejecute al inicio del sistema con
sudo systemctl enable ices2.service

Usando systemd (para ezstream)

Creando por ejemplo: /etc/systemd/system/ezstream.service

[Unit]
Description=ezstream deamon
# la siguiente linea asegura que primero se inicie icecast2
After=icecast2.service

[Service]
User=pi
Group=pi
WorkingDirectory=/home/alguien/musica
ExecStart=ezstream -c "/home/alguien/musica/ezstream_mp3.xml"

[Install]
WantedBy=multi-user.target

Luego probarlo con:

sudo systemctl daemon-reload
sudo systemctl start ezstream.service
# si funciona se habilita el servicio para que se ejecute al inicio del sistema con
sudo systemctl enable ezstream.service

Usando script de inicio

Primero seguramente deberíamos modificar el archivo /home/alguien/musica/ices-playlist.xml en la línea:

<Execution>
    <Background>1</Background>
  </Execution>

Luego el script por ejemplo en /etc/init.d/ices2.sh

cd /home/alguien/musica
# comprobando que se haya iniciado el servicio icecast2
while ! ps -axu | grep icecast2 | grep -v "grep"
do 
  sleep 1
done
 
ices2 ices-playlist.xml
 
exit 0

Luego de probarlo, se debe agregar como script de inicio.

Más referencias