Emitir audio de Mumble en servidor IceCast #RadiosLibres

Como algunos de vosotros sabréis, participo en Birras y Bits un podcast que habla sobre Software Libre y GNU/Linux entre otras cosas. La pasada semana empezamos con la nueva temporada y unas de las novedades que queremos hacer es poder emitir la grabación del podcast online y habilitar un chat de IRC para que nuestros oyentes puedan comentarlo. Buscando maneras de hacerlo he encontrado una que para mi es la mejor. Seguramente haya otras opciones más fáciles pero ya que me ponía a investigar como hacerlo he ido a lo “profesional” (que no, pero ahí queda).

Por el momento he configurado todo en local, utilizando una maquina virtual con Debian de servidor y mi portátil y mi PC de sobremesa como clientes para confirmar que todo funciona correctamente. Esto cuando lo acabemos de configurar en un servidor “real” seguramente nos de algún problema y lo dejaremos todo por aquí escrito.

Para evitar textos largos de configuraciones he creído que lo más oportuno sería poner trozos de código pequeños que sean relativamente importantes y poner los ficheros de configuración completos en Snippets en mi Gitlab.

¡Vamos al asunto!

Herramientas necesarias

  • Un servidor de Icecast2 en funcionamiento
  • Un servidor de mumble
  • 2 ordenadores con el cliente de Mumble instalado (al primero lo llamaremos Streamer y al segundo Talker). Además es importante que estos dos ordenadores tengan pulseaudio instalado.
  • Darkice, importante para transmitir el audio del mumble al icecast
  • Todo este proceso se realiza bajo root y en un servidor Debian 8.6

Instalación de Icecast2

Lo primero de todo es instalar Icecast2 desde los repositorios de Debian:

Durante la instalación te pide configurar el servicio de audio, yo lo he configurado tal y como se muestra en estas imágenes de abajo:

Nota: Es importante que si estamos usando un servidor con nombre, en vez de usar localhost uséis el dominio. Para facilitar la faena también es mejor poner la IP.

Esta configuración generará el fichero /etc/icecast2/icecast.xml que si todo ha ido bien contendrá la configuración. Si no es así tocará editarlo (a mi me ha pasado esto).

El fichero de configuración completo lo tenéis aquí y este trozo de código es importante:

También es importante el hostname y el puerto por donde escuchará:

Editamos el fichero /etc/default/icecast2 para habilitar el servicio en init.d, modificando el parámetro ENABLE a true:

Activamos el servicio para el arranque:

Y finalmente, iniciamos para cargar el la nueva configuración:

Ahora desde un navegador cualquier abrimos la página IPserver:8000:

icecastiniciadonavegador

Listo, ya tenemos un servidor Icecast2 instalado. ahora toca configurar otra cosa.

Instalar Ices2 como cliente

Una vez tenemos Icecast2 instalado, lo siguiente será configurar Ices2 para añadir puntos de montaje de audios en nuestro servidor de audio. Para ello nos instalamos el paquete ices2 desde los repositorios:

Por defecto, Ices2 no crea un fichero de configuración, para ello crearemos un directorio en /etc y añadiremos unas plantillas que hay en la documentación de Ices2.

Creamos el directorio:

Y luego copiaremos la plantilla:

Lo siguiente será crear un directorio para guardar el fichero del registro del servicio Ices2:

Y ahora toca modificar el fichero de configuración /etc/ices2/ices2-playlist.xml. Y os cuento que hay que modificar. El fichero es un XML, por lo tanto todo está escrito en ese formato y hay que modificar las etiquetas, así que la configuración es sencilla (pero a la vez es la parte más complicada y la que puede dar más dolores de cabeza).

Lo primero modificamos la etiqueta <background> y cambiar el 0 por un 1. De esta manera el servicio se ejecutará en segundo plano.

Dentro de la etiqueta <stream> tenemos otras etiquetas, primero nos fijaremos en la etiqueta <metadata>. Aquí podremos cambiar el nombre de nuestra radio, el género (si ponemos música) y la descripción de la estación de radio.

Luego nos fijaremos en la etiqueta <input> donde estableceremos la ruta del fichero con la lista de reproducción (atributo file), si queremos que la reproducción sea aleatoria (atributo random, 1=si, 0=no) y si queremos que al acabar se corte la emisión o que siga emitiendo en bucle (atributo once).

Finalmente, en la etiqueta <instance> configuramos el servidor, contraseña de las fuentes y el punto de montaje (un nombre sencillo y acabado en .ogg).

Como siempre, podéis consultar la configuración que he utilizado en este fichero.

Una vez tenemos la configuración, tenemos que crear los ficheros que hemos puesto en dicha configuración. Primero el .ogg (el cual copiamos alguno que tengamos al servidor):

Y luego añadimos ese fichero al playlist.txt:

Este comando añade las rutas de los ficheros .ogg en el fichero playlist.txt. Lo editaremos con nano y añadiremos lo siguiente al final del todo:

Luego veréis para que es esto. Lo siguiente será ejecutar Ices2 y montar nuestros audios a Icecast con:

Ahora volvemos a nuestro navegador y el 192.168.1.22:8000 tendremos nuestro punto de montaje:

mount

Incluso podremos iniciar VLC para escuchar nuestro audio:

vlc

Instalar un servidor Mumble

Ahora toca instalar un servidor Mumble para tener nuestra sala donde grabaremos el audio y podremos hablar con el resto de gente para crear el podcast.

Instalamos el servidor Mumble con:

Una vez instalado, lo configuramos con:

Y listo, ya tenemos nuestro servidor Mumble activo. (Evidentemente, si se quiere profundizar más en Mumble y crear salas y configurarlo a fondo, lo recomendable es utilizar la documentación oficial).

El punto fuerte del proceso

Hago un pequeño parón para explicar que es lo que vamos hacer a continuación. No sin antes hacer un pequeño repaso de lo que hemos realizado. Actualmente tenemos un servidor de sonido con Icecast2 y Ices2 funcionando correctamente. También tenemos un servidor mumble.

Ahora necesitamos dos ordenadores con el cliente de Mumble instalado. Uno para poder hablar, el cual llamaremos a partir de ahora como TALKER y otro para hacer el streaming, el cual llamaremos a partir de ahora como STREAMER. En los dos ordenadores es importante tener instalado PulseAudio.

Luego necesitaremos compilar un programa llamado DarkIce. Este programa lo que hace es coger todo el audio de una interfaz de PulseAudio virtual (o null sink) que crearemos y la envía al Icecast2. De esta manera, todo lo que se diga en Mumble será emitido a Internet. ¿Cómo se hace? Pues vamos a verlo.

Instalación de Mumble Client

Tanto en STREAMER como en TALKER es necesario tener el cliente de mumble instalado. Se instala muy fácil:

Preparar PulseAudio y Mumble

Lo primero será crear la interfaz de PulseAudio en STREAMER con lo siguiente:

Este comando crea una salida de audio virtual llamada stream, que en realidad no apunta a la tarjeta de sonido, pero permite que otros programas puedan capturar el sonido. PulseAudio crea automáticamente lo que se llama como monitor para que esa salida pueda ser utilizado como entrada para otro programa. En este caso  se llamará stream.monitor. DarkIce utilizará eso como entrada de audio.

Luego iniciaremos el cliente de Mumble en STREAMER y configuraremos el audio de salida en Configure > Settings > Audio Output y en System escogeremos la opción PulseAudio y en Device la opción Null Output.

mumbleconfigclient

Finalmente, nos conectaremos con TALKER a Mumble y además yo, para hacer pruebas, me he conectado también con mi Android. En la imagen de abajo vemos que hay tres usuarios:

  • Android: Mi móvil.
  • talker: El ordenador que hace de TALKER (y que será donde conectaremos nuestro micro y hablaremos nosotros)
  • zagur: Este es el ordenador que hace de STREAMER y que enviará todo el audio a Icecast2. Recomendación de la buena: mutea a este usuario para que no emita sonidos no deseados.

mumbleusuarios

Instalar DarkIce

Ahora lo realmente complicado. Instalamos DarkIce:

Si queréis, podéis compilar las fuentes:

Entramos al directorio y compilamos:

Una vez instalado, tenemos que modificar los ficheros de configuración no sin antes copiar el fichero de ejemplo:

Y luego lo editamos. Este fichero, si habéis tocado samba en GNU/Linux, tiene la misma estructura, así que es fácil de editar también.

Vamos a la sección [general] y lo dejamos así:

En la sección [input], tenemos que cambiar el nombre del device y del SourceName y dejarlo así:

Luego vamos a la sección [icecast2-0], aquí viene lo importante. Modificamos los parámetros:

¿Os acordáis del stream.ogg que añadimos en el fichero playlist.txt cuando configuramos Ices2? El punto de montaje para el “directo” será stream.ogg.

Y para acabar, el momento de la verdad. Ejecutamos:

Y si la configuración es correcta nos debería de aparecer las siguientes líneas:

Si todo funciona bien, iremos de nuevo al navegador y comprobamos que tenemos otro punto de montaje:

streamAquí tenemos nuestro DIRECTO. Todo el audio que se reproduzca en Mumble, la interfaz virtual que hemos creado en el PC de STREAMER lo reenviará mediante DarkIce al servidor de sonido IceCast2 y de esta manera podremos emitir nuestros programas en directo.

¿Siguiente paso?

Todo en local, con una maquina virtual, funciona perfectamente. El siguiente paso sería hacer este proceso en un servidor de verdad. Si se sigue todo a rajatabla en teoría no debería de venirse encima ningún problema. Pero claro, he dicho EN TEORÍA.

Hay algo que no me gusta de este método. Y es que el audio que se escucha en Mumble y que STREAMER lo envía a IceCast2, lo guarda en un fichero local llamado dump.ogg y lo va enviando a Icecast2.

Es como si fuera una caché, y el problema que me he encontrado es que hay un retraso importante con el audio que se escucha en Mumble y el “directo”. Hay un retraso de entre 2 y 5 minutos. Esto para hacer un podcast en directo es poco profesional.

Aún así, estoy casi seguro que se puede solucionar de alguna manera. Hay un manual extenso de DarkIce que seguro que se puede configurar de alguna manera para que esto no suceda.

Fuentes utilizadas: Mumble Icecast

El contenido de esta entrada está bajo licencia Creative Commons

Zagur

Técnico Superior de Administración de Sistemas. Estudiando actualmente Desarrollo de aplicaciones web. #GNU #Linux #CSS #HTML #Python #SoftwareLibre #OpenSource

3 comentarios “Emitir audio de Mumble en servidor IceCast #RadiosLibres”

  1. carloslinux

    Navega con Google Chrome 49.0.2623.87 Google Chrome 49.0.2623.87 en GNU/Linux x64 GNU/Linux x64

    No lo he probado pero se podría conectar mumble a Jack y enviarlo por idjc a icecast

    Responder

Trackbacks/Pingbacks

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Utilizamos cookies propias y de terceros para mejorar nuestros servicios. Si continúa navegando, consideramos que acepta su uso. Doble clic sobre aquí para cerrar.