La automatización de icecast más sencilla: ezstream

Montar 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 tiempo.

Básicamente montar un servicio de Icecast básico es instalar el software icecast2 y configurarlo..

Una vez configurado ya podemos transmitir en directo desde nuestras cosas, pero … ¿Cómo puedes hacer para que icecast siga transmitiendo aunque no estemos transmitiendo?

Lo que se tiene que hacer es montar un automatizador, el más sencillo es sin duda es ezstream.

Realmente lo más sencillo es contratar todo montado y que nos pongan un panel como Centova, pero quizás queramos ahorrarnos ese dinero, sobre todo si lo que queremos es hacer transmisiones amateur.

Lo primero será tener un fichero de configuración de ejemplo, os pego una configuración mía:

<!--
   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://xxxxxxx.eduardocollado.com:8000/musica</url>
    <!--
      If a different user name than "source" should be used, set it in
      <sourceuser/>:   --> 
    <sourceuser>usuario_secreto</sourceuser>

    <sourcepassword>password_secreta</sourcepassword>
    <format>MP3</format>
    <filename>/home/mp3/podcast/playlist.txt</filename>
    <!-- Once done streaming playlist.m3u, exit: -->
    <stream_once>0</stream_once>
    <shuffle>0</shuffle>
   
    <svrinfoname>Musica libre</svrinfoname>
    <svrinfourl>https://www.eduarodcollado.com</svrinfourl>
    <svrinfogenre>Talk</svrinfogenre>
    <svrinfodescription>Stream de musica libre sin derechos y tecnologia</svrinfodescription>
    <svrinfobitrate>128</svrinfobitrate>
    <svrinfochannels>2</svrinfochannels>
    <svrinfosamplerate>44100</svrinfosamplerate>
    <svrinfopublic>0</svrinfopublic>
</ezstream>

En la siguiente línea indico cual es el host donde hay que hacer el streaming, el ezstream no tiene por qué estar en el mismo servidor que el icecast

<url>http://xxxxxxx.eduardocollado.com:8000/musica</url>

Ahora tendremos que indicar el usuario y contraseña de ese stream:

<sourceuser>usuario_secreto</sourceuser> 
<sourcepassword>password_secreta</sourcepassword>

Inidicamos el formato de la transmisión, en mi caso mp3:

<format>MP3</format>

Ahora indicamos la lista con los ficheros de audio

<filename>/home/xxxxx/musica/playlist.txt</filename>

El fichero con la lista tendría una pinta tal que así:

root@icecast:~# cat /home/musica/playlist.txt 
/home/mmusica/cctrax/Echo_Delta_-_Blu_Eon_mp3_320_kbps/01_Mistyfog.mp3
/home/musica/cctrax/Echo_Delta_-_Blu_Eon_mp3_320_kbps/02_Morph.mp3
/home/musica/podcast/podcast-130-ipsec.mp3
/home/musica/cctrax/Echo_Delta_-_Blu_Eon_mp3_320_kbps/03_Inly.mp3
[...]

Este fichero puede ser todo lo largo que queráis.

Las dos líneas siguiente son bastante importantes y nos indican cómo trabajar con la lista de ficheros:

<stream_once>0</stream_once>
<shuffle>0</shuffle>

Le decimos que puede hacer streaming más de una vez, para que haga un bucle y le decimos que no lo haga de forma aleatoria, es decir, que lea los ficheros de forma secuencial.

Las siguientes líneas ya no son tan importantes.

Algo que tenemos que tener en cuenta es que quizás queramos tener más de un stream en el servidor, para ello podemos lanzar tantos procesos ezstream como queramos, lo único que tenemos que tener en cuenta es que por defecto icecast sólo permite dos streams y eso lo podemos cambiar en:

$cat /etc/icecast2/icecast.xml
[...]
    <limits>
        <clients>100</clients>
        <sources>10</sources>
[...]

Donde pone sources es donde lo definimos. Obviamente luego tenemos que reiniciar el servicio.

Por supuesto tenemos más métodos de automatización, muchos más completos como liquidsoap, pero no ten sencillos.