Icecast & IceS Bulleyes

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche

 ATTENTION : Cette page est obsolette ! Veuillez suivre ce lien pour la version la plus récente: Icecast playback & direct Bullseye



Icecast 2 et IceS pour Bullseye en réseau local


par Petitchat


Introduction

Vous savez sûrement déjà en arrivant sur cette page qu'Icecast est un logiciel libre inspiré de Shoutcast servant à faire une web radio. Icecast ne fonctionne pas tout seul: il a besoin de sources qui lui fournissent un flux audio qu'il convertit en flux réseau. Les sources peuvent être de plusieurs sortes. Pour diffuser un flux mp3 il faut le client IceS. Pour diffuser un flux ogg vorbis il faut le client Ice2; pour diffuser un flux en direct il faut le client Darkice. Il existe d'autres clients pour d'autres types de sources. Ici nous allons juste installer Icecast et IceS pour diffuser des mp3.

Prérequis

  • une machine sous Debian Bullseye
  • connectée au réseau local et à Internet
  • un fichier mp3 de test qu'on cherche à diffuser, dans notre exemple « satiscation.mp3 » (du groupe « The Purrin Stones »)
  • le dossier "musique" contenant les mp3 est monté dans le dosier "/mnt" et accessible dans le réseau local

Installation

Nous allons installer plusieurs paquets

  • icecast2, paquet principal
  • libmp3lame-dev, paquet pour encoder en mp3
  • libxml2-dev, paquet pour compatibilité du xml
  • libshout-dev, paquet indispensable
  • libvorbis-dev, pour l'encodage en mp3 et ogg

Concernant le client IceS, la source mp3, il y a un problème de droits avec la firme Franhofer qui les détient. Du coup on ne trouve pas de paquet IceS dans les sources Debian. Il faut télécharger le code et le compiler manuellement. Pour le faire nous aurons besoin d'un paquet important pour compiler :

  • build-essential

Nous allons essayer de tout installer d'un coup. Mais d'abord une petite mise à jour des dépôts :

sudo apt update

puis

sudo apt install icecast2 libmp3lame-dev libxml2-dev libshout-dev libvorbis-dev build-essential

Lors de l'installation d'Icecast il est demandé 3 mots de passe, il faut les remplir. Faisons nous maintenant un espace de travail, par exemple sur le bureau un dossier « webradio ».

cd /home/petitchat/Bureau
mkdir webradio

Puis dans ce dossier créons un dossier IceS qui va servir à recueillir les sources depuis Internet et les compiler.

cd webradio ; mkdir ices ; cd ices

On télécharge alors les sources depuis Internet :

wget http://downloads.us.xiph.org/releases/ices/ices-0.4.tar.gz

on les décompresse

tar xf ices-0.4.tar.gz

on se place dans le dossier ices-0,4

cd ices-0.4/

Là on lance la commande "configure" qui permet de préparer la compilation et de produire le fichier "make". On utilise deux options de configuration :

  • --with-pic qui permet au code compilé d'être indépendant de sa position (Position Independent Code)
  • --withe-lame qui permet d'avoir disponible l'option de réencodage à la volée

sudo ./configure --prefix=/usr/local --with-pic –with-lame

puis on lance make

sudo make

et enfin

sudo make install

Maintenant nous allons copier le dossier de configuration:

mkdir /etc/ices cp /usr/local/etc/ices.conf.dist /etc/ices/ices.conf

Paramétrage de icecast2

Éditons le fichier /etc/icecast2/icecast.xml

sudo nano /etc/icecast2/icecast.xml

Les fichiers xml exigent une syntaxe rigoureuse, il faut faire très attention. Intéressons nous d'abord à la section d'authentification:

 <authentication>
 <!-- Sources log in with username 'source' -->
 <source-password>hackme</source-password>
 <!-- Relays log in with username 'relay' -->
 <relay-password>hackme</relay-password>
 <!-- Admin logs in with the username given below -->
 <admin-user>admin</admin-user>
 <admin-password>hackme</admin-password>
 </authentication>

Il faut vérifier ou changer les mots de passe et les reporter le moment venu dans les fichiers de configuration des relais et des sources. Le mot de passe « admin-password » sert à la connexion à la page web d'administration. Attention aussi à la section suivante :

 <!-- This is the hostname other people will use to connect to your server.
         It affects mainly the urls generated by Icecast for playlists and yp
         listings. You MUST configure it properly for YP listings to work!
    -->
    <hostname>192.168.1.2</hostname>

    <!-- You may have multiple <listen-socket> elements -->
    <listen-socket>
        <port>8000</port>
        <!-- <bind-address>127.0.0.1</bind-address> -->
        <!-- <shoutcast-mount>/stream</shoutcast-mount> -->
    </listen-socket>

Il faut y renseigner en hostname l'adresse IP à laquelle on pourra joindre le serveur. Il est possible aussi de changer le port. Quand c'est fait on sauvegarde et on quitte l'éditeur. Icecast est déjà paramétré comme service (et automatiquement lancé au démarrage). On redémarre Icecast avec la commande :

sudo systemctl restart iceacast2.service

Si tout s'est bien passé, on peut accéder à la page web d'administration à l'adresse :

http://<hostname>:<port>/

dans cet exemple :

http://192.168.1.2:8000/

Plus tard il sera possible de revenir paramétrer ce fichier, notamment pour limiter le nombre de clients :

<clients>100</clients>

et surtout augmenter la limite du nombre de sources qui est limitée à deux par défaut :

<sources>2</sources>

Il est normal que pour l'instant aucun point de montage n'apparaisse : les points de montage interviennent lors du paramétrage des sources. Pour finir le paramétrage d'Icecast, il faut savoir que le démon se lance avec cette commande :

sudo icecast -c /etc/icecast2/icecast.xml

Paramétrage de IceS

Icecast peut convertir simultanément plusieurs flux audio en provenance de plusieurs sources différentes. Il est donc possible de lancer plusieurs instances d'IceS différentes afin d'obtenir simultanément plusieurs sources. Chaque sources a une configuration différente et se caractérise par un point de montage différent. Le point de montage détermine l'adresse à laquelle on pourra attendre le flux correspondant.

Un chose à faire avant de se lancer dans la configuration à proprement parlée est de créer un dossier qui servira à recueillir la playlist, les fichiers ices.cue.ices.log et ices.pid (si ices est lancé sous forme de démon). Ce dossier est appelé <BaseDirectory> dans le fichier de configuration. Il est fortement conseillé de faire un dossier de base par source(=point de montage= différentes chaînes), sinon les différentes instances de IceS qui partagent le même dossier de base partagent aussi les même fichiers ices.log, ices.cue et ices.pid. Pour construire une arborescence de travail, on se place sur le dossier « webradio » créé précédemment :

cd /home/petitchat/Bureau/webradio

et on créé le dossier de base de notre chaîne « radio petit chat » :

mkdir petitchat

Laissons là cet espace de travail et plaçons nous maintenant dans le dossier contenant le fichier de configuration d'IceS :

cd /etc/ices/

et sauvegardons le fichier de configuration « ices.conf »

sudo cp ices.conf ices.conf.bak

Nous allons personnaliser le fichier configuration pour notre radio « radio petit chat », donc nous appellerons notre fichier de configuration « ices.petitchat.conf ».

sudo cp ices.conf ices.petitchat.conf

Puis nous pouvons éditer le fichier « ices.petitchat.conf »

sudo nano ices.petitchat.conf

La première section à paramétrer est la section <server> :

    <Server>
      <!-- Hostname or ip of the icecast server you want to connect to -->
      <Hostname>localhost</Hostname>
      <!-- Port of the same -->
      <Port>8000</Port>
      <!-- Encoder password on the icecast server -->
      <Password>hackme</Password>
      <!-- Header protocol to use when communicating with the server.
           Shoutcast servers need "icy", icecast 1.x needs "xaudiocast", and
	   icecast 2.x needs "http". -->
      <Protocol>http</Protocol>
    </Server>

Voici une description des champs importants :

  • <Hostname>, il faut laisser « localhost » si la source et la cible sont sur la même machine, sinon il faut renseigner l'adresse IP du serveur Icecast
  • <Port>, détermine le port auquel atteindre le flux. Il est ainsi possible d'attribuer par exemple un port par source.
  • <Password>, mot de passe pour ce connecter au serveur Icecast, doit être le même mot de passe que celui défini par <source-password> dans le fichier de configuration d'Icecast.

La prochaine section importante est la section <Exécution> :

  <Execution>
    <!-- Set this to 1 if you want ices to launch in the background as a
         daemon -->
    <Background>1</Background>
    <!-- Set this to 1 if you want to see more verbose output from ices -->
    <Verbose>1</Verbose>
    <!-- This directory specifies where ices should put the logfile, cue file
	 and pid file (if daemonizing). Don't use /tmp if you have l33t h4x0rz
         on your server. -->
    <BaseDirectory>/home/petitchat/Bureau/webradio/petitchat/</BaseDirectory>
  </Execution>

Explication des paramètres :

  • <Background>, permet de lancer la source IceS comme un démon, il faut mettre ce paramètre sur 1 pour l'activer.
  • <Verbose>, ce paramètre réglé à 1 permet d'avoir des fichiers journaux plus détaillés.
  • <BaseDirectory>, ici il faut spécifier un dossier de base pour cette source, dossier dans lequel IceS cherche la playlist à jouer et enregistre les fichiers, ices.log, ices.cue et ices.pid si la daemonisation est activée.

Il reste ensuite un certains nombres de champs à examiner :

    <!-- The name of the mountpoint on the icecast server -->
    <Mountpoint>/radiopetitchat.mp3</Mountpoint>
    <!-- The name of the dumpfile on the server for your stream. DO NOT set
	 this unless you know what you're doing.
    <Dumpfile>ices.dump</Dumpfile>
    -->
    <!-- The name of you stream, not the name of the song! -->
    <Name>Radio Petit chat</Name>
    <!-- Genre of your stream, be it rock or pop or whatever -->
    <Genre>félin</Genre>
    <!-- Longer description of your stream -->
    <Description> La radio des chatons relativement doux</Description>
    <!-- URL to a page describing your stream -->
    <URL>http://192.168.1.2</URL>
    <!-- 0 if you don't want the icecast server to publish your stream on
	 the yp server, 1 if you do -->
    <Public>0</Public>

Voilà une description des champs importants :

  • <Mountpoint> défini le point de montage de la source qui ensuite est accessible à l'adresse : « http://<Hostname>:<port><Mountpoint> ».Dans l'exemple, notre source est accessible à l'URL : « http://87,65,43,21:8000/petitchat.mp3. Par soucis de compatibilité avec certains lecteurs audio il est conseillé de choisir un nom de point de montage en minuscule, sans espace ou caractères spéciaux et finir le nom par « .mp3 » pour donner une information sur le format du flux.
  • <Dumpfile>, ne pas changer
  • <Name>,<Genre>,<Description> décrivent le flux. <Name> apparaît dans le lecteur audio du client
  • <URL>, correspond à l'URL général du site associé au flux et non l'URL du flux qui lui est paramétré dans icecast.xml
  • <Public>, cette option permet d'apparaître ou non dans l'annuaire YP, en local on désactive cette option.

Les prochains paramètres concernent le réencodage à la volée. Cela permet d'uniformiser le bitrate et le taux d'échantillonnage des mp3 qui sont diffusés et diminue les bugs qui peuvent survenir si, par exemple, les mp3 ont des bitrates trop hauts ou trop bas. Activer le réencodage n'utilise pas plus de mémoire et très légèrement plus de ressource processeur.

<!-- Stream bitrate, used to specify bitrate if reencoding, otherwise
	 just used for display on YP and on the server. Try to keep it
	 accurate -->
    <Bitrate>128</Bitrate>
    <!-- If this is set to 1, and ices is compiled with liblame support,
	 ices will reencode the stream on the fly to the stream bitrate. -->
    <Reencode>1</Reencode>
    <!-- Number of channels to reencode to, 1 for mono or 2 for stereo -->
    <!-- Sampe rate to reencode to in Hz. Leave out for LAME's best choice
    <Samplerate>44100</Samplerate>
    -->
    <Channels>2</Channels>

Explication des champs :

  • <Bitrate>, Le biterate se mesure en kbits/secondes et mesure la qualité d'un fichier son. La valeur de 128 est reconnue dans la majorité des lecteurs audio
  • <Reencode>, permet d'activer le réencodage à la volée sur 1, désactivé sur 0
  • <Samplerate>, le taux d'échantillonnage se mesure en kHz, c'est un nombre de frames par seconde. Le chiffre de 44100 kHz est accepté par la plupart des lecteurs audio

Les derniers paramétrages se font dans la section <playlist> :

 <Playlist>
    <!-- This is the filename used as a playlist when using the builtin 
	 playlist handler. -->
    <File>playlist.petitchat.txt</File>
    <!-- Set this to 0 if you don't want to randomize your playlist, and to
	 1 if you do. -->
    <Randomize>1</Randomize>
    <!-- One of builtin, perl, or python. -->
    <Type>builtin</Type>
    <!-- Module name to pass to the playlist handler if using  perl or python.
	 If you use the builtin playlist handler then this is ignored -->
    <Module>ices</Module>
    <!-- Set this to the number of seconds to crossfade between tracks.
         Leave out or set to zero to disable crossfading (the default).
    <Crossfade>0</Crossfade>
    -->
  </Playlist>

Avec les champs suivant :

  • <File>, indique le nom du fichier playlist pour cette source. Si le nom de fichier est relatif « playlist.petitchat.txt » alors IceS regarde dans le dossier courant, l'emplacement d'où on lance la commande de lancement de IceS. Ce champs accepte les noms de fichiers absolus qui sont préférables si on ne lance pas IceS toujours du même emplacement.
  • <Randomize>, si ce paramètre est sur 1, alors les pistes de la playlist seront lues aléatoirement, sinon (sur 0) dans l'ordre
  • <Type>, laisser sur « builtin »
  • <Module>,laiser « ices »
  • <Crossfade>, permet un « crossfade », un fondu enchaîné, entre les pistes. Le chiffre indique le nombre de secondes à fondre. Sur 0, les pistes sont lues à la suite sans fondu. L'option « reencode » doit être activée pour bénéficier de cette fonction.

Une fois que le fichier ices.petitchat.conf est prêt on sauvegarde les modifications et on quitte l'éditeur.

Quelques commandes

Script de lancement de IceS

Nous allons maintenant écrire un petit script qui nous servira à lancer notre source « radiopetitchat ». Ce script, appelons le « ices-petitchat.sh », contiendra simplement une ligne de commande de lancement. Celle ci est de la forme :

/usr/local/bin/ices -c <fichier conf> -v

On créé donc notre script de lancement , dans le dossier «/home/petitchat/Bureau/webradio/petitchat/ » créé précédemment (et utilisé en dossier de base pour notre chaîne):

sudo nano ices-petitchat.sh

La première ligne devra être

#!/bin//sh

Pour signifier un script, puis

/usr/local/bin/ices -c /etc/ices/ices.petitchat.conf -v

on quitte en sauvegardant et on rend le script exécutable :

sudo chmod +x ices-petitchat.sh


confection d'une playlist de test

Copions le fichier « satiscation.mp3 » qui nous sert de test dans le dossier /webradio/petitchat/. Dans ce même dossier nous allons créer la première playslist de test :

sudo nano playlist.petitchat.txt

Attention a respecter le nom de playlist utilisé dans le champs <File> du fichier de configuration ices.petitchat.conf. La playlist n'accepte que les noms de fichiers avec leur chemin absolu, le seul nom de fichier ne suffit pas. Elle n'accepte pas non plus les jokers (« * »).

On remplit le nom du fichier qu'on souhaite jouer :

/home/petitchat/Bureau/webradio/petitchat/satiscation.mp3

On sauvegarde et on quitte avant d'essayer notre webradio.

Lancer la source

se placer dans le dossier « /webradio/petitchat/ » puis

sudo ./ices-petitchat.sh

Si la source est daemonisée, le programme affiche le PID du démon créé. On peut maintenant entendre le flux à une adresse de la forme :

http://<HostName>:<Port><MountPoint>

donc dans notre cas :

http://192.168.1.2:8000/radiopetitchat.mp3

Arrêter la source

Pour stopper la source il faut connaître son PID. Pour ce faire on utilise cette commande :

sudo ps -aux | grep ices

« ps -aux » affiche les processus en cours, le | (pipe) envoie le résultat vers grep, « grep ices » cherche les lignes contenant la chaîne « ices » parmi celles renvoyées par « ps -aux ». On obtient une ligne qui ressemble à ceci :

root 31178 0.6 0.1 49080 2868 ? Ss 23:06 0:19 /usr/local/bin/ices -c /etc/ices/ices.petitchat.conf -v

Le PID correspond au nombre dans le deuxième champs soit ici « 31178 ».


Une autre façon d'obtenir le PID est de lire la valeur contenue dans le fichier ices.pid , fichier qui se situe dans le dossier <BaseDirectory>, soit dans notre cas « /home/petitchat/bureau/webradio/petitchat/ »

On utilise la commande «kill » en root pour arrêter le démon :

sudo kill -9 <PID>

soit dans l'exemple

sudo kill -9 31178


Scripts de confection de playlists

Maintenant que nous sommes en mesure de diffuser un mp3 sur le réseau, il reste le long travail de définir la programmation de notre chaîne, ce qui revient à créer une playlist sophistiquée. Pour y parvenir voilà deux scripts qui peuvent servir d'outils pour créer des playlists facilement en se chargeant de différentes tâches fastidieuse.

Script de conversion de playlist Windows vers Linux

Pour diverses raisons on peut avoir besoin de convertir une playlist faite sous windows en un format qu'IceS sous Linux puisse lire. C'est le cas si par exemple un dossier « musique » contenant les mp3 est partagé sur le réseau local et monté sur notre serveur Debian. La playlist au format m3u faite sous windows aura des lignes qui ressemblent à ceci :

#EXTM3U
#EXTINF:491,Purrin Stones - Satisaction
\\serveur\musique\rock\Purring Stones\Satiscation.mp3

tandis que le dossier « musique » est accessible depuis le serveur à un chemin tel que  « /mnt/musique/ » . Le fichier mentionné sur la playlist est donc accessible au chemin « /mnt/musique/rock/Purrin Stones/Satiscation.mp3 » .

Plusieurs remarques s'imposent :

  • les arborescences se ressemblent à partir du dossier « musique » mais différent avant
  • les arborescences de windows utilisent des antislash « \ » et celles de Linux des slash « / »
  • le codage des caractères différents pour Windows et Linux fait que le caractère « retour chariot » est lu « ^M » par Linux
  • Les lignes commençant par la dièse « # » sont vues comme des erreurs par Ices qui ne tolère que les lignes faisant référence à des mp3

D'autre part, il faut savoir que si IceS rencontre une erreur fatale dans la playlist comme un fichier absent ou ayant un mauvais format alors il s'arrête purement et simplement. La playlist ne doit pas comporter d'erreur si on veut une lecture continue fiable.

Pour ces raisons nous avons besoin d'un script de conversion entre playlist Windows et playlist IceS/Linux. Ce script aura les fonctions suivantes :

  • changement des antislash en slash
  • changement du mauvais préfixe (ici « \\serveur\ ») en bon préfixe (ici « /mnt/ »)
  • conversion des caractères de retour chariot
  • élimination des lignes diésées

On pourra facilement ajouter ces deux fonctions simples et pratiques :

  • test d'existence du fichier
  • teste s'il porte bien l'extension .mp3 (car un autre type de fichier peut s'être glisser dans la liste)

Préparation du script

Créons dans le dossier « webradio » un dossier « deejay » qui nous servira d'espace de travail pour composer nos playlists :

cd /home/petitchat/Bureau/webradio ; mkdir deejay

Dans ce dossier créons en deux autres, l'un pour stocker nos playlists Windows (qu'on utilisera en entrée du script) et l'autre pour stocker nos playlists Linux (qui seront écrites en sortie)

cd deejay mkdir playlistWindows playlistLinux

Pour pouvoir convertir les fichiers du format Dos (Windows) au format unix (Linux) le script utilise le paquet « dos2unix » qu'il faut installer :

sudo apt install dos2unix

Puis nous créons le fichier du script à proprement parlé :

sudo nano convertissor

On y colle se code abondamment commenté :

 #!/bin/bash
 #Convertissor convertit une playlist Windows en une playlist Linux

 #Variables utilisateurs à remplir
 #playlist, paramètre obligatoire: entrer un nom au format m3u
 playlist='metaltest.m3u';
 #prefix2cut,optionnel, c est le préfixe qu'il faut couper, comme c:\
 prefix2cut='';
 #prefix2paste, optionnel, c est le préfixe à ajouter pour compléter
 #le chemin d acces dans le system de fichier Linux
 prefix2paste='/home/smbshare/musique/Metal/'; 

 #déclarations
 #déclare  ces  variables comme des entiers (integer)
 declare -i Lprefix;
 declare -i LF3;
 declare -i pos;
 declare -i nblignes;
 declare -i nbignored;

 #Lprefix est la longueur du préfixe à couper prefix2cut
 Lprefix=${#prefix2cut};
 #Lplaylist est le nom de la playlist linux à écrire
 Lplaylist=${playlist::-4}.linux.m3u;

 #convertissor fonction de conversion
 #la ligne est convertie en format linux et testée
 function convertissor {
 var=$1
 #incrémente le compteur de lignes de fichier traitées
 let "nblignes+=1";
 #  coupe le mauvais préfix
 F1=${var:$Lprefix};
 #  change les \ en /
 F2=${F1//\\/\/};
 #  ajoute le bon préfixe
 F3=$prefix2paste$F2;
 # place les 4 derniers caractères de la ligne dans la
 # variable $ext afin de tester s il s agit d'un mp3
 LF3=${#F3};
 pos=$(($LF3-4));
 ext=${F3:${pos}};
 # teste  de l'existence du fichier et son extension;
 if [ -f "$F3" ] && [ $ext='.mp3' ]; then
  echo "$F3";  
 else
   let "nbignored+=1";
   echo "$F3" a été ignoré >> ../errorFile.log ;
 fi
 }
 
 #initialisation du script
 clear;
 echo "Le script va s'exectuer avec les variables suivantes:";
 echo "playlist à convertir: "$playlist;
 echo "playlist à écrire: "$Lplaylist;
 echo "préfixe à couper: "$prefix2cut" (longueur:"$Lprefix")";
 echo "préfixe à ajouter: "$prefix2paste;
 read -p "Pressez une touche pour continuer, Ctrl+C pour sortir " key;
 clear;
 #efface l ancien fichier d erreur s il existe
 if [ -f errorFile.log ]; then rm errorFile.log ; fi
 
 cd playlistWindows;
 cp $playlist $playlist.tmp ;
 #convertion du format et du jeu de caractère
 dos2unix $playlist.tmp;
 iconv -f iso8859-15 -t utf8 $playlist.tmp > $playlist.tmp2 ;
 #création de la playlist Linux
 touch $Lplaylist;

 # traitement ligne par ligne
 while IFS= read -r line
 do
 # lit le premier charactère de $line et n opére pas sur les lignes diésées
   if [ ! ${line:0:1} == '#' ]; then convertissor "$line" >> $Lplaylist; fi
 done < $playlist.tmp2

 #efface le fichier temporaire;
 rm $playlist.tmp $playlist.tmp2 ;
 #déplace la playlist créée
 cd ..
 mv ./playlistWindows/$Lplaylist ./playlistLinux/ ;
 #sortie du programme
 echo $nblignes " lignes de fichier traitées dont " $nbignored " ignorées.";
 read -p "convertissor à fait le job, pressez une touche pour sortir" key;
 clear ;
 exit 0

Le script collé dans l'éditeur on sauvegarde en sortant avec contrôle + X puis on rend le script exécutable avec la commande :

sudo chmod +x convertissor

Fonctionnement du script

En premier lieu il faut disposer d'une playlist faites sous Windows avec l'extension « m3u » et la stocker dans le dossier « playlistWindows ». Il faut ensuite éditer le script et remplir les champs de paramétrages (attention de respecter les ' simples quotes ) :

  • playlist : nom de la playlist Windows à convertir
  • prefix2cut : partie gauche du chemin des fichiers figurant dans la playlist windows, partie qu'il faut couper. Par exemple « D:\ » ou « \\serveur\ »
  • prefix2paste : partie gauche du chemin des fichiers figurant dans la playlis Linux, partie qu'il faut coller pour rendre les fichiers accessible. Par exemple « /mnt/ »

Une fois le script configuré on sauvegarde, on quitte et on lance le script avec sudo :

sudo ./convertissor

D'abord le script affiche les variables avec lesquelles il va procéder à la conversion. Il faut presser une touche, la conversion à lieu. Le programme affiche ensuite le nombre de lignes traitées (sans compter les lignes # diésées) et le nombre de fichiers ignorés.

Si par exemple nous avons convertit une playlist Windows dansesdeschatons.m3u, le script produit la playlist dansesdeschatons.linux.m3u dans le dossier playlistLinux. Pour l'utiliser il faut copier la playlist dans le dossier « webradio/petitchat/ » et la nommer correctement « playlist.petitchat.txt »

cd playlistLinux

sudo cp dansesdeschatons.linux.m3u /home/petitchat/Bureau/webradio/petitchat/playlist.petitchat.txt

et redémarrer IceS.

Script d'extraction

Finalement j'ai décidé de faire une chaîne de musique Punk. Pour ce faire nous avons paramétré ices.punk.conf, il ne reste plus qu'à faire une playlist. Dans notre exemple nous avons tous nos fichiers de musique punk dans /mnt/musique/punk/ . Ce dossier contient des dizaines de sous dossiers correspondant à autant de groupes et chacun de ses sous dossiers contient des albums. Ce script d'extraction permet de générer une playlist qui regroupe tout les mp3 contenu dans un dossier et ses sous dossiers. Dans notre exemple il permet de produire une playlist punk.linux.m3u avec tous nos mp3 de punk.

Préparation du script

Ce script reprend la même arborescence que le script précédant. Le dossier d'où on le lance doit contenir le dossier « playlistLinux » créé précédemment pour stocker les playlists au format Linux. On se place dans le dossier « deejay », on créé le fichier « extractor »  avec l'éditeur :

sudo nano extractor

et on y copie ce code

 #!/bin/bash
 #chemin où se trouve le script (et le dossier playlistLinux)
 chemin="/home/petitchat/Bureau/deejay" ;
 #dossier dont il faut extraire les mp3
 directory="/mnt/musique/punk" ;
 #nom de la playlist à créer
 name='punk' ;

 #teste si directory existe
 if [ ! -d "$directory" ]; then 
   echo $directory " n existe pas, sortie du programme";
   exit 0 ;
 fi

 cd $directory ;
 find -name '*.mp3'> $chemin/$name.tmp ;

 while IFS= read -r line
 do
  #coupe le préfix
  line2=${line:1};
  #colle le bon préfix
  line3=$directory$line2;
  #teste l existence du fichier, l'enregistre s il existe et le log sinon
  if [ -f "$line3" ]; then
    echo "$line3" >> $chemin/playlistLinux/$name.linux.m3u ;
  else
    echo "$line3" a été ignoré >> $chemin/mp3ext-errorFiles.log ;
  fi
 done < $chemin/$name.tmp

 #sortie propre du script
 read -p "pressez une touche pour sortir" key ;
 rm $chemin/$name.tmp
 clear ;
 exit 0
 

Puis on rend le fichier exécutable :

sudo chmod +x extractor

Fonctionnement du script

Avant de lancer le script il faut vérifier et changer le cas échéant ces variables au début du code :

  •  « chemin » correspond au chemin où se trouve le script et le dossier playlistLinux
  •  « directory » correspond au chemin du dossier dont on veut extraire les mp3
  • «name » est le nom à donner à la playlist en sortie. La playlist aura un nom final de la forme <name>.linux.m3u

Une fois les changements fait, on lance le script ainsi :

sudo ./extractor

Si les paramètres sont valides un message apparaît en fin de traitement et la playlist est créée dans le dossier « playlistLinux ».

Conclusion

Il reste à faire une grille de programmation, des playlists, des scripts pour arrêter et lancer des instances de IceS en utilisant le crontab...les possibilités sont immenses. Un dernier conseil : surveillez vos fichiers journaux dans « /var/log/icecast/ », ils ont tendance à grossir assez vite. Quant à moi je vais essayer de résoudre ce bug d'afichage des tags IDV2. Merci d'avoir suivi ce tutoriel.


Remerciements à l'équipe de Forum-Debian.fr