Sistema de streaming con Asterisk y Icecast2
Jueves, Marzo 6th, 2008Con motivo de la Semana ESIDE, se han organizado diversos actos y charlas desde el E-Ghost. Suele ser habitual grabarlas, y alguna vez se ha experimentado con el streming del audio, pero para esta ocasión se me ocurrió que podríamos hacer las 2 cosas a la vez con Asterisk.
El funcionamiento del sistema se basa en Asterisk y Icecast2, que es un servidor de streaming, configurando el montaje de la siguiente manera:
- Un servidor remoto con Icecast2.
- Un portátil con Asterisk instalado, de manera que metemos en un MeetMe el ‘console channel driver’, es decir, la entrada de micrófono y grabamos la conversación con la opción ‘r’ de MeetMe.
- Con chan_local, metemos a ese mismo MeetMe la aplicación Ices, que envía el stream a un servidor de Icecast2.
y ahora, vamos por partes:
Instalación y configuración de Icecast2
apt-get install icecast2
-
-
<icecast>
-
<limits>
-
<clients>100</clients>
-
<sources>2</sources>
-
<threadpool>5</threadpool>
-
<queue-size>524288</queue-size>
-
<client-timeout>30</client-timeout>
-
<header-timeout>15</header-timeout>
-
<source-timeout>10</source-timeout>
-
<burst-on-connect>1</burst-on-connect>
-
<burst-size>65535</burst-size>
-
</limits>
-
<authentication>
-
<source-password>superfarsa</source-password>
-
<relay-password>hackme</relay-password>
-
<admin-user>admin</admin-user>
-
<admin-password>ironfarsa</admin-password>
-
</authentication>
-
<hostname>streamcluster.irontec.com</hostname>
-
<listen-socket>
-
<port>8088</port>
-
</listen-socket>
-
<fileserve>1</fileserve>
-
<paths>
-
<basedir>/usr/share/icecast2</basedir>
-
<logdir>/var/log/icecast2</logdir>
-
<webroot>/usr/share/icecast2/web</webroot>
-
<adminroot>/usr/share/icecast2/admin</adminroot>
-
<alias source="/" dest="/status.xsl"/>
-
</paths>
-
<logging>
-
<accesslog>access.log</accesslog>
-
<errorlog>error.log</errorlog>
-
<loglevel>4</loglevel>
-
<logsize>10000</logsize>
-
</logging>
-
-
<security>
-
<chroot>0</chroot>
-
</security>
-
</icecast>
-
Después hay que editar el fichero /etc/default/icecast2 y poner ENABLED=true. Tras esto ya podemos iniciar Icecast2:
/etc/init.d/icecast2 start
Configuración de Asterisk necesaria
Necesitamos un fichero de ejemplo para la aplicación Ices, que podemos encontrar en la carpeta contrib de las fuentes de Asterisk. Ejemplo:
-
-
<?xml version="1.0"?>
-
<ices>
-
<background>0</background>
-
<logpath>/var/log/ices</logpath>
-
<logfile>ices.log</logfile>
-
<loglevel>4</loglevel>
-
<consolelog>0</consolelog>
-
<stream>
-
<metadata>
-
<name>Example stream name</name>
-
<genre>Example genre</genre>
-
<description>A short description of your stream</description>
-
<url>http://mysite.org</url>
-
</metadata>
-
<input>
-
<module>stdinpcm</module>
-
<param name="rate">8000</param>
-
<param name="channels">1</param>
-
<!– Read metadata (from stdin by default, or –>
-
<!– filename defined below (if the latter, only on SIGUSR1) –>
-
<param name="metadata">1</param>
-
<param name="metadatafilename">test</param>
-
</input>
-
<instance>
-
<hostname>SERVIDOR_ICECAST2</hostname>
-
<port>8000</port>
-
<password>PASSWORD_DE_LA_FUENTE</password>
-
<mount>/fichero.ogg</mount>
-
<yp>1</yp>
-
<encode>
-
<quality>0</quality>
-
<samplerate>8000</samplerate>
-
<channels>1</channels>
-
</encode>
-
<downmix>0</downmix>
-
</instance>
-
</stream>
-
</ices>
-
Ya tenemos todo lo necesario, en lo que al streaming se refiere, solo queda un poco de dialplan:
[streaming]
exten => hablar,1,MeetMe(1234,qtr)
exten => escuchar,1,MeetMe(1234,ql)
exten => stream,1,ICES(stream.xml)
y un par de callfiles para automatizar el proceso:
Callfile1:
Channel: CONSOLE/dsp
Context: streaming
Extension: hablar
Priority: 1
Callfile2:
Channel: Local/escuchar@streaming
Context: streaming
Extension: stream
Priority: 1
Pues esto es todo! Con copiar los callfiles a /var/spool/asterisk/outgoing ya tenemos un sistema de streaming rápido y hecho 100% con Software Libre. Enjoy it!



