[How-to] Music on Hold for Asterisk using local Shoutcast Streaming Server
Tras un intercambio de mensajes con algunos compañeros de lista de Asterisk-es, me picó el gusanillo de probar el streaming de audio en Asterisk, concretamente, para la música en espera. La verdad es que fue muy sencillo y seguidamente (el famoso término andaluz-español “poyaque”) pensé en hacer la gracia completa montando mi propio servidor shoutcast para servir la música desde un servidor de la red local.
La idea fundamental es poder usar radios on-line como fuente para el audio de Asterisk.
Todo el conjunto será montado sobre Fedora Core 8, aunque las instrucciones son similares para Centos, RedHat y asimilados…
Servidor Shoutcast para linux
Tengo que confesar que me sorprendió muchísimo la facilidad con la que uno puede montar este servicio en una máquina linux. Acostumbrado a compilar, retocar, parchear y demás florituras no habituales para un esclavo de Bill, tengo que confesar que no tardé más de unos pocos minutos en bajar y tener andando el asunto.
Lo primero que haremos será descargar el paquete correspondiente desde la página de nullsoft.
En nuestro caso, el paquete para linux.
cd /usr/src wget http://www.shoutcast.com/downloads/sc1-9-8/sc_serv_1.9.8_Linux.tar.gz tar -zxvf sc_serv_1.9.8_Linux.tar.gz
Al descomprimir se crean tres ficheros
Readme.txt sc_serv.conf sc_serv
Pues bien, sólo hay que modificar unos pocos parámetros del archivo de configuración (.conf) y ejecutar el script (sc_serv) y ya tendremos el servidor montado. Concretamente, deberemos modificar en sc_serv.conf
MaxUser=32 # Ponemos el número de usuarios concurrentes que podemos atender
# según nuestro ancho de banda
Password= <contraseña_segura> # la usaremos para enviar audio desde plugins para winamp
PortBase=8000 # puerto por el que servimos el streaming
Con esto ya tendríamos una configuración mínima para echar a andar
chmod +x sc_serv ./sc_serv
Y ya tendríamos el servidor levantado y esperando recibir audio para servirlo a los clientes. A mi me interesaba recibir audio a través de radios online, así que tuve que modificar ciertos parámetros en sc_serv.conf
RelayPort= <Puerto_maquina> # puerto del servidor externo de streaming RelayServer= <IP_maquina> # ip del servidor externo de streaming
Hay que tener cuidado porque no todas las radios online permiten ser “repetidores” de su señal, así que habrá que probar hasta dar con una que nos acepte y nos guste, claro
Música en Espera para Asterisk usando el streaming de shoutcast
Procedemos a instalar madplay, el cual es un decodificador de audio muy bueno y que mejora al mpg123 que trae asterisk.
Primero instalamos unas dependencias necesarias (recuérdese que se está usando FC8). Si tenemos otra distribucion, podemos encontrar los paquetes necesarios en http://rpm.pbone.net
yum install libid3tag wget ftp://ftp.pbone.net/mirror/atrpms.net/f8-i386/atrpms/stable/libmad0-0.15.1b-3.fc8.i386.rpm rpm -ivh libmad0-0.15.1b-3.fc8.i386.rpm
Y ahora instalamos madplay
wget ftp://ftp.pbone.net/mirror/rpm.livna.org/fedora/8/i386/madplay-0.15.2b-4.lvn6.i386.rpm rpm -ivh madplay-0.15.2b-4.lvn6.i386.rpm
Por último nos creamos el script mohstream.sh
nano /etc/asterisk/mohstream.sh (pegamos lo que viene a continuación)
/usr/bin/wget -q -O - http://160.79.128.242:8000 | /usr/bin/madplay -Q -z -o raw:- --mono -R 8000 -a -12 -
Damos permisos de ejecución
chmod +x /etc/asterisk/mohstream.sh
Ya sólo queda indicarle a asterisk que usaremos este script para la música en espera:
[streamingpaco] mode=custom dir=/var/lib/asterisk/moh/streampaco application=/etc/asterisk/mohstream.sh
En nuestro archivo extensions.conf, usaremos la clase [streamingpaco] para la música en espera que creamos oportuno
exten => 123,1,Answer() exten => 123,n,MusicOnHold(streamingpaco)