Pensar en hacer alguna cuestión con Software Libre siempre recibe una respuesta afirmativa, esta vez quisimos cacharrearle a montar una emisora sobre la red aunque también es posible hacerlo sobre Internet. Para esto hoy conoceremos las herramientas de la Xiph Foundation que son quienes están detrás de Icecast y Ices que nos permiten crear nuestra "radio" en unos cuantos clics.

 

 Icecast2

Lo primero para montar la emisora es instalar el servidor de streaming de audio; este es el Icecast que para este momento está en la versión 2.2.4 y se puede conseguir fácilmente en los repositorios de la mayoría de distribuciones GNU/Linux, aunque también está disponible para la descarga en el sitio de Icecast para quienes aún usan Windows.

Icecast, permite hacer streaming de archivos en formato Ogg, MP3 y AAC sobre el protocolo HTTP; lo que nos permite que el flujo sea fácilmente embebido en un sitio Web, aunque igual puede ser reproducido en muchos reproductores de medios. Hay que entender algunos conceptos con respecto al servidor de streaming, este básicamente toma un flujo de sonido que envía un cliente de reproducción y lo publica en una dirección Web, a esta dirección Web es la que se conoce como punto de montaje y allí es donde se define en qué tipo de formato será la salida es decir: MP3 u Ogg.

El punto de montaje combinado con el hostname, el puerto de transmisión y el punto de montaje forman la URL de la emisora así:

http://mihostname.midominio:mipuerto/mipuntodemontaje.miextension

Luego de instalar Icecast2, hay que configurarlo; para ello existe un archivo llamado icecast.xml que está en /etc/icecast2. De este archivos las partes más relevantes son:

<clients>200</clients> : Esta parte se refiere a la cantidad máxima de conexiones que recibirá el servidor.
admin-user>admin</admin-user> : Es el nombre del archivo que se usará en la interfaz Web de administración.
<admin-password>mi_password</admin-password> : Es la contraseña del anterior usuario.
<hostname>mi_hostname_o_mi_direccion_ip</hostname> : El nombre de la máquina que hará de servidor. También recibe la dirección IP.
<port>8000</port> : El puerto que utilizará el servidor para transmitir el streaming.
<username>mi_usuario</username> : El usuario que pueden utilizar los clientes de transmisión para acceder a un punto de montaje en particular, ya que se pueden tener varios.
<password>mi_password</password> : La contraseña del usuario definido para el punto de montaje.
<mount-name>/listen.ogg</mount-name> : El nombre del punto de montaje, aquí es donde se define cuál será el tipo del flujo de salida.
<max-listeners>200</max-listeners> : La cantidad máxima de oyentes, debe ser inferior o igual al parámetro definido en clientes.
<loglevel>1</loglevel> : Se refiere al tipo de información que se debe generar en los logs (4 Depuración, 3 Informativa, 2 Advertencias y 1 Errores)
<user>usuario_ejecutante</user> : Se refiere al usuario que puede ejecutar el Icecast, recordemos que no es recomendado que sea ejecutado por el usuario root.
<group>grupo_ejecutante</group> : El grupo al que se le está permitido ejecutar el Icecast

Para iniciar el Icecast2, se puede ejecutar el binario de la siguiente manera pero como el usuario ejecutante, no como root:

icecast2 start -c /etc/icecast2/icecast.xml -b

Esto nos permitirá iniciar el Icecast leyendo nuestra configuración (-c) y corriendo en segundo plano o background (-b). Lo ideal sería crear un script .sh que se encarge de subir el servicio de Icecast2 cuando el sistema operativo inicie.

Reproduciendo el audio

Para reproducir los audios que luego serán transmitidos por Icecast2, encontré dos opciones (me imagino que deben haber más); una es Ices que reproduce secuencialmente o aleatoriamente desde una lista de reproducción e Internet DJ Console (del cual hablaremos la próxima semana), que como su nombre lo dice es una consola similar a las de las emisoras y permite reproducir desde listas de reproducción, interactuar con micrófonos e incluso recibir flujos de audio desde clientes de mensajería.

Ices2, se puede encontrar en los repositorios o descargar del mismo sitio donde se descarga Icecast2. Aunque no deberíamos decir esto, la versión 2 no da soporte a MP3 por lo que si se quiere usar para reproducir MP3 es necesario usar la versión 0, la cual se debe descargar y compilar junto con la librería libshout antigua que se consigue también en el sitio de Xiph. La configuración se toma de un archivo XML el cual se nombra normalmente como ices.conf, las partes relevantes de dicho archivo son:

<File>playlist.txt</File> : Se refiere al archivo del cual Ices leerá la ubicación de los archivos de audio (pueden ser MP3, AAC u Ogg)
<Randomize>1</Randomize> : Si es 1 reproduce aleatoriamente, si es 0 lo hará secuencialmente.
<Background>0</Background> : Si es 1, Ices se ejecuta en segundo plano.
<Crossfade>5</Crossfade> : La cantidad de segundos de intervalo entre cada archivo de audio.
<Hostname>mihostname</Hostname> : El nombre del hostname (o la IP) del servidor que tiene el servidor de streaming. Nótese que podemos tener el Ices en una máquina y el Icecast en otra.
<Port>8000</Port> : El puerto del punto de montaje del servidor de streaming.
<Password>camayihi</Password> : La contraseña definida para acceder al punto de montaje del servidor de streaming.
<Mountpoint>/listen.ogg</Mountpoint> : El punto de montaje al que queremos acceder en el servidor de streaming.
<Name>Mi emisora</Name> : El nombre que queremos que sea conocida nuestra emisora.
<Genre>Crossover</Genre> : El género musical en el cual queremos que sea clasificada.
<Description>Default description</Description> : Una descripción de nuestra emisora.
<Bitrate>128</Bitrate> : La tasa de muestreo en que queremos que transmita, a más calidad es más lenta la transmisión.

Para iniciar el ices se realiza de la siguiente manera:

ices -c /ubicacion_del_archivo_de_configuracion/ices.conf.dist &

Esto nos permite ejecutarlo en segundo plano, aunque se puede configurar como vimos anteriormente. Crear la lista de reproducción es sencillo utiliznado un ls que nos envíe todos los archivos de audio a un archivo txt, y si toca ajustar las rutas se puede hacer utilizando un editor de textos cualquiera. Recordemos que los nombres de los archivos no deben contener espacios ni caracteres especiales.

Transmitiendo

Cuando ya iniciamos todo, comienza la transmisión; esta se puede verificar en la URL: http:/mihostname.midominio:mipuerto allí veremos la página de información de nuestro servidor Icecast2 y desde allí podremos acceder a la consola de administración, donde podemos "patear" a aquellos clientes no deseados. Para acceder usamos el usuario y contraseña definidos en el archivo de configuración como vimos anteriormente.

El audio como tal lo podremos escuchar en la URL: http://mihostname.midominio:mipuerto/mipuntodemontaje.miextension ahí dependerá si nuestro navegador soporta o no el tipo de formato de audio de nuestro punto de montaje, aunque igual lo podremos probar en un reproductor de medios como por ejemplo Rhythmbox.

Para facilitarnos la vida podemos construir scripts para visualizar nuestra emisora en Web, en nuestro caso construimos unos usando PHP basados en varios que encontramos en la red. Utilizamos uno que se encarga de consultar la metadata del flujo de sonido cada 10 segundos y así mantener actualizado el nombre de la canción, recordemos que esta información se cargará siempre y cuando los tags de los archivos estén actualizados y para ello existen varios taggers que hemos mostrado aquí en el sitio. El otro script se encarga de presentar el flujo de audio en distintos reproductores dependiendo si el navegador los soporta o no, incluso por razones de compatibilidad podemos cargar desde un reproductor HTML5 hasta llamar al reproductor de medios de Windows.

Para finalizar, debemos anotar que existen servicios que permiten que transmitamos nuestra emisora sin tener un servidor propio, uno de ellos es giss.tv que funciona con Software Libre y que permite que solo nos debamos preocupar por organizar nuestra programación musical con nuestro Ices o nuestro Internet DJ Console.

Los scripts que utilizamos y los archivos de configuración de ejemplo los pueden descargar de aquí

Imagen tomada de icecast.org