Airtime

Uso básico de Airtime

Cómo subir un programa al servidor de una Radio Libre

Consideraciones previas

Al leer esta guía suponemos que sabes hacer un podcast y que conoces lo que significa cuestiones
como tags, formato mp3 / ogg, etc…

Esta es una guía básica de Airtime. Para conocer todas las funcionalidades de Airtime, podéis visitar el manual de su página web, que está muy completo aunque en inglés:

Manual Airtime 2.5.0 (Inglés)

Duración: Antes de subir debes asegurarte que tu programa dura 1h exactamente, ya que muchas
radios tenemso huecos exactos de 1 hora. Si dura menos añadele alguna canción al final. Su dura
más recortalo o consulta al administrador.

Tagear: Tagea bien tu programa para que podamos localizarlo en caso de necesidad o para
favorecer las automatizaciones.

  • Autor: Pon el nombre de tu programa. Ponlo siempre igual, sin tildes, ni
    espacios ni signos raros. No añadas nada más que el nombre del
    programa
  • Título: Pon el título del programa, sin tíldes ni signos raros. Ponlo siempre
    igual, sin tildes, ni espacios ni signos raros.
  • Albúm: Pon el nombre de la radio a la que perteneces. Ponlo siempre igual, sin
    tildes, ni espacios ni signos raros.
  • Nombre del archivo:* No dejes espacios, no añadas tildes ni signos raros.

Muy importante: si no subes el programa dejarás en silencio la radio.
Si crees que no vas a poder avisa al administrador para que ponga otra cosa. En caso de que no
puedas poner el programa pero sí tengas acceso al servidor pon una lista de reproducción de música
o un programa tuyo anterior.

Subir el archivo

1. Conéctate al servidor a través de la dirección, user y pass que el administrador te ha dado.

2. Rellena tus datos en la casilla de login y marca el idioma castellano.
3. Una vez que has hecho login y estás dentro acude a la pestaña AÑADIR PISTAS
4. Una vez allí pulsa el botón AGREGUE ARCHIVO y pincha en COMENZAR SUBIDA

Colocar el archivo en su horario

1. Cuando el indicador te señale que está al 100% pincha en la pestaña CALENDARIO

2. Selecciona la caja de tu programa con el botón izquierdo y pincha en AGREGAR CONTENIDO

3. Busca en la ventana que se abre tu programa y arrástralo hacia la caja de tu programa.

Comprobación
1. ¡Ya está! Pincha en OK, vuelve a CALENDARIO y verás que la barra que antes estaba
vacía ahora está llena.

Automatizar el rellenado de la parrilla en Airtime

En este tutorial vamos a ver cómo generar Shows de Airtime que se actualicen automágicamente cada vez que un podcast publica un nuevo programa en su web. Todo se basa en que siempre exista un único fichero por cada podcast con unos metadatos únicos, y un nombre de fichero (hemos puesto “ultimo.mp3” o “ultimo.ogg” según el formato) siempre el mismo que pueda identificar el airtime siempre que vaya a reproducir el hueco de cada reemisión.

Primero de todo, tenemos que instalar y configurar podget para que se ejecute cada hora (tuto en la wiki de riseup) con todas las URL de los programas que reemitamos.

Después instalamos ffmpeg y detox, el primero para poner los metadatos que necesitamos y el segundo es un programita que nos va a quitar espacios y caracteres raros de los nombres los ficheros.

$ sudo apt-get install ffmpeg detox

Este es el script que se programa en el crontab para que se ejecute cada hora después de podget y busque si hay ficheros nuevos, los copie para que se llamen ultimo.mp3 y ponga los metadatos correctos que luego usaremos en el airtime para la automatización del rellenado de la parrilla. El script se llama “renombrar_podcast.sh” y se encuentra en la ruta

/home/continuidad/renombrar_podcast.sh

Decir que la persona que lo ha hecho ha aprendido bash lo justo para hacer esto, así que quien sepa programar bien en este lenguaje puede optimizarlo tranquilamente. Este es el código del script:

#!/bin/bash
# renombrar_podcast.sh
# version 2.2
# Renombra el último podcast de cada programa y le añade los metadatos
# Creado por lsk
# Actualizado por 10 26-11-2014 (2.0): soporte ogg
# Actualizado por lsk 01-12-2014 (2.1): [fix] añadido '$subdir' en el if que comprueba si el último fichero se llama nuevo (siempre entraba)
# Actualizado por lsk 15-04-2015 (2.2): Uso de ffmpeg en vez de eyeD3 para editar metadatos

# CONSTANTES
lista=$(ls);
PATH_REEMISIONES="/ruta/al/directorio/con/los/podcast/"       # Directorio donde se alojan los subdirectorios que maneja este script

# Primero renombramos con detox
detox -r $PATH_REEMISIONES 2> tmp
rm -rf tmp 2> /dev/null

cd $PATH_REEMISIONES

# Buscamos todos los directorios en la variabvle DIR
DIRS=$(find ./* -type d)
echo "SubDirectorios guardados:"
echo $DIRS

# Recorremos cada directorio para hacer una lista de todos los subdirectorios
for subdir in $DIRS
do
  echo
  echo
  echo
  echo "*********************      OTRO PODCAST      ***********************"
  FILES=($(ls -t $subdir/*)) # Obtener archivos listados por fecha
  echo "Ficheros dentro del subdirectorio $subdir: ${#FILES}"
  if [ ${#FILES} -gt 0 ]
  then
    puntos=`echo ${FILES[0]} | tr -dc '.' | wc -c`      # Contamos el número de puntos que contiene el nombre de archivo
    ultimo_fichero=`echo ${FILES[0]} | cut -d. -f-$puntos`      # Cogemos el nombre de archivo
    echo "ultimo fichero $ultimo_fichero"
    puntos=$(($puntos + 1))
    extension=`echo ${FILES[0]} | cut -d. -f$puntos`    # Guardamos la extensión
    if [ "$ultimo_fichero" != $subdir"/ultimo" ]
    then # El último fichero en ser modificado no se llama último, por lo que hay que actualizar "ultimo"
        echo "Copiando $ultimo_fichero.$extension como $subdir/ultimo.$extension"
        ffmpeg -i  $ultimo_fichero.$extension -y -acodec copy -metadata album="$subdir"_ultimo $subdir/ultimo.$extension
    fi
  fi
done
exit 0

Configurar la ejecución automatica del script con CRON

Ejecutamos

$ crontab -e

y añadimos al final del archivo las siguientes líneas

0 */1 * * * /usr/bin/podget
0 */1 * * * /home/user/renombrar_podcast.sh

Guardamos con Ctrl + o y salimos con Ctrl + x

A partir de ahora cada hora se ejecutara podget y este script. Ya solo nos queda configurar correctamente el airtime:

Huecos linkados

A la hora de crear un hueco que se vaya a actualizar autónomamente la única diferencia es que deberemos marcar el tick “Link” en las opciones de repetición del hueco, en la ventana de edición de un Show.

(pendiente de poner una captura)

Bloques inteligentes

Para cada programa deberemos generar un bloque inteligente que coja el último audio del podcast. Para ello, estamos utilizando el metadato de “Album”. El script que hemos configurado se encarga de poner ese metadato de tal manera que seamos capaces de identificar el último audio de cada programa. Así, sabemos que siempre va a haber un único audio que contenga en la etiqueta “Album” el texto “nombre_de_programa_ultimo”.

Ejemplo

Imaginemos que queremos automatizar la emisión de un programa nuevo que se llame “EL podcast definitivo”. Lo primero será editar el fichero de configuración de podget “serverlist” y añadir la url del rss de este nuevo podcast.

$ nano ~/.podget/serverlist

Habría que añadir algo parecido a la siguiente línea:

http://web_de_el_podcast_definitivo.org/feed/ reemisiones el_podcast_definitivo

Es importante que ninguno de lo parámetros tenga espacios, porque el script de renombrado falla con ellos.

Una vez tengamos la url en el fichero “serverlist”, a la hora en punto siguiente se descargará el último audio del podcast que hemos añadido. El script de renombrado y etiquetado del último podcast va a poner el tag “Album” con el valor del nombre del subdirectorio y “_ultimo”. Así, en nuestro ejemplo el tag Album va a quedar: “./el_podcast_definitivo_ultimo”

Una vez ya exista el fichero en la carpeta de “reemisiones/el_podcast_definitivo/ultimo.mp3” podremos crear el bloque inteligente en la biblioteca de airtime, de tal manera que coja un único item en el que el tag “Album” contiene el texto “el_podcast_definitivo_ultimo”.

(pendiente captura de pantalla)

Guardamos el bloque inteligente, que ya podremos añadir al Show que hayamos creado para esta reemisión. Al estar linkado, rellenará todas las repeticiones del Show con el mismo contenido que pongamos en la primera instancia, y al irse actualizando el fichero ultimo.mp3 con podget y el script de renombrado/etiquetado cada vez que se publica la última edición del podcast, nos aseguramos que Airtime siempre reproducirá ese fichero para el resto de los tiempos sin intervención humana.

Evitar silencios en Airtime cuando no hay contenido agendado

Haciendo unas modificaciones en los scripts de liquidsoap de Airtime, conseguiremos que si una pista contiene silencio al final o nos hemos olvidado de agendar contenidos, salte una lista de reproducción aleatoria de música y cuñas.

Para ello debemos modificar el script que se encuentra en la ruta /usr/lib/airtime/pypo/bin/liquidsoap_scripts/ls_script.liq y en la línea 154 añadir lo siguiente:

default = amplify(id="silence_src", 0.00001, noise()) #esta línea ya está puesta
%include "autodj.liq"

Y en la misma ruta nos creamos un script nuevo de nombre autodj.liq con el siguiente contenido:

#!/usr/bin/liquidsoap
music = playlist(mode='randomize',reload=3600,reload_mode="watch","/ruta/a/la/musica")
jingles = playlist(mode='randomize',reload=1,reload_mode="watch","/ruta/a/las/cuñas")
musica_sec = mksafe(music)
cunias_sec = mksafe(jingles)
rotation = rotate(weights=[1,10],[cunias_sec,musica_sec])
default = fallback(track_sensitive=false,[strip_blank(max_blank=45.,threshold=-45.,default),rotation])

Le ponemos propietario pypo al script:

sudo chown pypo:pypo autodj.liq

Solo nos queda reiniciar el servicio de liquidsoap:

sudo /usr/lib/airtime/pypo/bin/airtime-liquidsoap restart

Esto debería hacer saltar música y cuñas aleatorias (1 cuña cada 10 canciones) cuando Airtime detecta un silencio.

 

ACTUALIZACIÓN ABRIL 2017

Algunas radios están utilizando una versión actualizada de los plugins de Liquidsoap 1.1.1 liquidsoap-plugins-* que genera problemas en la carga de stream de audio OGG. El fallo suele ser derivado de la librería Opus liquidsoap plugins opus que es una dependencia para Airtime, por lo que no se puede desintalar directamente.

En el log /var/log/airtime/pypo-liquidsoap/ls_script.log
suele localizarse con este error:

2017/04/26 11:16:04 decoder:3 Method “OGG” accepted “application/ogg”.
2017/04/26 11:16:04 http:3 Decoding…
2017/04/26 11:16:04 http:2 Feeding stopped: Ogg.Not_enough_data
2017/04/26 11:16:04 stderr:3 notification: Speex header too small

La solución temporal, hasta que no se actualice este error en los repositorios de paquetes tanto Debian como Ubuntu es borrar o mover esta librería y reiniciar los servicios dependientes de Airtime y Liquidsoap.

  1. cd /usr/lib/liquidsoap/1.1.1/plugins/
  2. mv opus.cmxs opus.cmxs.backup
  3. service liquidsoap restart
  4. service airtime-liquidsoap restart
  5. service airtime-playout restart

Con esto, los webstreams y otros materials de Airtime deberían volver a funcionar correctamente.

 
   

Actualizando la sección de podcasting, recomiendo el uso de GREG como Podcast Aggregator. Está algo desactualizado pero se instala de una manera muy sencilla usando pip3:
$ pip3 install —user greg
Esto creará en $HOME/.local/bin el ejecutable
Para la gestión de tags necesita el módulo de straggle
$ pip3 install —user straggle
Y con esto, se seguimos el README de configuración de Github no tenemos que complicarnos con el bash_script propuesto (aunque es una buena solución si no queremos/podemos usar un gestor de podcasts de escritorio.
Airtime, según cargue los archivos de podcasts, mostrará en Creator el nombre el Programa y con un bloque inteligente lo vinculamos a nuestra parrilla.

+info:
github.com/manolomartinez/greg#configur...