Installer et utiliser LiquidSoap pour streamer une radio

Après avoir passé un certain temps à tenter de faire fonctionner transcode de SHOUTCast, j’ai remarqué qu’il n’était plus du tout supporté, donc pas de build ARM, et des builds assez anciennes.

En naviguant sur le net, je suis tombé sur LiquidSoap qui est plutôt génial !

Première chose, assez importante, il est disponible dans les packets depuis Ubuntu 12 (et Debian whezzy), il est donc intégré et mis à jour.

Un petit coup de apt-get et le tour est joué

apt-get -y install liquidsoap

Dans ma configuration j’ai créé quelques répertoires :

/opt/radio/mp3

/opt/radio/jingle

/opt/radio/safe

/mp3 va contenir toutes les fichiers mp3 pour la radio, ce sont les fichiers qui seront lus par défaut. Il peut y avoir plein de répertoires avec votre musique classée, par défaut LiquidSoap ira lire tous les sous-répertoires

/jingle va contenir les mp3 pour faire les jingle, toutes les heures ou entre les chansons …

/safe va contenir 1 fichier mp3, bidon, qui sera diffusé si la radio est en panne, c’est une sorte de backup.

Au niveau de la configuration, un petit tour du côté de /etc/liquidsaop/radio.liq

#!/usr/bin/liquidsoap

# Musique (répertoire où se trouvent les musiques)
main = mksafe(
               smart_crossfade(
                   normalize(
                       playlist("/opt/radio/mp3/"))))

# Ajout des jingles (répertoire où se trouvent les jingles)
jingles = playlist("/opt/radio/jingle/")

# En cas de problème, le stream peut être fait sur un seul fichier en boucle :
security = single("/opt/radio/single/musique.mp3")

# On y ajoute les jingles
radio = random(weights = [1, 10],[jingles, main])

# Et la securite
radio = fallback(track_sensitive = false, [radio, security])

# A live source
live1 = input.harbor("live1")
live2 = input.harbor("live2")

#radio
radio = fallback(track_sensitive=false,
                 [live1,live2,radio])

# Information de diffusion
output.shoutcast(%mp3,
    name="Live Radio",
    url="http://ma-radio.fm",
    port=80,
    password="plop",
    radio)

Donc la première ligne est obligatoire pour être interprétée par liquidsoap

On va créer la objet main va contenir la playlist des mp3, le volume sera normalisé (ça évite de sursauter au changement de piste), et on va faire un crossfade entre les pistes (par défaut c’est 2 secondes)

On va créer la objet jingle, qui va contenir la playlist des jingles

On va créer la objet security, qui va contenir notre fichier de sécurité

On va créer notre objet radio, qui va contenir 1 jingle pour 10 pistes de musique, le tout en aléatoire.

On va rajouter à notre objet le fallback, donc la musique de sécurité. « track_sensitive = false » signifie que l’on attend pas une fin de chanson pour faire le basculement, on bascule de suite.

On créé 2 objets live. Il est donc possible de diffuser en live (musique, voix) sur notre radio, depuis un ordinateur externe.

On remet donc notre objet radio avec cette nouvelle option.
La radio se coupe si live1 ou live2 prend la main. Le live2 se coupe si live1 prend la main.

Enfin, on dit comment et vers quoi on diffuse. Ici on envoie le tout sur un serveur SHOUTCast, en mp3 et on donne les informations d’écoute du serveur.

Les mp3 sont lus et ajoutés à la playlist au démarrage de liquidsoap

/etc/init.d/liquidsoap start

Et c’est parti !