Que es streaming?
Entenderemos como streaming o flujo, un canal de datos entre ordenadores, por el cual podemos distribuir contenido multimedia desde un ordenador servidor, a mltiples clientes. Mecanismos como el streaming son ampliamente utilizados con la popularizacin de Internet, reemplazando las emisiones de radio tradicionales, su uso es cada vez mas utilizado debido al aumento general del ancho de banda.
Que es streaming?
Cuando hablamos de streaming no solo nos referimos a distribucin de audio, tambin es posible distribuir contenido de vdeo, incluso de ambos tipos a travs del canal establecido. Segn el contenido que estamos distribuyendo podemos elegir una codificacin diferente. En un mismo sistema de codificacin podemos elegir mltiples calidades .
Formatos soportados
Para cada tipo de contenido multimedia se han creado diferentes especificaciones para su almacenaje y posterior recuperacin. Generalmente y debido al gran tamao de una seal maestreada, es necesario comprimirla en una seal mas pequea para poder utilizarla cmodamente. No solo hay especificaciones para reducir el tamao de la informacin, tambin las hay para garantizar un trafico fluido y constante.
Formatos soportados
Cuando necesitamos distribuir audio, las especificaciones, tambin llamadas codecs se basan en despreciar parte de informacin que no es audible al odo humano, as como eliminacin de seales enmascaradas. Mediante estos codecs podemos emitir flujos en Internet con calidad CD con apenas 32KB/s por cada cliente. Para emisiones de voz, podemos utilizar calidades mas bajas y aun economizamos mas espacio,lo cual nos permite emitir mas flujos.
Taller de streaming de radio con Icecast2 y Linux
Formatos soportados
Si elegimos formatos con mayor nivel de compresin, nuestra emisin en directo, sufrir un retraso necesario para las tareas de recompresin al formato final y transmisin. Cuanta mas compresin necesitamos transmitir menor cantidad de informacin, aumentando el numero de clientes conectados, pero igualmente aumentar el uso de procesador necesario para realizar los clculos.
Software necesario
Para la implantacin de un sistema de radio por Internet, es necesario un software especifico, este software puede ser privativo u opensource. La calidad de las herramientas opensource es de gran calidad, con un coste bajo-nulo, por ello elegiremos una distribucin de Linux como plataforma para nuestra infraestructura. Para este taller partiremos de una distribucin Opensuse 10.3.
Software necesario
Necesitaremos ademas instalados los siguientes paquetes, junto con todas sus dependencias. Icecast2: Servidor para la distribucin de contenidos. Ices: Codificador para ajustar la seal a su formato de salida. Darkice: Otro codificador con muchas opciones. Xmms: Para poder reproducir el contenido del flujo, cualquier reproductor moderno debera de servir igualmente para esta tarea.
Taller de streaming de radio con Icecast2 y Linux
Infraestructura necesaria
Para una instalacin bsica tan solo necesitaremos un servidor y uno o varios clientes. El servidor tiene que tener acceso a los contenidos originales.
Cliente
Servidor y codificador
Infraestructura necesaria
Es posible distribuir la carga entre varios ordenadores para obtener mayor rendimiento. El servidor puede utilizarse para distribuir mltiples flujos.
Servidor Servidor disco
Cliente
Codificador
Cliente
El servidor de streaming
Nuestro servidor ser icecast2, este solo acta para distribuir entre los clientes uno o varios flujos. Dichos flujos tienen que ser proporcionados por un codificador que adapte el audio original con los parmetros para su distribucin. Nuestro servidor soporta formatos Vorbis y MP3, aunque la versin compilada de Opensuse solo acepta MP3.
Configurando el servidor...
El fichero de configuracin esta ubicado en: /etc/icecast.xml Contiene secciones diferenciadas, las mas importantes son:
Limits: Parmetros para servir flujos. Authentication: Passwords de administracin. Port, hostname y bind-address: Configuracin de puertos para los diferentes flujos. Relay: Configuracin retransmisin desde otro servidor Logging: Ubicacin ficheros registro.
Configurando el servidor...
<limits> <clients>100</clients> <sources>5</sources> <threadpool>5</threadpool> <queue-size>65288</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>
Cantidad clientes conectados Parmetros servidor Mximos tiempos espera Parmetros conexin a rfagas
Configurando el servidor...
<authentication> <source-password>hackme</source-password> <relay-user>relay</relay-user> <relay-password>hackme</relay-password> <admin-user>admin</admin-user> <admin-password>hackm3</admin-password> </authentication> Password para reenvo Password para administracin web Password para el codificador
Es muy importante que el fichero de configuracin solo sea legible por el administrador al contener las contraseas sin cifrar. Hay que cambiar las contraseas por defecto.
Taller de streaming de radio con Icecast2 y Linux
Configurando el servidor...
<hostname>host.dominio.com</hostname> <listen-socket> <port>9990</port> <bind-address>123.456.789.123</bind-address> </listen-socket> <listen-socket> <port>8001</port> </listen-socket>
Nombre del servidor, (solo para generar la url del servidor en el interfaz web). Dos opciones posibles para definir los puertos a la escucha: Solo para una interfaz Para cualquier interfaz
Configurando el servidor...
<relay> <server>123.123.123.123</server> <port>8001</port> <mount>/example.ogg</mount> <local-mount>/different.ogg</local-mount> <on-demand>0</on-demand> <relay-shoutcast-metadata>0</relay-shoutcast-metadata> </relay> Servidor y puerto remoto Punto montaje remoto Donde monta el flujo remoto
Un punto de montaje, es la forma de identificar un flujo que esta siendo emitido por un servidor, tienen formato como si de un archivo de audio se tratara, aunque no es obligatorio.
Taller de streaming de radio con Icecast2 y Linux
Configurando el servidor...
<logging> <accesslog>access.log</accesslog> <errorlog>error.log</errorlog> <playlistlog>playlist.log</playlistlog> <loglevel>4</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error --> <logsize>10000</logsize> <logarchive>1</logarchive> </logging> Indica que no se machacan los registros Ficheros de log donde buscaremos pistas en caso de errores o mal funcionamiento. Nivel de depurado, aumentar para ver mas detalles en caso de error
Existen mas secciones en el archivo de configuracin, como directory y mount, pero estas son para configuraciones especificas no esenciales para un funcionamiento normal. Otras secciones como paths o security configuran rutas a archivos o permisos de ejecucin del servidor, no es necesario ajustarlas.
Configurando el codificador
Hemos elegido 2 codificadores diferentes, Ices y Darkice. Ices es el codificador que acompaa a Icecast2 y es mas simple. Operan de forma similar aunque el segundo es mas verstil. Ambos soportan MP3 y Vorbis, aunque los binarios compilados para Opensuse no incluyen el soporte para Vorbis.
Configurando Ices...
De forma anloga a Icecast2, disponemos de archivos xml de configuracin bsica en /usr/share/doc/packages/ices/ices-oss.xml Podemos elegir de entre varias configuraciones de ejemplo (alsa, oss, playlist), segn el tipo de fuente que vayamos a codificar. En este archivo de configuracin especificamos de donde tiene que tomar el sonido y donde lo tiene que servir (un punto montaje del servidor de streaming) as como los valores deseados para comprimir el flujo.
Taller de streaming de radio con Icecast2 y Linux
Configurando Ices...
El archivo de configuracin lo tenemos que copiar junto con las otras configuraciones en /etc En el podemos ver secciones diferenciadas: Relativas al programa (background, logpath, logfile, logsize, loglevel), son utiles en caso de errores de funcionamiento. Relativas al flujo a codificar (metadata, input, encode y resample), para configurar el flujo que pasaremos al servidor de streaming y su posterior distribucin.
Configurando Ices...
<background>0</background> Si ejecutamos desde un script para que funcione automticamente es necesario activar con 1 esta opcin.
<logpath>/var/log/ices</logpath> <logfile>ices.log</logfile> <logsize>2048</logsize> <!-- 1=error, 2=warn, 3=info ,4=debug --> <loglevel>4</loglevel> <consolelog>0</consolelog>
De forma similar a Icecast configuramos donde estarn los ficheros de log, el tamao y el nivel de detalle, as como si deseamos que se imprima por pantalla.
Configurando Ices
<metadata> <name>Radio Music</name> <genre>Varios</genre> <description>Radio music internet</description> <url>http://radiomusic.com</url> </metadata> Aqu utilizamos el sistema de sonido, alsa para entrada de sonido, puede tomar valores como oss, o playlist (una lista esttica) <input> <module>alsa</module> <param name="rate">44100</param> <param name="channels">2</param> <param name="device">hw:0,0</param> Ajustamos los parmetros de muestreo de la seal de entrada <param name="metadata">1</param> <param name="metadatafilename">test</param> </input> Informacin de la playlist que sera mostrada a los clientes
Configurando Ices...
Con la configuracin anterior captamos el sonido que reproducimos en el codificador, lo mismo que nosotros escuchamos como si tan solo reprodujramos.
<input> <module>playlist</module> <param name="type">basic</param> <param name="file">/home/user/playlist.txt</param> <param name="random">1</param> <param name="restart-after-reread">0</param> <param name="once">0</param> </input> Con esta otra configuracin podemos reproducir una lista esttica de canciones almacenadas en playlist.txt
Configurando Ices
<hostname>localhost</hostname> <port>8000</port> <password>hackme</password> <mount>/example1.ogg</mount> <yp>1</yp> Aqu configuramos la conexin con el servidor de streaming, tenemos que utilizar los valores utilizados en la configuracin de Icecast2. Aqu elegiremos el punto de montaje que tendr nuestro flujo. Opcin que nos permite anunciar pblicamente nuestro servidor.
<encode> <quality> 8 </quality> <samplerate> 44100 </samplerate> <channels> 2 </channels> </encode> Parmetros para la compresin del sonido
Configurando Ices...
<resample> <in-rate>44100</in-rate> <out-rate>22050</out-rate> </resample> Valores para cambiar la frecuencia del flujo de salida
Si necesitamos emitir un flujo de una charla en directo, no ser valido utilizar el mtodo de la playlist porque es esttico. Utilizaramos el mtodo general para poder capturar la seal de un micro conectado al equipo codificador.
Configurando Darkice...
Es un compresor alternativo, fcil de utilizar y con una sintaxis intuitiva. Es equivalente a Ices, as que el uso de uno u otro depende de los gustos del usuario. Se configura de forma anloga al anterior, esta vez sobre el fichero /etc/darkice.cfg Distinguimos las secciones principales: General [icecast2-0] Inputs [shoutcast-0] [icecast-0]
Taller de streaming de radio con Icecast2 y Linux
Configurando Darkice...
[general] duration = 0 bufferSecs = 10 reconnect = yes Duracion de la codificacion: 0 significa ininterrumpidamente. Tamao del buffer interno mientras comprime Reconectar en caso de desconexin del servidor
Utilizaremos entrada del sistema ALSA, pero tambin podemos utilizas OSS utilizando el parmetro /dev/dsp. Algunas tarjetas de sonido de bajo coste necesitan activar el parmetro dsnoop como valor de device. Ajustes sobre la seal a muestrear y comprimir.
Configurando Darkice
Darkice soporta conexiones a mltiples servidores de streaming, icecast1, icecast2, shoutcast. Como en este taller solo hemos configurado un servidor Icecast2 podemos omitir las secciones [icecast-0] y [shoutcast-0]. Prestaremos atencin solo a la seccin [icecast2-0] que es la adecuada para nuestro servidor, pudiendo tener varios flujos configurados creando secciones [icecast2-1].....
Configurando Darkice
[icecast2-0] bitrateMode = cbr (tambin puede tomar los valores abr, vbr) format bitrate server port password = mp3 (tambin puede ser vorbis) = 96 = 123.123.123.123 = 9990 = hackme
Parmetros de compresin
mountPoint = stream.mp3 name description url genre public = Radio Music Stream = Radio Music Internet Stream = http://radiomusic.com = varios = no
Informacin metadata
Mas informacin
Icecast2: http://www.icecast.org/docs/icecast-2.2.0/ Ices: http://www.icecast.org/docs/ices-2.0.0/ Darkice: http://darkice.tyrell.hu/trac/wiki/Documentation