Autor: ACMhUnTeR Fecha: 10/10/2003
Espero que al terminar esta pequeña guia puedan lograr streaming de audio utilizando como fuentes entrada de tarjeta de sonido o archivos de audio locales. Como sabran el streaming de audio es el metodo por el cual se transmite audio a traves de la red, como los conocidos radio internet entre otros.
Para esto necesitaremos de tres paquetes el icecast que sera nuestro programa server para el streaming , el iceS lo utilizaremos para alimentar con fuentes de audio a nuestro servidor , y las librerias para el soporte de oggvorbis que es el formato en el cual transmitiremos, recurrimos a nuestro poderoso arbol de ports
HellFire# cd /usr/ports/audio/icecast2 HellFire# make install clean HellFire# cd /usr/ports/audio/ices HellFire# make install clean
Automaticamente empezara la descarga del paquete y sus dependencias , entre ellas se encuentra los paquetes necesarios para el formato de audio oggvorbis.
Una vez instalado el icecast observamos que se crearon unos directorios en /usr/local/share/icecast que son doc, web, admin , web y admin contienen los archivos que podremos visualizar desde una navegador ya sea para ver el status de server entre otras, en la carpeta doc encontramos el archivo de configuracion icecast.xml.dist y hacemos lo siguiente
HellFire# cd /usr/local/share/icecast/doc HellFire# cp icecast.xml.dist icecast.xml HellFire# ee icecast.xml
Empezaremos analizando las partes de este archivo utilizados en la configuracion icecast.xml:
<icecast> <location>Not Currently Used</location> <admin>Not Currently Used</admin> <limits> <clients>10</clients> <!-- Numero de conexiones permitidas --> <sources>10</sources> <!-- Numero de conexiones fuentes permitidas --> <threadpool>5</threadpool> <!-- Numero maximo de hilos hijos lanzados--> <queue-size>102400</queue-size> <!-- Tamaño de archivo en espera--> <client-timeout>30</client-timeout> <!-- Tiempo Limite de espera al cliente--> <header-timeout>15</header-timeout> <!-- Tiempo Limite de espera de las cabeceras--> <source-timeout>10</source-timeout> <!-- Tiempo maximo de espera de la fuente de audio--> </limits> <authentication> <source-password>radiopass</source-password> <!-- Password utilizado por el ices en nuestro caso--> <relay-password>radiopass>/relay-password> <!--Password permitido--> <admin-user>admin</admin-user> <!--Nombre de usuario administrador--> <admin-password>adminpass</admin-password> <!-- Password de administrador--> </authentication> <hostname>localhost</hostname> <!-- Nombre o ip de tu hostname--> <listen-socket> <port>8000</port> <!-- Puerto por donde escucha las peticiones sera usado por el ices--> </listen-socket> <listen-socket> <port>8001</port> <!-- Puerto por donde escucha las peticiones usado por nuestros clientes--> </listen-socket> <mount> <mount-name>/radioacm.ogg</mount-name> <!-- Nombre archivo de transmision --> <max-listeners>1</max-listeners> <!-- Maximo numero de conexiones permitidas al archivo radioacm.ogg--> </mount> <fileserve>1</fileserve> <paths> <basedir>/usr/local/share/icecast</basedir> <!-- Directorio Base de icecast--> <logdir>/usr/local/share/icecast/logs</logdir> <!-- Directorio de logs--> <webroot>/usr/local/share/icecast/web</webroot> <!-- Directorio de archivos web --> <adminroot>/usr/local/share/icecast/admin</adminroot> <!-- Directorio archivos administrativos--> </paths> <logging< <accesslog>access-icecast.log</accesslog> <!-- Archivo log de acceso al icecast--> <errorlog>error-icecast.log</errorlog> <!-- Archivo log de error del icecast--> <loglevel>4</loglevel> <!-- Tipo de log 4 Debug, 3 Info, 2 Warn, 1 Error --> </logging> <security> <chroot>0</chroot> <!-- <changeowner> <user>nobody</user> <group>nogroup</group> </changeowner> --> </security> </icecast>
Ejecutamos el demonio de icecast esperando en el puerto 8000 a nuestro cliente de streaming ices y a nuestros clientes en el puerto 8001
HellFire# cd /usr/local/share/icecast/doc HellFire# icecast -c icecast.xml
Nota: En la configuracion de icecast.xml podemos observar comentada la seccion security los paramtros puestos ahi indican el usuario y/o grupo que podra ejecutar el demonio del icecast, los archivos logs crearlos manualmente teniendo en cuenta los permisos de escritura.
Una vez instalado el iceS
HellFire# cd /usr/local/share/icecast/doc HellFire# ee ices.xml
Empezamos armando y viendo cada parte de la que constara nuestor archivo de configuracion ices.xml:
<?xml version='1.0'?> <ices> <logpath>/usr/local/share/icecast/logs</logpath> <!-- Directorio del archivo log --> <logfile>ices.log</logfile> <!-- Nombre del archivo log --> <loglevel>3</loglevel> <!-- Tipo de log 4 Debug, 3 Info, 2 Warn, 1 Error --> <consolelog>0</consolelog> <!-- Si prefiere ver los errores en consola poner 1 sino dejarlo en 0--> <stream> <metadata> <name>ACMhUnTeR Stream Audio Server</name> <!-- Nombre del Servidor --> <genre>Variado</genre> <!-- Genero de musica --> <description>Ogg</description> <!-- Descripcion del Servidor --> </metadata> <input> <module>playlist</module> <!-- Modulo de fuente de audio--> <param name='type'>basic</param> <!-- Tipo de fuente de audio --> <param name='file'>/usr/local/share/icecast/doc/HellFire.txt</param> <!-- Ubicacion del la lista de canciones --> <param name='random'>1</param> <!-- Seleccion al azar de la lista de canciones si es 1 --> <param name='once'>0</param> <!-- 1 Repite lista indeterminadamente, 0 solo una vez --> </input> <instance> <hostname>localhost</hostname> <!-- Nombre o ip del hostname --> <port>8000</port> <!-- Puerto donde enviara las fuentes de audio al icecast --> <password>radiopass</password> <!-- Password para conectar al icecast --> <mount>/radioacm.ogg</mount> <!-- Nombre de archivo de transmision --> <reconnectdelay>2</reconnectdelay> <!-- Tiempo de espera para reconectar --> <reconnectattempts<5</reconnectattempts> <!-- Tiempo de espera para reconectar si hay error, si es -1 seguira indefinidamente --> <maxqueuelength>80</maxqueuelength> <!-- Tiempo de espera interna de las fuentes --> <savefile>salida.ogg</savefile> <!-- Copia del audio que se envia para el streaming --> <encode> <samplerate>32000</samplerate> <!-- Samplerate de codificacion --> <channels>2</channels> <!-- Numero de canales de codificacion --> <quality>0</quality> <!-- Calidad de codificacion si es 0 toma la mas aceptable--> <minimum-bitrate>32000</minimum-bitrate> <!-- Minimo bitrate de audio --> <maximum-bitrate>48000</maximum-bitrate> <!-- Maximo bitrate de audio --> </encode> </instance> </stream> </ices>
Nota: El archivo que contendra la lista de canciones con su ruta respectiva podemos generarla con ayuda de nuestro XMMS y pornela en la ruta que le pongamos en nuestro archivo ices.xml.
Si queremos usar como fuente de audio nuestra tarjeta de sonido solo cambiamos los siguiente en la seccion input, asi podremos conectar una radio, o quizas transmitir nuestra voz en vivo.
<module>oss</module> <param name="device">/dev/dsp</param> <!-- Dispositivo de Audio --> <param name="rate">16000</param> <!-- rate de audio --> <param name="channels">2</param> <!-- Canales de audio --> <param name="metadata">1</param> <!-- Lectura de metadata es decir informacion del archivo ogg en este caso Titulo,Autor,etc --> <param name="metadatafilename">metadata_info</param>
En tarjetas de sonido antiguas (Sound Blaster 16) solo hace falta setear el Mic/Line y se iniciara la transmision, en tarjetas de ultima generacion seteamos Mic/Line y especificar que Rec este activo
Tarjetas Antiguas archivo mixer.sh para ponerlo en /usr/local/etc/rc.d
#!/bin/sh echo " Mixer Ok" mixer vol 92:92, pcm 92:92, speaker 0, line 0, mic 95, cd 0, line1 0
Tarjetas Modernas Archivo mixer.sh para ponerlo en /usr/local/etc/rc.d
#!/bin/sh echo " Mixer Ok" mixer vol 92:92, pcm 92:92, speaker 0, line 0, mic 95, cd 0, rec 92, line1 0, phin 0, phout 0, video 0, monitor 0
Arrancamos nuestro cliente streaming iceS
#!/bin/sh echo " icecast" /usr/local/bin/icecast -c /usr/local/share/icecast/doc/icecast.xml & echo " ices" /usr/local/bin/ices /usr/local/share/icecast/doc/ices.xml &
Ahora para conectar nuestros clientes a nuestor servidor podemo usar como yo XMMS o en caso de personas que usen windows el popular winamp , apretamos el juego de teclas Ctrl + L , ahi pondremos el ip con el puerto y nombre de archivo que especificamos en nuestra configuracion y tendra el siguiente format0:
[ip de nuestro servidor]:[puerto]/[archivo de streaming]
Por ejemplo en nuestro caso 192.168.50.2:8001/radioacm.ogg
Bueno espero les ayude a implementar su servidor de streaming de audio , les aconsejo se lean la documentacion publicada en la pagina de icecast ya que mucho de este tutorial lo saque gracias a ellos, hasta una proxima, no olviden sugerencias, comentarios o correcciones hacerlas llegar a mi correo. FINALES
Agradezco a nuestro amigo MrYoEl por los aportes dados en esta nueva actualizacion.