El propósito principal cuando adquirí mi Raspberry Pi era convertirlo en un completo centro multimedia, un anhelo de muchos años que gracias al Pi he podido satisfacer a bajo coste. Por eso elegí Xbian como la distribución a instalar, ya que no sólo está especializada en ofrecer una gran experiencia con XBMC (sin duda el mejor media center libre) sino que permite evolucionar la plataforma a nuestro gusto gracias a que está basada en Debian.
Así, he podido cumplir la semana pasada con otro de mis objetivos con mi Pi: montar mi propia radio doméstica y poder escuchar música en cualquier parte de mi casa, todo ello con software libre y sin tener que realizar una fuerte inversión (¿he oído Sonos?).
Para ello vamos a utilizar dos componentes software que como ya he dicho son de licencia libre y que son fácilmente instalables en Debian. Por un lado se encuentra Icecast2, un servidor de streaming de audio que soporta el protocolo SHOUTcast y que es capaz de recibir flujos de música desde diversos tipos de fuentes, incluyendo retransmisiones en vivo que nosotros mismos emitamos o servicios populares como Spotify. Por otro lado tenemos a MPD, un reproductor de música en modo servidor.
El objetivo por tanto es configurar MPD para que reproduzca los ficheros de audio de un directorio concreto, envíe dicha reproducción a Icecast2 y que éste se encargue de generar un streaming de audio en nuestra red doméstica al que podremos acceder desde cualquier cliente compatible con el protocolo SHOUTcast, incluyendo smartphones via WiFi..
La instalación del software en Xbian (y cualquier otra derivación de Debian) es muy sencilla:
# apt-get install mpd mpc icecast2
Como se puede ver, aprovechamos la instalación de software para incluir MPC, un cliente de línea de comandos para controlar todos los aspectos de la ejecución de MPD, desde la gestión de listas de reproducción hasta la duración del fundido entre canciones. Para conocer todas las posibilidades de MPC, nada mejor que consultar su manual electrónico:
# man mpc
Durante la instalación de Icecast2 se nos preguntará por un nombre de servidor y por una serie de contraseñas para ciertos usuarios y operaciones: source
(acceso de las fuentes de audio), relay
(acceso de la replicación de streams desde otros servidores) y admin
(acceso de administración de Icecast2). La fortaleza de estas contraseñas queda a nuestra discreción, pero en este momento la que más nos interesa es la de source
, ya que es la que va a utilizar MPD para enviarle la reproducción de ficheros de audio a Icecast2.
Para nuestro propósito, con esto ya está listo Icecast2. Si queremos modificar más aspectos de su configuración o simplemente rehacerla (por ejemplo, cambiar una contraseña), basta con que editemos el fichero /etc/icecast2/icecast.xml
y procedamos a reiniciar el servidor:
# /etc/init.d/icecast2 restart
Es el turno de configurar MPD, el cual seguramente habrá mostrado un aviso al finalizar la instalación y haberse iniciado:
listen: bind to '[::1]:6600' failed: Failed to create socket: Address family not supported by protocol (continuing anyway, because binding to '127.0.0.1:6600' succeeded)
No debemos preocuparnos ya que este mensaje significa que no tenemos activo IPv6 en nuestro Pi, lo cual no impide que MPD se haya iniciado y esté en pleno funcionamiento. De todas formas, si queremos activar el soporte IPv6 en nuestra Xbian, basta con incluir la cadena ipv6
en /etc/modules
. También podemos probar a cargar el módulo a mano desde la línea de comandos:
# modprobe ipv6
La configuración de MPD es algo mas compleja, ya que tendremos que indicarle tanto la fuente de ficheros de audio como el destino de su reproducción (en nuestro caso, el servidor Icecast2). Para ello tendremos que editar el fichero /etc/mpd.conf
.
Por defecto, la fuente de ficheros (indicada por la variable music_directory
) apunta al directorio /var/lib/mpd/music
. Mi recomendación es dejarla tal como está y crear enlaces simbólicos dentro de dicho directorio que apunten a los directorios en los que tengamos nuestros ficheros de música, aunque se trate de dispositivos removibles (como discos USB).
Lo siguiente es configurar el destino de la reproducción, Para ello comentaremos todas las secciones audio_output
e incluiremos la siguiente:
[code]
audio_output {
type «shout»
name «Mi radio domestica»
description «Stream MPD desde mi Raspberry Pi»
host «localhost»
port «8000»
mount «/mpd»
password «contraseña_source_de_icecast2»
bitrate «128»
format «44100:16:2»
encoding «mp3»
}
[/code]
En este ejemplo, estamos indicándole a MPD que envíe la reproducción de ficheros al servidor Icecast2 que está escuchando en el puerto 8000 de la misma plataforma (nuestro Pi), utilizando /mpd
como punto de montaje (más sobre esto a continuación). Dicha reproducción se codificará al vuelo en formato mp3 a 44100Hz, 16 bits, 2 canales y un bitrate de 128k. Aquí el parámetro realmente importante es password
, en el que indicaremos entre comillas la contraseña que usamos para el usuario source
de Icecast2.
Además habilitaremos la siguiente sección audio_output
, con al finalidad de que MPD arranque de todas formas aunque el servidor Icecast2 no esté disponible:
[code]
audio_output {
type «null»
name «My Null Output»
}
[/code]
Terminamos la configuración de Icecast2 modificando la variable bind_to_address
, a la que asignaremos el valor localhost
. Tras guardar los cambios, sólo queda reiniciar ambos servidores:
# /etc/init.d/icecast2 restart
Restarting icecast2: Starting icecast2
Detaching from the console
icecast2.
# /etc/init.d/mpd restart
[ ok ] Stopping Music Player Daemon: mpd.
[ ok ] Starting Music Player Daemon: mpd.
Ahora vamos a comprobar que MPD está en correcto funcionamiento:
# mpc outputs
Output 1 (Mi radio domestica) is enabled
Output 2 (My Null Output) is enabled
Si alguna de las salidas apareciera deshabilitada, bastaría con ejecutar el siguiente comando:
# mpc enable
Vamos a alimentar nuestro servidor MPD con música. Lo más sencillo es utilizar MPC para esta tarea.
# mpc update --wait (escanea el directorio de ficheros de audio)
# mpc ls | mpc add (añade las canciones encontradas a la lista de reproducción por defecto)
# mpc playlist (muestra el contenido de la lista de reproducción que acabamos de crear)
...
# mpc play (comienza la reproducción)
...
Podemos seguir «jugando» con MPC a través de comandos como status
, random
, repeat
, crossfade
, shuffle
, etc., pudiendo utilizar MPC desde otro ordenador con sólo incluir el parámetro -h
junto con la IP del Pi. Las posibilidades son muchas para que la reproducción quede a nuestro gusto. Además, MPD va a recordar el estado en el que lo hayamos dejado, por lo que aunque reiniciemos el Pi, MPD continuará la reproducción por donde la dejamos.
Es el momento de conectarnos a Icecast2 con un cliente compatible. En http://www.icecast.org/3rdparty.php tenemos una lista completa tanto de clientes de control (para sustituir a MPC) como de reproductores compatibles. Para escuchar nuestra recién instalada radio doméstica, tenemos que indicarle al reproductor que se conecte a la URL http://ip_raspberry_pi:8000/mpd.m3u
. Como vemos, el punto de montaje definido antes se utiliza en la URL para acceder a nuestra radio, que se está transmitiendo por nuestra red doméstica y a la que puede tener acceso cualquier dispositivo conectado a la misma, desde ordenadores hasta altavoces inalámbricos, pasando por tablets y smartphones.
A partir de aquí las posibilidades son infinitas. Por ejemplo, podemos conectar flujos de terceros (con software como DarkIce), replicar esta instalación en nuestra empresa para implantar un hilo musical a bajo coste o utilizar un servidor virtual en Internet para tener nuestra radio disponible en cualquier sitio (imaginad conectar nuestra radio privada al equipo de audio de nuestro coche mediante el Bluetooth de nuestro smartphone).
Espero que lo probéis y que compartáis vuestras experiencias y otras ideas que se os ocurran para mejorar esta receta.
Pingback: Móntate tu propio servidor de música doméstico con Raspberry Pi - Raspberry Pi | Raspberry Pi