Instalación de Icecast estación de radio en Internet con Openwrt

Hace algún tiempo publicamos un post sobre como montar un hilo musical con Openwrt. En dicho proyecto ulilizabamos emisoras de Internet. Ahora vamos a montar una emisora en local para que la música que suene sea la nuestra.

Paso 1-Instalando Icecast y otras aplicaciones necesarias.

Accederemos a openwrt por ssh e instalaremos los siguientes paquetes:

opkg update; opkg install icecast ices nano

Hemos añadido nano para poder modificar más fácilmente los archovos de configuración.
A continuación pararemos Icecast y pondremos que no se ejecute al iniciar el router (disable). Más adelante lo arrancaremos de otra manera.

/etc/init.d/icecast stop
/etc/init.d/icecast disable

Paso 2-Creando el usuario que ejecutará Icecast.

Icecast no se puede ejecutar como root por lo que tendremos que añadir un usario a nuestro sistema. Para ello instalaremos shadow-useradd

opkg install shadow-useradd

Ahora añadimos el usuario que nosotros llamaremos galeon y le crearemos su home.

useradd galeon
passwd galeon
mkdir /home
mkdir /home/galeon
chown galeon /home/galeon

Paso 3-Configurando Icecast.

Vamos a modificar el archivo de configuración de Icecast. Para ello renombraremos el antiguo, creamos uno nuevo y le añadimos nuestra configuración.

mv /etc/icecast.xml /etc/icecast-orig.xml
nano /etc/icecast.xml

Y metemos lo siguiente:

<icecast>

  <!-- LIMITS -->
  <limits>
    <clients>10</clients>
    <sources>10</sources>
    <threadpool>5</threadpool>
    <queue-size>524288</queue-size>
    <client-timeout>30</client-timeout>
    <header-timeout>15</header-timeout>
    <source-timeout>10</source-timeout>
    <burst-on-connect>1</burst-on-connect>
    <burst-size>65535</burst-size>
  </limits>

  <!-- GENRIC -->
  <authentication>
    <source-password>cambiame</source-password>
    <admin-user>admin</admin-user>
    <admin-password>cambiame</admin-password>
  </authentication>
  <hostname>localhost</hostname>
  <listen-socket>
    <port>8000</port>
  </listen-socket>
  <fileserve>1</fileserve>

  <!-- PATHES -->
<paths>
        <!-- basedir is only used if chroot is enabled -->
        <basedir>/usr/share/icecast</basedir>

        <!-- Note that if <chroot> is turned on below, these paths must both
             be relative to the new root, not the original root -->
        <logdir>/tmp</logdir>
        <webroot>/usr/share/icecast/web</webroot>
        <adminroot>/usr/share/icecast/admin</adminroot>
        <!-- <pidfile>/usr/share/icecast/icecast.pid</pidfile> -->

        <!-- Aliases: treat requests for 'source' path as being for 'dest' path
             May be made specific to a port or bound address using the "port"
             and "bind-address" attributes.
          -->
        <!--
        <alias source="/foo" destination="/bar"/>
        -->
        <!-- Aliases: can also be used for simple redirections as well,
             this example will redirect all requests for http://server:port/ to
             the status page
        -->
        <alias source="/" destination="/status.xsl"/>
        <!-- The certificate file needs to contain both public and private part.
             Both should be PEM encoded.
        <ssl-certificate>/usr/share/icecast/icecast.pem</ssl-certificate>
        -->
    </paths>

  <!-- LOG -->
  <logging>
    <accesslog>access.log</accesslog>
    <errorlog>error.log</errorlog>
    <playlistlog>playlist.log</playlistlog>
    <loglevel>1</loglevel>
    <logsize>10000</logsize>
    <logarchive>1</logarchive>
  </logging>

  <!-- SECURITY -->
  <security>
    <chroot>0</chroot>
    <changeowner>
      <user>galeon</user>
      <group>nogroup</group>
    </changeowner>
  </security>

</icecast>

Debes cambiar la contraseña del usuario admin.

Ahora toca crear el archivo de configuración de una de las estaciones de radio a la que llamaremos Radio Galeón. Para ello hacemos:

nano /etc/ices.xml

Y metemos todo lo siguiente:

<ices>

  <!-- GENERIC -->
  <background>1</background>
  <pidfile>/var/run/icecast/ices1.pid</pidfile>

  <!-- LOGGING -->
  <logpath>/tmp</logpath>
  <logfile>ices1.log</logfile>
  <logsize>2048</logsize>
  <loglevel>3</loglevel>
  <consolelog>0</consolelog>

  <!-- STREAM -->
  <stream>
    <metadata>
      <name>Radio Galeón</name>
      <genre>Varios</genre>
      <description>OpenWRTRadio</description>
      <url>http://openwrt:8000/</url>;
    </metadata>
    <input>
      <param name="type">basic</param>
      <param name="file">/root/playlist1.txt</param>
      <param name="random">0</param>
      <param name="once">0</param>
      <param name="restart-after-reread">1</param>
    </input>
    <instance>
      <hostname>localhost</hostname>
      <port>8000</port>
      <password>cambiame</password>
      <mount>/RadioGaleon</mount>
    </instance>
  </stream>

</ices>

Paso 4-Utilizando un pendrive para guardar nuestra música

Aprovecharemos para instalar ahora el soporte para almacenamiento con pendrive. Aquí es donde meteremos nuestra música. El pendrive que vamos a utilizar está formateado en vfat, lo dejamos preparado para que reconozca ntfs también. Recalcamos que necesitamos un router con conector usb.

opkg install kmod-usb-storage kmod-fs-vfat kmod-fs-ntfs block-mount

Una vez hecho, meteremos el pendrive y ejecutamos:

logread

En mi caso veo una línea al final que dice:

... sd 0:0:0:0: [sda] Attached SCSI removable disk

Lo que me dice que me lo ha reconocido como sda.

A continuación creo una carpeta en el router /etc/music que voy a utilizar para montar el pendrive y monto el pendrive:

mkdir /root/music
mount -t vfat /dev/sda1 /root/music/ -o rw,sync

Accedo a la carpeta y me descargo algo de música libre en formato ogg:

cd /root/music
wget https://patrickdearteaga.com/audio/Not%20Giving%20Up.ogg --no-check-certificate
wget https://patrickdearteaga.com/audio/Spring%20Village.ogg --no-check-certificate
wget https://patrickdearteaga.com/audio/La%20Llamada%20de%20Ile.ogg --no-check-certificate

Con la utilidad que instalamos antes (block-mount), voy a pedirle que me reconozca lo que tiene montado mi openwrt y me lo guarde en la configuración.

block detect > /etc/config/fstab

Accedo al fichero de configuración:

nano /etc/config/fstab

Cambio donde dice option enabled '0' por option enabled '1'. Con esto nuestro pendrive se montará automáticamente en el próximo reinicio del router.

Paso 5-Creando el playlist, ejecutando el servicio y haciéndo que el servicio se ejecute al arrancar el router.

Con todos los archivos .ogg que nos hemos bajado, crearemos una playlist o lista de reproducción que se guardará en /root/playlist1.txt :

find /root/music -name "*.ogg" > /root/playlist1.txt

Cada vez que añadamos archívos .ogg al pendrive, tenemos que hacer el paso anterior.

Para ejecutar el servicio Icecast debemos poner:

/usr/bin/icecast -b -c /etc/icecast.xml

Para levantar la radio configurada haremos:

/usr/bin/ices /etc/ices.xml

Ahora toca hacer que esto e ejecute al iniciar el router:

nano /etc/rc.local

Y añadimos lo siguiente viendo que entre la ejecución de un comando y otro metemos un retardo de 3 segundos:

# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.
/usr/bin/icecast -b -c /etc/icecast.xml
/bin/sleep 3
/usr/bin/ices /etc/ices.xml
/bin/sleep 3
exit 0

Paso 6-Viéndolo en funcionamiento

Accede desde tu navegador a la dirección ip del router al puerto 8000:

http://<ip_del_router>:8000

Verás el servidor en funcionamiento:

Nuestra radio en funcionamiento

Fuente: https://forum.openwrt.org/t/how-to-openwrt-icecast-streaming-server-over-local-lan-and-or-internet/32954/4

Deja una respuesta

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