Yohan Chalier Blog RSS

Icecast : Diffuser de la musique en ligne

Sommaire

Un tutoriel pour diffuser de la musique en ligne, en bonne qualité et gratuitement ! Pratique notamment pour animer des sessions de JDR à distance. Ce tutoriel s'adresse aux néophytes, tout y est expliqué ! Les étapes sont détaillées pour une installation sur Linux et sur Windows, mais cela fonctionne sensiblement de la même façon sur Mac.

Si vous rencontrez des problèmes, n'hésitez pas à m'écrire !

Introduction

L'objectif est de pouvoir diffuser un flux audio quelconque sur internet. Pour cela, nous allons utiliser Icecast, un serveur de diffusion multimédia libre. Il faut lui fournir un flux audio, qu'il se charge de diffuser aux clients qui se connecteront.

Notamment, le cas d'usage est le suivant : de la musique est jouée sur un smartphone, branché avec un câble jack sur l'entrée micro d'un ordinateur. Le signal de cette entrée micro est convertie en flux audio par le logiciel Butt, et transmis au serveur Icecast qui diffuse alors sur internet. Les clients n'ont plus qu'à se connecter à une adresse donnée, cela fonctionne sur n'importe quel navigateur, sans rien installer, et peuvent régler eux-même le volume.

Voici la procédure :

  1. Installer et configurer Icecast
  2. Installer et configurer le client source (Butt)
  3. Paramétrer la redirection NAT

Installer et configurer Icecast

À tout moment, référez-vous à la documentation d'Icecast pour en apprendre davantage.

Installer Icecast

Sur Linux :

Dans un terminal, exécutez la commande suivante :

sudo apt install icecast2

Durant l'installation, Icecast demande s'il faut le configurer tout de suite. Ce n'est pas nécessaire, car nous allons le faire nous-même ensuite. Vous pouvez donc répondre « Non ».

Sur Windows :

Rendez-vous sur la page de téléchargement d'Icecast et choisissez « Icecast for Windows ». Cela télécharge un installeur, que vous pouvez exécuter, pour installer Icecast2 en laissant les paramètres par défaut.

Configurer Icecast

La configuration d'Icecast se fait via un fichier icecast.xml. Commencez par créer un nouveau dossier pour l'occasion, puis copiez le gabarit du fichier icecast.xml dans ce dossier :

Nous allons maintenant pouvoir éditer notre copie de icecast.xml. À noter que sur Linux, il sera plus simple d'en changer les permissions (changez utilisateur pour votre nom d'utilisateur) :

sudo chown utilisateur icecast.xml

Ouvrez le fichier icecast.xml avec un éditeur de texte (sur Windows, utilisez le Bloc-notes ou un éditeur de texte plus avancé comme Notepad++). Nous allons nous contenter de modifier certaines lignes de ce fichier :

  1. Modifiez le contenu de la balise hostname en inscrivant votre adresse IP publique, que vous pouvez obtenir avec un site comme What Is My IP Address. Attention, cette adresse peut changer avec le temps, vous pourrez vérifier avant chaque lancement. Si vous en disposez d'un, vous pouvez également renseigner un nom de domaine, ce qui sera plus pratique pour vos clients.
  2. Modifiez le contenu des balises <clients> et <sources> incluses dans la balise <limits>. La balise <clients> gère le nombre maximum de clients pouvant se connecter en même temps. Si vous comptez diffuser votre musique à une poignée de personnes, vous pouvez diminuer la valeur par défaut. De même, nous n'allons utiliser qu'une seule source, vous pouvez donc inscrire 1 dans la limite de <sources>. Ce n'est pas strictement nécessaire, mais c'est une sécurité pour éviter que trop de monde ne se connecte en même temps.
  3. C'est l'étape importante : modifiez tous les mots de passes dans la balise <authentication>. Cela concerne trois mots de passe, pour les sources (notez-le car nous en auront besoin plus tard), pour les relais (que nous n'utiliserons pas ici, mais il faut tout de même changer le mot de passe) et pour l'administration. Vous pouvez également changer l'identifiant du compte administrateur ici.

Etape spéciale pour Windows : plus bas, sous la balise <paths>, modifier les chemins de <logdir>, <webroot> et <adminroot> en chemins absolus. Par exemple, avec le dossier d'installation par défaut, le chamin pour <logdir> est C:/Program Files (x86)/Icecast/log au lieu de ./log.

Tester Icecast

Ouvrez un terminal dans votre dossier contenant le fichier de configuration (ou déplacez-y vous avec la commande cd), puis exécutez Icecast en indiquant le chemin vers ce fichier de configuration :

Sur Linux :

icecast2 -c icecast.xml

La première fois, une erreur peut survenir, où Icecast manque de permissions pour enregistrer les logs. Pour corriger cela, exécutez la commande suivante :

sudo chown -R utilisateur /var/log/icecast2

en changeant utilisateur par votre nom d'utilisateur. Puis réessayez de lancer Icecast.

Sur Windows :

C:\Program Files (x86)\Icecast\bin\icecast.exe -c icecast.xml

Le serveur se lance. Attendez quelques secondes, puis ouvrez votre navigateur, et rendez-vous à l'adresse http://localhost:8000. Si tout a bien fonctionné, vous devriez voir la page d'accueil d'Icecast, et pouvoir vous authentifier en tant qu'administrateur en cliquant sur « Administration » et en renseignant l'identifiant admin et le mot de passe que vous avez modifié dans le fichier de configuration.

Interface d'administration d'Icecast
Capture d'écran de l'interface d'administration d'Icecast, une fois authentifié en tant qu'administrateur

Installer et configurer le client source

Comme mentionné plus tôt, Icecast ne fait que diffuser un flux à des clients. Notamment, il ne génère pas lui-même le flux. Pour cela, il faut utiliser un autre logiciel, qui enverra son flux au serveur. De nombreux logiciels permettent cela, Icecast en propose d'ailleurs quelques-uns.

Ici, nous allons utiliser butt, qui a l'avantage de supporter facilement les entrées micro. Pour diffuser de simples fichiers audio dans un dossier en boucle, liquidsoap fonctionne très bien.

Installer butt

Sur Linux :

Rendez-vous sur la page de téléchargement de butt, et choisissez soit Linux AppImage. Une fois le fichier téléchargé, avant de l'exécuter, il faut lui donner les permissions d'exécution :

cd ~/Téléchargements
chmod +x butt*.AppImage

Sur Windows :

Rendez-vous sur la page de téléchargement de butt, et choisissez soit Windows Setup (pour installer butt directement sur l'ordinateur), soit Windows without installer pour l'utiliser directement.

Si vous avez téléchargé l'installeur, exécutez-le pour installer butt.

Configurer butt

Lancez le logiciel. Cliquez sur « Paramètres ».

Sous l'onglet « Principal », dans le groupe « Paramètres du serveur », cliquez sur « Ajout. ». Renseignez les valeurs suivantes :

Validez en cliquant sur « Ajouter ».

Sous l'onglet « Audio », dans le groupe « Paramètres audio principaux », ouvrez la liste nommée « Primary Audio Device » et sélectionnez la source audio que vous souhaitez diffuser. Lorsque la source est sélectionnée, et qu'elle est active (de la musique est diffusée, le VU-mètre de la fenêtre principale de Butt s'active également. Validez en fermant la fenêtre de paramètres.

Tester butt

Cliquez sur le bouton lecture pour démarrer la diffusion. Dans votre navigateur, rendez-vous sur http://localhost:8000/stream.

Si tout se passe bien, le flux se lance automatiquement, vous devriez entendre simplement un petit décalage.

Interface de Butt
Capture d'écran de Butt en cours d'émission

Routage

Pour le moment, seul les clients sur votre réseau local ont accès au serveur. Pour permettre à des clients extérieurs de se connecter, il faut mettre en place une redirection de port.

Petite explication : du point de vue d'internet, seule votre routeur (la box internet) apparaît. Si un client essaye de se connecter à votre adresse IP, il communiquera avec ce routeur, qui ne sachant que faire, ignorera cette communication. Il faut paramétrer le routeur afin qu'il redirige les requêtes d'un certain port vers une machine particulière de votre réseau local. Quand le client enverra sa requête à votre adresse, le routeur la renverra vers votre ordinateur, et donc le serveur Icecast, qui pourra y répondre.

Cherchez sur Google « Redirection de ports » suivi du modèle de votre routeur, et suivez les instructions afin de créer la redirection suivante : redirigez le port 8000 externe vers le port 8000 de votre ordinateur.

Le plus souvent, cela consiste à :

  1. ouvrir son navigateur,
  2. accéder à l'IP du routeur, (souvent 192.168.0.1, 192.168.1.1 ou 192.168.1.254, que l'on peut trouver en cherchant sa passerelle par défaut),
  3. s'authentifier en tant qu'administrateur (le mot de passe est souvent lié à la clé WiFi),
  4. accèder au menu « Redirection de ports » ou « Configuration NAT »,
  5. ajouter une règle de redirection, pour le protocole TCP, avec pour port externe 8000, port interne 8000, et adresse l'adresse IP locale de votre ordinateur.

Cette redirection faite, un client externe peut se connecter au serveur Icecast en se rendant à l'adresse http://123.456.7.89:8000/stream en changeant 123.456.7.89 pour votre adresse IP publique. Notez qu'Icecast doit être en cours d'exécution, et Butt en cours d'émission pour que cela fonctionne.

Capture d'écran d'un navigateur web affichant un simple lecteur audio HTML
Capture d'écran du point de vue d'un client se connectant au flux

Résumé de l'utilisation

Le paramètrage effectué une première fois, pour relancer la diffusion, il faut :

  1. Lancer Icecast
  2. Lancer Butt
  3. Cliquer sur le bouton lecteur de Butt
  4. Lancer la musique sur la source audio

En cas de problème, n'oubliez pas de vérifier si votre IP publique a été changée, auquel cas vous pouvez modifier la configuration dans icecast.xml et changer le lien pour vos clients.

Paramétrage supplémentaire

Port. Il est possible de modifier le port par défaut, 8000, par un autre port de votre choix. Pour cela, il suffit de changer la valeur de la balise <port> dans la balise <listen-socket> du fichier icecast.xml. Modifiez alors la configuration de Butt avec ce nouveau port, ainsi que la règle de redirection NAT de votre routeur !

Point de montage. Par défaut, le flux est accessible à l'adresse finissant en /stream. Cela peut être changé en modifiant la valeur du paramètres « Point de montage Icecast » dans les paramètres de Butt. N'oubliez pas de précéder ce nom d'un slash. Cela permet par exemple de personnaliser l'URL du flux, ou de diffuser plusieurs flux en même temps.