Montando una estación de radio en Internet, con software libre. (1ª parte)

"Hace ya mucho tiempo que ese grupo de gentes que se denominan Estado ha dejado de estar al servicio del ciudadano para preocuparse exclusivamente por sus intereses privados. Esta pandilla de roñosos que paralizan un medio de difusión tan poderoso como la radio tal vez nos ahorran la proclamación sobre las ondas, durante el día entero, de las ventajas de la purga Dumanoir. Pero nos ocultan cuidadosamente el hecho de que, en el momento actual de la técnica, podrían subsistir infinidad de emisoras privadas, al menos en FM, sin excesivos costes y sin publicidad, dejando a cada uno la facultad de expresarse." Boris Vian [1]

Una aventura para muchos, que nos permite la red hoy en día, es la posibilidad de montar estaciones de radio, llegando a todas las partes del planeta. Bastante más allá de lo que nos permitiría un emisor clásico de radio. Podemos montar estaciones de radio a través de Internet, desde la comodidad de casa o el local donde emitimos a las ondas hertzianas de nuestra barrio, ciudad o pueblo.

Una gran oportunidad para las radios libres y piratas, que se ven hoy en día acosadas o delimitadas por los medios técnicos, económicos y legales.

Este texto, y otro que seguirá quiere ayudar a llevar a cabo ese proyecto usando únicamente software libre.

El texto se basa, en la instalación, configuración,etc...en una máquina con el sistema Debian GNU/Linux (también valdrá para sistemas basadas en esa distribución)

Icescast2 y Ices2

Icecast2, en explicación simple es un servidor de streaming [2] que soporta mp3 y ogg, para crear estaciones de radio o vídeo en la red. Admitiendo múltiples "estaciones" o puntos de montaje de stream.

Mientras que Ices2, digamos que es el programa cliente que provee a Icecast2 de un stream o flujo de audio, pudiendo ser lanzado desde estaciones remotas a la que esta instalado y montado el servidor Icecast2. Puede funcionar en modo "live" (en directo) o reproduciendo una lista de reproducción o playlist. Pero teniendo en cuenta esn este último modo que únicamente reproduce , archivos en formato "ogg" [3].

Es ideal que el servidor icecast2 este montado en una máquina que disponga de un buen ancho de banda, lo que permitirá mayor nº de oyentes y puntos de montaje.

Ices2 se podra lanzar desde el local que emites (estudio de la radio, casa, local,etc..) usando un computador con algunas prestaciones mínimas. Por supuesto, cuanto mayor sea el ancho de banda de conexión a Internet de esa máquina, con mayor calidad podremos transmitir nuestro streaming.

La instalación en nuestra máquina es tan dificil como ejecutar en consola en modo root, esta orden :

#apt-get install icecast2 ices2 -y

Configurando Icecast2

Accedemos y editamos el fichero de configuración de Icecast2.

Para editar los ficheros que menciono, puedes hacerlo con tu editor de textos preferido, yo en los ejemplos uso "vim".

Adjunto el fichero de configuración, con sus comentarios adjuntos para su fácil comprensión. Hay muchos parámetros no incluidos, porque para un uso básico no son necesarios, como por ejemplo el uso de servidores relevo (servers relay). En caso de querer usar opciones avanzadas es mejor leer con detenimiento la documentación oficial en la web de icecast. [4]

NOTA a despistadxs :"Las direcciones IP y el hostname icecast.anarres.net usadas en los ficheros de configuración no existen, deberán ser cambiadas por las direcciones que vayais a usar"

#cd /etc/icecast2/
#vim icecast.xml

<icecast>
<!--Datos de la localización del servidor,
y correo electrónico del administrador-->
<location>Planeta Tierra</location>
<admin>nomada@icecast.anarres.net</admin>

<limits>
<!--nº de oyentes que acepta-->
<clients>200</clients>
<!--nº de estaciones montadas soportadas-->
<sources>2</sources>
<!--nº de hilos comenzados para manejar
conexiones clientes-->
<threadpool>5</threadpool>
<!--Tamaño máximo en bytes de un oyente en cola.
Un oyente temporalmente puede quedarse "atrás"
debido a que hay carga en la red o mucho "lag".
En este caso se monta una cola interna mantenida
para cada oyente. Si el valor supera al
marcado es desconectado.-->
<queue-size>102400</queue-size>
<!--Dejar por defecto el valor, ya q
ue ese parámetro no se emplea-->
<client-timeout>60</client-timeout>
<!--Tiempo máximo de espera (en segundos) de un
oyente con el servidor-->
<header-timeout>60</header-timeout>
<!--Tiempo máximo de espera (segundos) en que el
servidor espera trás dejar de recibir un flujo
de datos de una emisora o punto de montaje-->
<source-timeout>60</source-timeout>
<!--Normalmente el cliente tiene el buffer
local lleno, antes de recibir el stream.
Habilitado a 1, se envia una cantidad de datos de
audio para el stream de un oyente que se une.
Dando la sensación de redución del tiempo de
arranque del stream por parte del oyente. -->
<burst-on-connect>1</burst-on-connect>
<!-- Tamaño en bytes enviados
(relacionado con el parametro anterior)-->
<burst-size>65535</burst-size>
</limits>

<authentication>
<!-- Contraseña en texto claro, para establecer puntos de montajes. CAMBIAR NO DEJAR
LA QUE VIENE POR DEFECTO -->
<source-password>hackme</source-password>
<!-- Usado en el servidor master o maestro como parte de la autentificación cuando un
"esclavo" o máquina relevo solicita la lista de streams para transmitir. -->
<relay-user>relay</relay-user>
<!--CAMBIAR NO DEJAR LA QUE VIENE POR DEFECTO-->
<relay-password>hackme</relay-password>
<!--El username/password usado para todas las funciones de administración. Esto incluye
el tener acceso las pantallas de administración a base de web,etc. -->
<admin-user>admin</admin-user>
<!--CAMBIAR NO DEJAR LA QUE VIENE POR DEFECTO-->
<admin-password>hackme</admin-password>
</authentication>

<!--Direcciones URL, donde añadirán nuestras emisiones a un directorio de radio por Internet-->
<directory>
<yp-url-timeout>15</yp-url-timeout>
<yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
</directory>

<directory>
<yp-url-timeout>15</yp-url-timeout>
<yp-url>http://radio.autistici.org/update2.php</yp-url>
</directory>

<!-- IP de la máquina que se usará para que se conecten al servidor los distintos
puntos de montaje o emisoras y los oyentes.-->
<hostname>260.0.1.10</hostname>

<!-- En caso de que únicamente quieras un único socket de escucha-->
<!--<port>8000</port> -->
<!--<bind-address>127.0.0.1</bind-address>-->

<!-- Si quieres tener múltiples sockets de escucha-->
<listen-socket>
<!--El puerto TCP que usará para aceptar las conexiones cllientes.-->
<port>8000</port>
<!--Dirección de IP opcional que puede ser usada para una tarjeta de red específica.-->
<!-- <bind-address>127.0.0.1</bind-address> -->
</listen-socket>
<!--
<listen-socket>
<port>8001</port>
</listen-socket>
-->



<!--Configuración del punto de montaje o emisora cliente-->
<mount>
<!--Nombre de la emisión->
<mount-name>/radio-suburbia.ogg</mount-name>
<!--Datos de acceso para permitir el
establecimiento del punto de montaje-->
<username>source</username>
<!--CAMBIAR LA CONTRASEÑA POR DEFECTO-->
<password>hackme</password>
<!--Nº máximo de oyentes-->
<max-listeners>200</max-listeners>
<!--Más o menos aquí se especifíca
un punto de montaje opcional, a la que
los oyentes son movidos automáticamente si
la fuente se apaga o pasa el tiempo de
conexión al stream. -->
<fallback-mount>/radio-suburbia-2.ogg</fallback-mount>
</mount>

<!--Este flag enciende en icecasts2
el servidor de ficheros de archivos
estáticos que pueden ser servidos.
Todos los ficheros son servidos a un
"path" especifico.-->
<fileserve>1</fileserve>

<paths>
<!--Hace mención a donde se encuentrán
o almacenaran los logs, los
ficheros de administración vía web,etc...-->

<basedir>/usr/share/icecast2</basedir>
<!-- Si chroot esta activado, estos
paths deberán ser relativos
al nuevo root, no al original -->
<logdir>/var/log/icecast2</logdir>
<webroot>/etc/icecast2/web</webroot>
<adminroot>/etc/icecast2/admin</adminroot>
</paths>

<!--Información relativa a los logs generados
por icecast2. Uno donde se registran todos los
accesos y otro para información
de errores de ejecución,etc...El nivel 4 indica que se
registrarán mensajes de aviso, de error, informativos
y de depuración.El nivel 3 registra mensajes de
error,aviso einformación varia.Así sucesivamente-->
<logging>
<accesslog>access.log</accesslog>
<errorlog>error.log</errorlog>
<loglevel>4</loglevel>
<!-- 4 Debug, 3 Info, 2 Warn, 1 Error -->
</logging>


<!--Esta sección es usada en el caso de
que tengamos icecast2 en una jaula securizada "chroot".
Si está a 0, indica su no uso-->
<security>
<chroot>0</chroot>
<!--
<changeowner>
<user>nobody</user>
<group>nogroup</group>
</changeowner>
-->
</security>

</icecast>

El siguiente paso a dar, es lanzar es probar la ejecucción de icecast2, pero antes debemos editar otro fichero, que debe quedarse de esta forma.

#vim /etc/default/icecast2

# Fichero de configuración del server.
CONFIGFILE="/etc/icecast2/icecast.xml"


# Nombre o ID del usuario y grupo que puede ejecutar el daemon de icecast2
USERID=icecast2
GROUPID=icecast

# Edita /etc/icecast2/icecast.xml y cambia todas las contraseñas por defecto.
# Después cambia a true para poder ejecutar el daemon en /etc/init.d/
ENABLE=true

Una vez modificado el archivo en cuestión, probamos a lanzar icecast2 y comprobar que esta activo.

#/etc/init.d/icecast2 start
Starting icecast2: Starting icecast2
Detaching from the console
icecast2.
# ps -u icecast2
PID TTY TIME CMD
24036 pts/0 00:00:00 icecast2

Si queremos probar y usar la herramienta de administración de icecast2, abrimos nuestronavegador, y en la barra de direcciones indicamos según los datos de configuración :

http://260.0.1.10 :8000/admin/

Donde 260.0.1.10 (es la IP donde se encuentra funcionando icecast2,puede ser lógicamente una máquina remota o una local) y 8000 el puerto que hemos abierto para su uso. Nos pedirá autentificarnos, por lo que tendremos que registrarnos como hayamos indicado en el fichero de configuración.

Una vez dentro, podremos controlar muchas cosas : clientes y ips donde se conectan, puntos de montaje abiertos , estadisticas, etc...Una maravilla, en definitiva.


La herramienta de administración de icecast2 via web.

En caso de que queramos usar la administración vía remota y por un canal seguro (cifrado) podemos hacer un tunel ssh. Es recomendable para que la clave del admin, no viaje en texto claro. Para ello, lógicamente deberemos tener una shell en la máquina remota a la que accedemos.

#ssh -2 -C -N -L 8080:icecast.anarres.net:8000 nomada@icecast.anarres.net

Nos autentificamos y ya tendremos un canal cifrado abierto...basta después con abrir en nuestro navegador la siguiente url y autentificarnos :

http://localhost :8080/admin/

Configurando Ices2

Ices2 lo que va a hacer es llamar y montar la emisión o punto de montaje en el servidor icecast2. Este último lo que hará es servir el streaming de audio a los oyentes que se conecten a ese punto de montaje.

Vamos a crear 2 ficheros, primero uno para emitir en "directo", donde podremos salir en "antena" con micrófonos, poner música en el cd, usar una mesa de mezcla conectada al auxiliar de nuestra tarjeta de sonido,etc...es decir todo lo que reproduzcamos de sonido en nuestra computadora saldrá por el streaming.

Y otro fichero, que únicamente reproducira un "playlist" o lista de reproducción previamente creada.

Así cada uno, puede escoger usar indistintamente una forma de emisión u otra.

-Emisión en directo

Creamos el fichero "ices2-live.xml" en nuestra home.

Pongo una configuración básica...si necesitais algo más avanzado, recomiendo leer la documentación oficial en la url de icecast.

$cd /home/nomada
$vim ices2-live.xml

<?xml version="1.0"?>
<ices>
<!-- corre en background?-->
<background>0</background>
<!--donde estan los logs,etc..-->
<logpath>/var/log/icecast2</logpath>
<logfile>ices.log</logfile>
<!-- 1=error,2=warn,3=info,4=debug -->
<loglevel>4</loglevel>
<!-- logfile es ignorado si esta 1 -->
<consolelog>1</consolelog>

<stream>
<metadata>
<name>Radio-Suburbia</name>
<genre>Hacktivist radio</genre>
<description>copyleft music and hacktivist reports</description>
<url>http://suburbia.sindominio.net</url>
</metadata>

<input>
<!--Modulo de sonido que usamos en nuestro kernel, puede ser también oss-->
<module>alsa</module>
<param name="rate">44100</param>
<!-- samplerate 16000 -->
<!--Número de canales -->
<param name="channels">2</param>
<!--Datos del dispositivo de sónido,
puede variar según nuestro hardware-->
<param name="device">hw:0,0</param>
<!--A "1",envia información
del punto de montaje-->
<param name="metadata">1</param>
<!--Localización de un fichero que
creamos para que lo lea el ices2,
donde los oyentes podrán ver en sus
reproductores, el nombre de
la emisora,web,etc..-->
<param name="metadatafilename">./metadata</param>
</input>

<!--Datos donde se encuentra el servidor icecast, tienen
que ser iguales que los que usamos en la configuración
del icecast2.xml-->
<instance>
<hostname>icecast.anarres.net</hostname>
<port>8000</port>
<username>source</username>
<password>hackme</password>
<mount>/radio-suburbia.ogg</mount>
<!--A 1, le decimos a icecast2, que pasé
nuestros datos de emisión y conexión
en las urls indicadas dentro del fichero
icecast2.xml-->
<yp>1</yp>

<encode>
<!--Datos de la velocidad de transmisión, calidad, y
nº de canales empleados.Habrá que modificarlos
según el ancho de banda al que podamos transmitir
contra icecast2. Es decir si emitimos a 64 kbs por segundo
etc..-->
<minimum-bitrate>48000</minimum-bitrate>
<maximum-bitrate>64000</maximum-bitrate>
<nominal-bitrate>64000</nominal-bitrate>
<!--OJO, SI EN NUESTRA EMISION SE OYE COMO
RADIO PITUFO, SE DEBE A ESTE PARAMETRO,
DE VELOCIDAD DE DATOS.POR LO QUE TOCARA
AJUSTARLO-->
<samplerate>44100</samplerate>
<!--Calidad de codificación del bitrate. Va de 0 a
10. Interesa tener un valor bajo para conexiones
modestas->
<quality>1</quality>
<!--Número de canales de la entrada -->
<channels>2</channels>
</encode>

<!-- Algunos streams intentan reducir el bitrate,
reduciendo el número de canales a 1. La conversión de estéreo
a mono es común y cuando esta puesto a 1, indica el nº de canales
codificados. En definitiva poner en modo stereo o mono-->
<downmix>1</downmix>

<!--Codificando o recodificando, hay un punto donde se coge el audio y
se codifica a Ogg Vorbis. En algunas situaciones un stream puede requerir
que un samplerate bajo alcance un bitrate inferior. La nueva muestra
muestra va a modificar los datos de audio antes de que este entre en el
codificador, sin que afecte a otras instancias.Los valores más comunes usados son
48000, 44100, 22050 y 11025-->
<resample>
<in-rate>44100</in-rate>
<out-rate>44100</out-rate>
</resample>

</instance>
</stream>
</ices>

Ahora toca crear el fichero "metadata", el cual incluirá datos referentes a la emisora... ya sabeis esos rotulos, que aparecen moviendose en la pantalla del Xmms o en Winamp.

$ vim metadata

TITLE=(((Radio Suburbia))) in live!!
ARTIST=
ALBUM=
CONTACT=http://suburbia.sindominio.net

Como software auxiliar,es recomendable usar algún software de mezclas, para manejar los micros, el volumen , etc... Un programa muy completo es el "gnome-alsamixer". Y no cabe duda, que ello en conjunto con programas para samplear ; reproducción de cd 's , mp3 ,ogg ; y todo lo que puedas imaginar, puedes montarte un estudio de radio en directo hasta donde llegue tu imaginación. Más todo lo que puedas montar a través de la salida auxiliar de tu tarjeta de sonido : sintetizadores, mesas de mezclas, micros,etc...


Ices2 corriendo en modo live, junto a XMMS y Gnome-AlsaMixer

Ya únicamente nos falta, poner en marcha todos los elementos auxiliares para nuestra emisión en directo y lanzar ices2, donde veremos una información similar :

$ices2 87mhz-live.xml
[2006-09-24 16:19:52] INFO ices-core/main IceS 2.0.1 started...
[2006-09-24 16:19:52] INFO input-alsa/alsa_open_module Opened audio device hw:0,0
[2006-09-24 16:19:52] INFO input-alsa/alsa_open_module using 2 channel(s), 44100 Hz, buffer 371 ms
[2006-09-24 16:19:52] INFO input-alsa/alsa_open_module Starting metadata update thread
[2006-09-24 16:19:52] INFO signals/signal_usr1_handler Metadata update requested
[2006-09-24 16:19:52] DBUG metadata/metadata_thread_signal reading metadata from "./metadata"
[2006-09-24 16:19:52] INFO metadata/metadata_thread_signal tag 1 is TITLE=(((Radio-Suburbia))) in live!!
[2006-09-24 16:19:52] INFO metadata/metadata_thread_signal tag 2 is ARTIST=
[2006-09-24 16:19:52] INFO metadata/metadata_thread_signal tag 3 is ALBUM=
[2006-09-24 16:19:52] INFO metadata/metadata_thread_signal tag 4 is CONTACT=http://suburbia.sindominio.net
[2006-09-24 16:19:52] INFO metadata/metadata_thread_signal Updating metadata
[2006-09-24 16:19:52] INFO audio/resample_initialise Initialised resampler for 2 channels, from 44100 Hz to 44100 Hz
[2006-09-24 16:19:52] INFO encode/encode_initialise Encoder initialising with bitrate management: 2 channels, 44100 Hz, minimum bitrate 48000, nominal 64000, maximum 64000
[2006-09-24 16:19:53] INFO stream/ices_instance_stream Connected to server: icecast.anarres.net:8000/radio-suburbia.ogg
[2006-09-24 16:19:53] INFO audio/resample_initialise Initialised resampler for 2 channels, from 44100 Hz to 44100 Hz
[2006-09-24 16:19:53] DBUG encode/encode_clear Clearing encoder engine
[2006-09-24 16:19:53] INFO encode/encode_initialise Encoder initialising with bitrate management: 2 channels, 44100 Hz, minimum bitrate 48000, nominal 64000, maximum 64000

Se quedará ahí parado en tu consola, hasta que finalices la emisión ...con un simple ^C (Ctrl + C).

Si acaso el prompt volviera a aparecer, antes de que finalices la emisión, puede ser que tengas algo mal configurado. Fijate en los errores que muestra por pantalla, y hecha un vistazo a los logs.

- Emitiendo únicamente con una lista de reproducción o playlist

Crear una lista de reproducción es muy sencillo, abrimos nuestro XMMS [5] y añadimos los audios que nos interesen, y la salvamos por ejemplo como "playlist.m3u"

Es muy importante que la lista sea únicamente de ficheros en formato "ogg", sino tendremos errores en la ejecución de ices2

Lo siguiente es crear un fichero para el ices2 , en modo playlist.Es muy similar al anterior, cambiando únicamente algunos parametros. Por lo cual basta que copiemos el fichero "ices2-live.xml" a uno que se llame por ej. "ices2-playlist.xml" y cambiar únicamente la zona que se muestra a continuación.

$cp ices2-live.xml ices2-playlist.xml
$vim ices2-playlist.xml

<input>
<module>playlist</module>
<!--Indicar el sitio donde tenemos la
lista de reproducción-->
<param name="file">playlist.m3u</param>
<param name="type">basic</param>
<!--reproduce en modo random-->
<param name="random">1</param>
<!--A valor 0 reproduce la lista
continuamente."-->
<param name="once">0</param>
<param name="rate">44100</param>
<param name="channels">2</param>
<param name="device">/dev/dsp</param>

</input>

Lo siguiente sería lanzar ices2, en modo playlist.

$ ices2 ices2-playlist.xml
[2006-09-24 16:47:39] INFO ices-core/main IceS 2.0.1 started...
[2006-09-24 16:47:39] INFO signals/signal_usr1_handler Metadata update requested
[2006-09-24 16:47:39] INFO playlist-basic/playlist_basic_get_next_filename Loading playlist from file "playlist.m3u"
[2006-09-24 16:47:39] DBUG playlist-basic/shuffle Playlist has been shuffled
[2006-09-24 16:47:39] INFO playlist-builtin/playlist_read Currently playing "///media/cdrom0/massive_attack/100th_window/antistar.ogg"
[2006-09-24 16:47:40] INFO stream/ices_instance_stream Connected to server: icecast.anarres.net:8000/radio-suburbia.ogg
[2006-09-24 16:47:40] DBUG reencode/reencode_page Reinitialising reencoder for new logical stream
[2006-09-24 16:47:40] INFO encode/encode_initialise Encoder initialising with bitrate management: 1 channels, 32000 Hz, minimum bitrate 32000, nominal 48000, maximum 64000
[2006-09-24 16:47:40] INFO audio/resample_initialise Initialised resampler for 1 channels, from 44100 Hz to 32000 Hz
[2006-09-24 16:47:40] INFO audio/downmix_initialise Enabling stereo->mono downmixing

Y ya esta, ices2 reproduce (aunque tú no lo oigas localmente en tu computadora) el playlist que le has indicado.

Para finalizar

Como punto final, podrías oir la emisión de tu emisora,siguiendo el ejemplo que hemos desarrollado en :

"http://icecast.anarres.net :8000/radio-suburbia.ogg".

Pasa ese enlace a tu Xmms, o al Rhythmbox...y abracadabra...ya tenemos una emisora de radio por Internet con GNU/Linux, dispuesta a dar batalla en la red...siempre que haya ido bien todos los pasos dados.

Podrás oir de ese modo, si todo va bien, como si fueras un oyente más. Eso sí en modo "live", te recomiendo que oigas lo que emites desde otra máquina conectada a la red, para no generar un "eco" retardado de tu propia emisión en pleno directo ! ! X-)

Que lo disfutes ! ! :)


Licencia

nomada in http://sinDominio.net

Este texto está bajo la licencia Creative Commons Atribución-CompartirIgual 2.1. Usted es libre :

- de copiar, distribuir, exhibir y comunicar la obra

- de crear obras derivadas

Bajo las siguientes condiciones : Reconocimiento. Vd. debe reconocer y dar crédito al autor original.CompartirIgual. Si usted altera, transforma, o trabaja sobre esta obra, usted puede divulgar la obra resultante solamente bajo los términos de una licencia idéntica a ésta.

- Para cualquier utilización o distribución, usted debe informar claramente a terceros sobre los términos de la licencia de esta obra.

- Cualquiera de estas condiciones pueden ser modificada si usted consigue el permiso del autor. Su derecho a un uso justo y legítimo de la obra, así como otros derechos no se ven de manera alguna afectada por lo anterior.

Éste es un resumen del código legal que puede encontrarse en : http://www.creativecommons.org/licenses/by-sa/2.1/es/


Referencias

[1] http://es.wikipedia.org/wiki/Boris_Vian

[2] http://es.wikipedia.org/wiki/Streaming

[3] http://es.wikipedia.org/wiki/Ogg

[4] http://www.icecast.org/docs.php

[5] http://www.xmms.org/



Esta nota ha sido leída aproximadamente 14264 veces.



Noticias Recientes:

Comparte en las redes sociales


Síguenos en Facebook y Twitter



Notas relacionadas