Cómo emitir audio en directo

Lectura Tiempo de lectura: 15 minutos.
Eduardo Collado
31 de enero de 2017

En Internet existen muchos servicios para emitir audio en directo, lo que comúnmente se llama una radio online, pero ¿cómo de complicado es montar un servidor para emitir en directo y no depender de nadie?


Realmente es extremadamente fácil y cualquiera puede hacerlo siguiendo las instrucciones que aquí os voy a dejar, de hecho para demostrar el funcionamiento del mismo el Sábado pasado hicimos un streaming sobre un servidor recien montado.


Para hacer el streaming se instaló un Icecast2 en un servidor cloud con 1G de RAM y 1 único core, lo más pequeño que se puede a modo de prueba para ver el desempeño y la verdad es que funcionó muy bien.


El streaming duró 25 minutos, los 5 primeros minutos sólo puse música mientras preparaba las cosas y llegaban oyentes, y esta es la gráfica de red del servidor durante el streaming.
trafico directo
La CPU, la memoria y el disco durante ese tiempo se quedaron en nada vamos, la CPU estuvo en todo momento en torno al 5% y el disco sin uso, la memoria RAM estuvo en 39M, os dejo el pantallazo.
htop directo
El software de escritorio empleado fue Mixxx.
A continuación os dejamos el audio y un resumen de todo lo que comentó en ese audio.

coche audioInstalar el servidor

Para instalar el servidor simplemente entré en mi panel de Neodigit y contraté un servidor cloud con 1G de RAM, 1 core y 10g de disco SSD, total 27 euros al mes. Con este servidor podremos hacer streaming 24*7 y todos los canales que nos de la gana con el servidor en España, más concretamente en el barrio de Fuencarral en Madrid.
El objetivo es hacer una transmisión de streaming que se pueda escuchar desde cualquier lugar, como en la foto de la derecha, este audio se llegó a escuchar desde el coche, gracias @toplus por la foto.

Instalar Icecast2

La instalación de Icecast2 consiste en lo siguiente:

sudo apt-get update
sudo apt-get install icecast2

Mientras se instala el software nos irá preguntando las contraseñas necesarias.
Y para que soporte streams en mp3, esto no lo dije en el audio, se me pasó 🙁 y es importante:

sudo apt-get install libmp3lame0

Ahora comprobaremos en el /etc/icecast2/icecast.xml que esté todo correcto:

Configurar icecast
vi /etc/icecast2/icecast.xml
[...]
    <authentication>
        <!-- Sources log in with username 'source' -->
        <source-password>xxxxxxxxx</source-password>
        <!-- Relays log in username 'relay' -->
        <relay-password>xxxxxxxxxx</relay-password>
        <!-- Admin logs in with the username given below -->
        <admin-user>admin</admin-user>
        <admin-password>xxxxxxxxxxxx</admin-password>
    </authentication>
[...]
[...]
    <hostname>icecdsast.eduaradodfcollaado.com</hostname>
    <!-- You may have multiple <listener> elements -->
    <listen-socket>
        <port>8000</port>
[...]

Y arrancamos el servicio de Icecast2

/etc/init.d/icecast2 start

Configurar Firewall

Esto no es estritamente necesario, pero sí muy necesario, filtrar todo lo no necesario, filtrar la IP que puede hacer ssh y permitir sólo el puerto del Icecast, en mi caso el 8000, para eso ejecutamos el siguiente script:

#!/bin/sh
IPT="/sbin/iptables"
# Flush old rules, old custom tables
$IPT --flush
$IPT --delete-chain
# Set default policies for all three default chains
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
# Enable free use of loopback interfaces
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
# All TCP sessions should begin with SYN
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -s 0.0.0.0/0 -j DROP
# Accept inbound TCP packets
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p tcp --dport 22 -m state --state NEW -s X.X.X.X/32 -j ACCEPT
$IPT -A INPUT -p tcp --dport 8000 -m state --state NEW -s 0.0.0.0/0 -j ACCEPT

X.X.X.X es la IP desde la que permitís el ssh al servidor.
Y para que las reglas sean persistentes instalaremos el iptables-persistent

apt-get install iptables-persistent

Esto creará el fichero /etc/iptables/rules.v4 con las reglas que le hemos definido
Y podemos confirmar que está arrancado con

/etc/init.d/netfilter-persistent status

Descarga y configuración de Mixxx

El software de escritorio que se va a conectar con nuestor servidor de streaming Icecast2 será Mixxx que podéis descargarlo de mixxx.org, tenéis versión para cualquier sistema operativo de escritorio.
Para configurar tanto los micrófonos como el servidor Icecast2 donde vamos a hacer el streaming lo hacemos en la opciones – preferencias.
Ahí en «hardware de sonido» seleccionaremos el o los micrófonos que vayamos a usar.
Y en emisión en vivo configuraremos los siguientes datos:

Espero que esta entrada os haya sido de utilidad si estáis pensando en montar un servidor de streaming y cualquier duda ya sabéis, podeis poneros en contacto con nosotros sin problemas.
Un placer y hasta la próxima
ACTUALIZACIÓN 25.02.2017 – Como emitir 24/7
Si lo que queréis es crear una radio que emita 24/7 podéis hacerlo con ezstream, para ello:

apt-get update
apt-get upgrade
apt-get install ezstream

Y ahora prepararemos el fichero de configuración copiando el del ejemplo

cp /usr/share/doc/ezstream/examples/ezstream_mp3.xml /root/ezstream_mp3.xml
chmod 0644 /root/ezstream_mp3.xml

Y editaremos el fichero, aquí lo más importante es indicar donde va el playlist, la línea

<filename>/home/mp3/rock/playlist.txt</filename
<!--
   EXAMPLE: MP3 playlist stream WITHOUT reencoding
   This example streams a playlist that contains only MP3 files. No other file
   formats may be listed. Since ezstream will not be doing any reencoding, the
   resulting stream format (bitrate, samplerate, channels) will be of the
   respective input files.
 -->
<ezstream>
    <url>http://icecast.eduardocollado.com:8000/radio</url>
    <!--
      If a different user name than "source" should be used, set it in
      <sourceuser/>:
     -->
    <!-- <sourceuser>mr_stream</sourceuser> -->
    <sourcepassword>clave_supersecreta</sourcepassword>
    <format>MP3</format>
    <filename>/home/mp3/rock/playlist.txt</filename>
    <!-- Once done streaming playlist.m3u, exit: -->
    <stream_once>1</stream_once>
    <!--
      The following settings are used to describe your stream to the server.
      It's up to you to make sure that the bitrate/samplerate/channels
      information matches up with your input stream files. Note that
      <svrinfoquality /> only applies to Ogg Vorbis streams.
     -->
    <svrinfoname>My Stream</svrinfoname>
    <svrinfourl>https://www.eduardocollado.com/svrinfourl>
    <svrinfogenre>RockNRoll</svrinfogenre>
    <svrinfodescription>This is a stream description</svrinfodescription>
    <svrinfobitrate>128</svrinfobitrate>
    <svrinfochannels>2</svrinfochannels>
    <svrinfosamplerate>44100</svrinfosamplerate>
    <!--
      Prohibit the server to advertise the stream on a public YP directory:
     -->
    <svrinfopublic>0</svrinfopublic>
</ezstream>

Ahora en el directorio /home/mp3/rock, este es el que he elegido yo subiremos los ficheros y crearemos un fichero playlist.txt con la lista de ficheros:
por ejemplo así:

/home/mp3/rock/Battleground.mp3
/home/mp3/rock/Beat_Down.mp3
/home/mp3/rock/Big_Hands.mp3
/home/mp3/rock/Big_Sky.mp3
/home/mp3/rock/Black_Box.mp3
/home/mp3/rock/Black_Polkadots.m

Y ahora tendremos que ejecutar ezstream, yo os recomiendo usar un screen

screen
ezstream -c /root/ezstream_mp3.xml

Y ahora, ¿cómo hacemos para que esté sonando música y cuando nosotros empecemos a hacer streaming con Mixxx deje de sonar esa música y suente nuestro stream?
Lo que tenemos que hacer es crear dos puntos de montaje, en mi caso autodj, que es donde está la música y que sea este el punto de montaje que salte si falla el de radio, donde entran los clientes.

<mount>
<mount-name>/autodj</mount-name>
<password>password_super_secreta_obviamente_esta_no_es</password>
<max-listeners>500</max-listeners>
<max-listener-duration>3600</max-listener-duration>
<dump-file>/tmp/dump-live.mp3</dump-file>
<intro></intro>
<charset>ISO8859-1</charset>
<public>1</public>
<stream-name>Radio</stream-name>
<stream-description>Radio</stream-description>
<stream-url>http://icecast.eduardocollado.com:8000/autodj</stream-url>
<genre>Rock</genre>
<bitrate>128</bitrate>
<type>application/mp3</type>
<subtype>mp3</subtype>
<burst-size>65536</burst-size>
<mp3-metadata-interval>4096</mp3-metadata-interval>
</mount>
<mount>
<mount-name>/radio</mount-name>
<password>password_super_secreta_obviamente_esta_no_es</password>
<max-listeners>500</max-listeners>
<max-listener-duration>3600</max-listener-duration>
<dump-file>/tmp/dump-live.mp3</dump-file>
<intro></intro>
<fallback-mount>/autodj</fallback-mount>
<fallback-override>1</fallback-override>
<fallback-when-full>1</fallback-when-full>
<charset>ISO8859-1</charset>
<public>1</public>
<stream-name>Radio Eduardo Collado</stream-name>
<stream-description>Radio</stream-description>
<stream-url>http://icecast.eduardocollado.com:8000/radio</stream-url>
<genre>Radio Podcast</genre>
<bitrate>128</bitrate>
<type>application/mp3</type>
<subtype>mp3</subtype>
<burst-size>65536</burst-size>
<mp3-metadata-interval>4096</mp3-metadata-interval>
</mount>

Posts relacionados

2 respuestas a “Cómo emitir audio en directo”

  1. […] Icecast.org Blog.tecnolocrática.net – Cómo emitir un audio en directo […]

  2. […] un servicio de streaming con Icecast es relativamente sencillo en un servidor linux, ya publiqué en el blog de Tecnocrática una entrada explicándolo hace algún […]

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *