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.
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.
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.
Instalar 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:
- Tipo: Icecast 2
- Servidor: IP de nuestro servidor
- Identificación: source
- Montar: lo que queráis que vaya para montar la URL
- Puerto: Por defecto 8000, pero se puede cambiar en el Icecast
- Contraseña: La que le hayáis dicho al Icecast 2
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>
[…] Icecast.org Blog.tecnolocrática.net – Cómo emitir un audio en directo […]
[…] 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 […]