I. Présentation

Avant tout, voyons comment fonctionne une webradio.

Comme un dessin vaut mieux qu'un long discours, voici un petit schéma expliquant le fonctionnement classique d'une webradio. (image tirée du site officiel de Liquidsoap et modifiée par mes soins).

Concrètement, un générateur de flux audio (ici Liquidsoap), appelé aussi source, sera chargé d'acquérir un flux audio (en provenance d'un microphone, d'un fichier musical, etc.).
Il devra, ensuite, compresser ce flux audio (en ogg ou mp3 par exemple) afin de l'envoyer vers un serveur de diffusion de flux (ici Icecast). Chaque flux sera représenté par un point de montage différent (nous y reviendrons).
Ce serveur peut se trouver sur la même machine que la source (et cela va être notre cas pour cet exemple). Rappel : La source c'est le logiciel Liquidsoap ;)
Le rôle d'Icecast sera de redistribuer ce(s) flux aux différents clients (ou auditeurs). Un client devra donc se connecter sur le serveur de diffusion (Icecast) pour obtenir le flux audio fourni par la source (Liquidsoap).

Note personnelle : En fait, j'avais mis un schéma pour éviter tout ce que je viens de dire ici (sic)...

Pourquoi utiliser Icecast et Liquidsoap ?

Icecast est probablement le logiciel de diffusion de flux le plus utilisé à l'heure actuelle. De plus, c'est un logiciel libre distribué sous licence GPL.
Concernant le générateur de flux audio, il existe beaucoup de logiciels disponibles (en voici une liste non exhaustive), j'ai choisi Liquidsoap après en avoir testé quelques-uns car je trouve celui-ci assez simple à comprendre et à utiliser. C'est également un logiciel libre (ben oui, vous êtes sur Génération Linux !) également distribué sous licence GPL. Il est, par exemple, utilisé par Fréquence3, une grande webradio francophone.


II. Installation

Pour les distributions Ubuntu et dérivées, l'installation de ces deux logiciels est très simple car ils se trouvent dans les dépôts officiels.

Cette commande suffit donc à installer ces deux logiciels :

apt-get install icecast2 liquidsoap

Si ces paquets ne sont pas disponibles pour vos distributions, rendez-vous sur les pages de téléchargement d'Icecast et de Liquidsoap.

Ces deux logiciels doivent désormais être installés sur votre machine, nous allons donc pouvoir passer à la configuration et à l'utilisation de chacun d'eux.


III. Utilisation

Icecast

Vous l'avez peut-être remarqué, le démon d'Icecast refuse de se lancer directement après son installation, c'est normal, il faut modifier un fichier (question de sécurité) ;)

Avant tout, nous allons commencer par étudier les options les plus importantes (selon moi) du fichier de configuration d'Icecast (il s'agit du fichier /etc/icecast2/icecast.xml) :

<limits>
        <clients>100</clients>
        <sources>2</sources>
        [...]
        <burst-on-connect>1</burst-on-connect>
        [...]
        <burst-size>65535</burst-size>
</limits>

Clients : Le nombre de clients simultanés autorisés
Sources : Le nombre de sources simultanées autorisées
Burst-on-connect : Active ou pas la mémoire tampon (par défaut, elle est activée)
Burst-size : Précise la taille souhaitée de la mémoire tampon

<authentication>
        <!-- Sources log in with username 'source' -->
        <source-password>hackme</source-password>
        <!-- Relays log in username 'relay' -->
        <relay-password>hackme</relay-password>

        <!-- Admin logs in with the username given below -->
        <admin-user>admin</admin-user>
        <admin-password>pass</admin-password>
</authentication>

Source-password : Le mot de passe qui devra être renseigné à Liquidsoap afin qu'il se connecte au serveur Icecast
Relay-password : Le mot de passe utilisé en cas de mise en place d'un serveur relai. (je ne traiterai pas de cette fonctionnalité dans cet article, vous pouvez voir ce dont il s'agit ici)
Admin-user et Admin-password : Le login et mot de passe nécessaire pour se connecter au panneau d'administration Web

<listen-socket>
        <port>8000</port>
        <!-- <bind-address>127.0.0.1</bind-address> -->
</listen-socket>

Port : Le port d'écoute du serveur (par défaut 8000)
Bind-address : Si vous souhaitez qu'une seule adresse ait accès au serveur Icecast sur le port 8000, décommentez cette ligne.


Voilà, je vous rappelle que ce ne sont que quelques options, pour voir la description du fichier de configuration complet, rendez-vous sur cette page.

Pour une utilisation basique, nous allons seulement changer l'option <source-password>, mettez-y le mot de passe de votre choix puis enregistrer votre fichier.

Enfin, nous allons modifier le "fichier de sécurité" afin de pouvoir lancer le démon d'Icecast. Pour ce faire, vous devez éditer ce fichier : /etc/default/icecast2 et remplacer la ligne suivante :

ENABLE=false

par

ENABLE=true.

Une fois cette modification effectuée, vous pouvez enfin lancer le démon : /etc/init.d/icecast2 start

Notre serveur est désormais opérationnel, vous pouvez y accéder via votre navigateur web à l'adresse suivante : http://localhost:8000
Notez que si votre serveur est sur une machine distante, il faut taper son adresse IP à la place de localhost (mais bon, je ne vous apprends rien) ;)

Voici à quoi ressemble l'interface web d'Icecast lorsqu'aucun flux ne lui est envoyé.

Liquidsoap

Contrairement à Icecast, Liquidsoap n'utilise pas de fichier de configuration. Le principe est le suivant : nous devons tout lui indiquer en une seule ligne de commande.
En fait, cette commande peut s'avérer particulièrement longue, c'est pour cela que nous allons l'écrire dans un fichier que nous appellerons dans un terminal.

Voici, par exemple, un fichier qui va nous permettre de diffuser les chansons contenues dans un répertoire donné :

liquidsoap 'output.icecast.vorbis(
host = "192.168.10.191", port = 8000,
name = "OST Transformers", description = "ma super desc", genre = "Soundtrack", url = "http://www.generation-linux.fr",
password = "source",
mount = "pornophonique.ogg",
mksafe(playlist("/media/CORSAIR/ASRALL/streaming/pornophonique")))'

Petite analyse :

liquidsoap ' ' : le nom de l'exécutable que nous allons lancer
output.icecast.vorbis( ) : le type d'encodage du flux, ici, nous encodons ce flux en ogg
host = "192.168.10.191", port = 8000 : l'adresse et le port du serveur Icecast
name = "OST Transformers", description = "ma super desc", genre = "Soundtrack", url = "http://www.generation-linux.fr" : les données d'information qui seront affichées dans l'interface web d'Icecast
password = "source" : le mot de passe que nous avons spécifié dans la balise <source-password> du fichier de configuration d'Icecast
mount = "pornophonique.ogg" : le nom que nous souhaitons donner au point de montage
mksafe()
: ne joue que les fichiersnon corrompus
playlist("/media/CORSAIR/ASRALL/streaming/pornophonique") : joue les fichiers contenus dans le répertoire passé en paramètre (il est également possible d'indiquer un fichier de playlist, contenant l'adresse absolue des différents fichiers musicaux).

Il ne nous reste plus qu'à lancer ce fichier depuis un terminal en tapant directement son nom (chemin relatif ou absolu).
Exemple :
/home/login/liquidsoap/nom_du_fichier
ou, si vous vous trouvez déjà dans le répertoire /home/login/, tapez simplement
./liquidsoap/nom_du_fichier

Mise à jour : David de l'équipe de Savonet m'a laissé un commentaire de réctification (merci beaucoup). Pour ne rien paraphraser, je vais juste recopier son article ci-dessous :)

Juste une remarque. Liquidsoap est construit comme un langage de script. L'utilisation standard est donc d'écrire un script liq (pas shell) dans un fichier et de lancer "liquidsoap mon.liq". Ou même de mettre le shebang #!/usr/bin/liquidsoap directement dans le script. Pour les montages simples, nous avons ajouté plus récemment la possibilité d'éxécuter directement "liquidsoap 'script liq ici'". Dans l'article, tu conseilles d'écrire la conf liq dans un fichier. Mais pas besoin d'écrire "liquidsoap 'blabla'" dans un script shell, il suffit d'écrire "blabla" tout court dans un script... liq. Au passage, il est bien pratique d'utiliser le mode ruby ou python de son éditeur pour travailler ses .liq.


Donc une fois la commande lancée, rendez-vous sur l'interface web de votre serveur Icecast, vous devriez y voir votre point de montage :)

Il ne vous reste plus qu'à cliquer sur "Click to listen" ou sur l'icône correspondante si vous utilisez la dernière version d'Icecast. Cela ouvrira un lecteur multimédia. Vous pourrez écouter votre playlist et surtout la faire écouter aux autres en leur communicant l'adresse de votre serveur ;)

Note : Pornophonique est un groupe de musique libre, je vous invite à voir mon article sur ce groupe et à en profiter, c'est vraiment mon gros coup de coeur !


Ainsi s'achève cette présentation, je n'ai pas expliqué toutes les possibilités de ces logiciels (il faudrait plusieurs jours pour cela), donc n'hésitez pas à aller sur les sites officiels d'Icecast et de Liquidsoap pour plus d'informations.