Icecast2 – Ices2

Référence: Ubuntu 22.04

Voici un résumé de mes notes d’installation pour un serveur ICECAST2 qui permet la diffusion sur le web ou en réseau local de sources diverses. Il faut donc un client qui connecte les sources locales vers le serveur. J’ai choisi ICES2 comme client, car il supporte la captation d’une carte de son ainsi que la réinjection STDIN (pipe) directement d’une autre application. La diffusion sera en OGG, c’est ce que permet ICES2.

Installer le serveur ICECAST2:
sudo apt install icecast2

Ajouter un fichier de configuration:
sudo nano /etc/icecast2/icecast.xml

Coller le contenu du fichier suivant en prenant soin de modifier les mots de passe « changeme » par un de votre choix
icecast.xml

Installer ensuite le client ICES2:
sudo apt install ices2

J’ai créé deux fichiers de configuration puisque je lance deux processus de ICES2.

Cette configuration sauvegarde le numéro de processus dans un fichier afin de pouvoir le tuer si nécessaire ou encore effectuer une mise à jour des métadonnées, car la commande:
kill -10 'pid'
Va déclencher celle-ci.

La configuration appelle l’envoi des métadonnées prévues pour chacune des diffusions. Celles-ci se trouvent dans un fichier spécifique à la source.

nano ~/ices2/metadata_98_5

title=98.5 FM
artist=Animateurs en direct
album=Voir l'horaire du diffuseur
genre=Actualités
url=https://www.985fm.ca/

nano ~/ices2/metadata_chromecast

title=Chromecast pour LMS
artist=Variable selon la source de streaming
album=Variable
genre=streaming

La 1ʳᵉ configuration pour la diffusion audio seulement d’un Chromecast vidéo duquel, j’extrais l’audio pour le réintroduire dans une carte de son USB. Pour obtenir le bon nom pour la carte de son, simplement faire la commande suivante:

aplay -l

**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC888-VD Analog [ALC888-VD Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: ALC888-VD Digital [ALC888-VD Digital]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 1: HDMI [HDA ATI HDMI], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: CODEC [USB Audio CODEC], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

ices2_chromecast_config.xml

Une seconde configuration pour un démodulateur FM NOOELEC pour une réinjection STDIN (PIPE) directement dans ICES2

ices2_98_5_config.xml

Pour lancer chacun des processus:

Chromecast:
Créer un script de lancement dans le répertoire de votre choix:
nano chromecast_ices2_stream.sh

#/bin/bash
pid1=$(cat /home/nas/ices2/ices_chromecast.pid)
echo "ices2 $pid1"
kill -15 $pid1
sleep 5
echo "Le processus PID $pid1 est maintenant terminé avec le code de sortie $?"
ices2 /etc/ices2_chromecast_config.xml &

Le script va s’assurer de tuer le processus s’il tourne déjà

NOOELEC:
Créer un script de lancement dans le répertoire de votre choix:
nano rtl_fm_98-5_ices2_stream.sh

#/bin/bash
pid0=$(pidof rtl_fm)
pid1=$(cat /home/nas/ices2/ices_98_5.pid)
echo "rtl_fm $pid0 et ices2 $pid1"
kill -15 $pid0
kill -15 $pid1
sleep 5
echo "Les processus des PID $pid0 et $pid1 sont maintenant terminés avec le code de sortie $?"
rtl_fm -M fm -s 200k -o 4 -A fast -r 48k -l 0 -E deemp -f 98.5M | ices2 /etc/ices2_98_5_config.xml &