Ca faisait longtemps! Un how-to pour Ubuntu!
Avec l’association Place Libre nous avons l’intention de diffuser une radio sur le web. J’ai donc longuement investigué pour vous mitoner cet article (mais non c’est pas vrai)! Voici comment émettre une webradio depuis un serveur sous Ubuntu grâce à Icecast et MediaBox404.
Commençons par voir rapidement le fonctionnement d’une webradio.
Le principe est relativement simple, on crée une playlist qui contient la suite de morceaux à diffuser: c’est la programmation de la radio. Pour ce faire nous utiliserons MediaBox404, une interface web pour gérer simplement la programmation de votre radio. Ce programme est développé par l’équipe de la radio associative Erreur404.
Les morceaux indiqués dans la playlist sont diffusés en continue par un serveur de streaming. Nous utiliserons Icecast pour remplir ce rôle. Ces deux logiciels sont libres (GPL).
Les gens voulant écouter la radio se connectent au serveur de stream via leur lecteur audio favoris (exemple: Amarok, Rhythmbox, Winamp, RealPlayer, …) via une playlist fournie par Icecast (au format m3u).
Allez c’est parti! On commence par installer icecast2:
sudo apt-get install icecast2
Première opération, activer le lancement au démarrage du serveur icecast, pour cela éditez le fichier /etc/default/icecast2 (par exemple sudo gedit /etc/default/icecast2
) et changez cette ligne:
# Edit /etc/icecast2/icecast.xml and change at least the passwords.
# Change this to true when done to enable the init.d script
ENABLE=false
par
# Edit /etc/icecast2/icecast.xml and change at least the passwords.
# Change this to true when done to enable the init.d script
ENABLE=true
Passons maintenant à la configuration, remplacez /etc/icecast2/icecast.xml par ce qui suit (sauvegardez d’abord l’acutel quelque part, il vous permettra de configurer le stream beaucoup plus en profondeur si le coeur vous en dit).
<icecast>
<limits>
<clients>100</clients>
<sources>2</sources>
<threadpool>5</threadpool>
<queue-size>102400</queue-size>
<client-timeout>30</client-timeout>
<header-timeout>15</header-timeout>
<source-timeout>10</source-timeout>
<burst-on-connect>1</burst-on-connect>
<burst-size>65535</burst-size>
</limits>
<authentication>
<!-- Sources log in with username 'source' -->
<source-password>MOT-DE-PASSE A REMPLACER</source-password>
<!-- Relays log in username 'relay' -->
<relay-password>MOT-DE-PASSE A REMPLACER</relay-password>
<!-- Admin logs in with the username given below -->
<admin-user>admin</admin-user>
<admin-password>MOT-DE-PASSE A REMPLACER</admin-password>
</authentication>
<hostname>localhost</hostname>
<listen-socket>
<port>8000</port>
</listen-socket>
<fileserve>1</fileserve>
<paths>
<basedir>/usr/share/icecast2</basedir>
<logdir>/var/log/icecast2</logdir>
<webroot>/usr/share/icecast2/web</webroot>
<adminroot>/usr/share/icecast2/admin</adminroot>
<alias source="/" dest="/status.xsl"/>
</paths>
<logging>
<accesslog>access.log</accesslog>
<errorlog>error.log</errorlog>
<loglevel>4</loglevel>
</logging>
<security>
<chroot>0</chroot>
</security>
</icecast>
Bien entendu changez MOT-DE-PASSE A REMPLACER par vos mots-de-passes top secret à vous. Il vous faudra aussi remplacer le contenu de la balise hostname par votre adresse IP ou votre nom-de-domaine (si vous n’avez pas d’IP fixe regardez du coté de DynDNS) pour que l’on puisse écouter votre radio d’autre par que depuis votre ordinateur.
Dans ce même fichier vous pouvez de nombreux autres paramètres (port, nombres d’auditeurs maximum, …).
La configuration d’icecast terminée, lancons le:
sudo /etc/init.d/icecast2 start
Si tout va bien vous pouvez accéder à la “Icecast Status Page” en tapant http://localhost:8000/ dans votre navigateur.
Nous avons de quoi émettre à échelle globale, installons de quoi gérer notre station: MediaBox404.
MediaBox404 est une application web, nous devons donc installer un serveur WWW (Apache 2) avec PHP, MySQL et quelques modules. Quelques librairies sont égalements nécéssaires. Hop!
sudo apt-get install mysql-server mysql-client apache2 php4 php4-pear php4-mysql php4-gd phpmyadmin lame liblame0 vorbis-tools libvorbis-dev libshout3-dev libid3-dev libflac-dev libcurl3-dev libmysqlclient14-dev liblame-dev build-essential checkinstall
Avant toute chose rendez-vous sur http://localhost/phpmyadmin/ et connectez-vous (par défaut: root comme nom d’utilisateur et pas de mot de passe). Si ce n’est pas déjà fait rendez-vous dans la section Privilèges et donnez un mot-de-passe à l’utilisateur root (raison de sécurité).
Créez ensuite une base de donnée nommée mediabox404 (depuis la page d’accueil) et un utilisateur du même nom auquel vous assignerez un mot-de-passe (retenez le nous en aurons besoin plus tard!), aucun droit global mais tous les droits sur la base mediabox404 que l’on vient de créer (depuis la section Privilèges de PhpMyAdmin).
Récupérons maintenant la dernière version de MediaBox404 sur son site officiel.
On décompresse l’archive récupérée dans le dossier /var/www/ (répertoire racine du serveur web):
sudo tar xzvf mediabox404_*.tar.gz -C /var/www/
Un dossier du type mediabox404.version (ex: mediabox404.1.2) est créé dans /var/www/, pour plus de commodités renommez le en mediabox404 tout court.
Pour que MediaBox404 fonctionne il faut modifier la configuration de PHP. Ouvrez le fichier /etc/php4/apache2/php.ini changez memory_limit = 8M ; Maximum amount of memory a script may consume (8MB)
par memory_limit = 32M ; Maximum amount of memory a script may consume (8MB)
puis register_globals = Off
par register_globals = On
et enfin magic_quotes_gpc = On
par magic_quotes_gpc = Off
Redémarrez apache pour que les changements soient pris en comptes:
sudo /etc/init.d/apache2 restart
Il faut aussi donner les droits en écriture sur quelques répertoires:
sudo chmod 777 /var/www/mediabox404/admin/preview/ /var/www/mediabox404/admin/ /var/www/mediabox404/live_audio/pls/
Rendez-vous maintenant avec votre navigateur sur la page http://localhost/mediabox404/installation/ pour débuter l’installation.
Normalement l’étape 1 ou les vérifications sont effectuées se passe bien, cliquez sur “Next”, si vous l’acceptez cochez la case “I Accept the GPL License” et cliquez sur “Next”.
Il va maintenant falloir entrer la configuration de base de votre radio. Entrez ”mediabox404″ comme utilisateur MySQL (MySQL User Name) et le mot-de-passe que vous lui avez associé dans PhpMyAdmin tout à l’heure (MySQL Password).
Remplissez ensuite “Préférences Mediabox404”. Si votre ordinateur dispose d’un nom de domaine indiquez le dans “URL de votre site Mediabox404” (ex: http://mon-site.com/mediabox404) ce qui vous permettra d’accèder a l’administration de votre radio à distance ou encore de la gérer avec un ami. Vous pouvez indiquer /tmp comme chemin vers la poubelle.
Complétez le reste des renseignements (adresse courriel, nom et mot-de-passe de l’administrateur, description de la radio). Ne vous souciez pas des champs concernant MRTG. Attention il n’y a pas de page qui indique la fin de l’installation (c’est assez déroutant), s’il n’y a pas eu d’erreur (elles sont indiquées en rouge) c’est bon.
Une fois terminé, supprimez le dossier /var/www/mediabox404/installation.
Rendez-vous maintenant dans l’admin de MediaBox404. On va devoir lui indiquer où il doit aller chercher les morceaux à diffuser. Cliquez sur Outils -> Dossiers pour l’import -> New et indiquez le ou les répertoire(s) contenant les MP3 et OGG à diffuser. Après ça, cliquez sur “Gérer les utilisateurs” et cliquez sur le chemin de votre répertoire dans dossiers disponibles pour le faire basculer dans appartenant à. Allez ensuite dans Import/Retag audio et cliquez sur Import audio pour importer tout les morceaux du dossier.
Rendez-vous ensuite dans Edition de playlist et créez une playlist principale obligatoire. Vous pourrez ensuite créer des jingles, pubs etc qui passeront à intervals réguliers.
Voilà pour la configuration de mediabox404. Il ne nous reste plus qu’à faire le lien entre icecast et mediabox404, pour ce faire nous devons compiler et configurer deux modules: celui de stream et celui de programmation que vous trouverez eux aussi sur le site officiel. Nous utiliserons GCC 3 au lieu de GCC 4 (compilateur par défaut sous Ubuntu) car les programmes ne sont pas encore compatibles avec ce dernier.
Commençons par compiler et installer le module de programmation:
tar xzvf mediabox404_prg_*.tar.gz
cd mediabox404_prg*
CC=/usr/bin/gcc-3.4 ./configure
make
sudo make install
Créons son fichier de configuration /etc/mediabox404_prg.xml contenant ceci:
<?xml version="1.0"?>
<mediabox404_audio_prg:Configuration xmlns:mediabox404_audio_prg="http://www.radio404.org">
<Log>
<!-- Set this to 1 if you want to see more verbose output from mediabox404_radio_prg -->
<Verbose>1</Verbose>
<!-- Set this to 1 if you want logfile mediabox404_radio_prg.log -->
<LogFile>0</LogFile>
<!-- This directory specifies where mediabox404_radio_prg should put the logfile : mediabox404_radio_prg.log. -->
<BaseDirectory>.</BaseDirectory>
</Log>
<Timing>
<!-- Define program timing in minute {1,2,3,4,5,6,8,9,10,12,15,16,18,20,24,30,32,36,40,45,48,60} -->
<program>15</program>
<!-- Define jingle timing in minute (mod program min) -->
<jingle>30</jingle>
<!-- Define promo timing in minute (mod program min) -->
<promo>120</promo>
<!-- Define programmation control : control periode in hour -->
<period_control>0</period_control>
<!-- Define programmation control : nb scrap data -->
<max_control>0</max_control>
</Timing>
<Sql>
<Hostname>localhost</Hostname>
<Port>3306</Port>
<!--<Unixsocket>/var/lib/mysqld/mysqld.sock</Unixsocket> -->
<User>mediabox404</User>
<Password></Password>
<Database>mediabox404</Database>
<Mysql_options>Mediabox404_audio_prg</Mysql_options>
<Data>t_data</Data>
<Datapath>t_datapath</Datapath>
<Playlist>t_playlist</Playlist>
<Playlistdata>t_playlistdata</Playlistdata>
<Live>t_live</Live>
<Programme>t_programme</Programme>
<Streamstack>t_streamstack</Streamstack>
<Progstack>t_progstack</Progstack>
<Pilotstack>t_pilotstack</Pilotstack>
<Streamlog>t_streamlog</Streamlog>
<Log>t_log</Log>
<Tempstack>t_tempstack</Tempstack>
<Lastmainplaylist>t_lastmainplaylist</Lastmainplaylist>
<Lastplaylist>t_lastplaylist</Lastplaylist>
<Lastpromo>t_lastpromo</Lastpromo>
<Lastjingle>t_lastjingle</Lastjingle>
<Currentplaylisttype>t_currentplaylisttype</Currentplaylisttype>
<Metadata>t_metadata</Metadata>
</Sql>
</mediabox404_audio_prg:Configuration>
L’unique chose à faire c’est d’entrer le mot-de-passe de l’utilisateur MySQL mediabox404 créé tout à l’heure entre les balises <Password>
et </Password>
de la section SQL.
On lance le module: mediabox404_prg /etc/mediabox404_prg.xml > /dev/null &
Passons au module de stream:
tar xzvf stream404-ices-*.tar.gz
cd cd stream404-ices-*
CC=/usr/bin/gcc-3.4 ./configure
make
sudo make install
Nous devons créer un fichier configuration pour lui aussi. Nous le nommerons /etc/stream404.xml et voici son contenu:
<?xml version="1.0"?>
<!-- $Id: stream404.conf.dist,v 1.1 2004/05/09 13:43:39 bedlam Exp bedlam $ -->
<stream404:Configuration xmlns:stream404="http://www.icecast.org/projects/ices">
<Playlist>
<File>/etc/playlist.txt</File>
<Randomize>1</Randomize>
<Type>sql</Type>
<Module>stream404</Module>
<Crossfade>5</Crossfade>
</Playlist>
<BackupPlaylist>
<File>/etc/playlist.txt</File>
<Randomize>1</Randomize>
<Type>builtin</Type>
<Module>stream404</Module>
</BackupPlaylist>
<Execution>
<Background>0</Background>
<Verbose>1</Verbose>
<BaseDirectory>/tmp</BaseDirectory>
</Execution>
<Sql>
<Port>3306</Port>
<Unixsocket>/var/run/mysqld/mysqld.sock</Unixsocket>
<Sqltype>MYSQL</Sqltype>
<User>mediabox404</User>
<Password>LE MOT DE PASSE QUE VOUS AVEZ DÉFINI DANS PHPMYADMIN</Password>
<Database>mediabox404</Database>
<Table>t_streamstack</Table>
<UrgTable>t_pilotstack</UrgTable>
<CurrentStreamTable>t_currentstream</CurrentStreamTable>
<StreamLogTable>t_streamlog</StreamLogTable>
<MetadataTable>t_metadata</MetadataTable>
</Sql>
<Stream>
<Server>
<Hostname>127.0.0.1</Hostname>
<Port>8000</Port>
<!-- Encoder password on the icecast server -->
<Password>LE MOT DE PASSE QUE VOUS AVEZ DÉFINI DANS LE FICHIER DE CONFIGURATION D'ICECAST</Password>
<Protocol>http</Protocol>
<Format>ogg</Format>
</Server>
<Mountpoint>/stream</Mountpoint>
<!-- The name of you stream, not the name of the song! -->
<Name>NOM DE LA RADIO</Name>
<!-- Genre of your stream, be it rock or pop or whatever -->
<Genre>mixed</Genre>
<!-- Longer description of your stream -->
<Description>DESCRIPTION DE LA RADIO</Description>
<!-- URL to a page describing your stream -->
<URL>HTTP://LE-SITE-DE-MA-RADIO.COM</URL>
<Public>1</Public>
<Quality>1</Quality>
<Bitrate>128</Bitrate>
<Reencode>1</Reencode>
<Samplerate>44100</Samplerate>
<Channels>2</Channels>
</Stream>
</stream404:Configuration>
Vous ne devez modifier que les paramètres écrits en majuscules. Pour approfondir la configuration consultez le fichier stream404.xml disponible dans le répertoire conf des sources de stream404.
Créez ensuite un fichier /etc/playlist.txt contenant les chemins vers quelques MP3 qui seront diffusés en cas de plantage d’un des composants. Et youpla, on lance le module de stream stream404 -c /etc/stream404.xml > /dev/null &
Vous pouvez dès maintenant écouter votre radio, la playlist est accessible à l’adresse http://localhost:8000/stream.m3u Consultez http://localhost:8000/ pour voir l’état du serveur Icecast et http://localhost/mediabox404 pour gérer la programmation.
Dernière opération: les scripts de démarrages. On va s’arranger pour que notre radio démarre en même temps que l’ordinateur. Note: ces scripts sont basés sur ceux du Wiki de MediaBox404 et sont distribués sous licence GPL.
Le premier script lancera en boucle stream404 (il semblerait qu’il ai tendance à planter). Il se nomme /usr/local/bin/run-stream404 :
#!/bin/sh
ulimit -c unlimited
while true; do
/usr/local/bin/stream404 -c /etc/stream404.xml > /dev/null;
sleep 3
done
Exemple de commandes pour créer le script avec gedit:
sudo gedit /usr/local/bin/run-stream404
Puis le script d’init du module de stream /etc/init.d/stream404 :
#!/bin/sh
case "$1" in
start)
/usr/local/bin/run-stream404 &
;;
stop)
killall run-stream404
killall stream404
;;
*)
echo "Usage: basename $0 {start|stop}" >&2
;;
esac
exit 0
Enfin le script d’init du module de programmation /etc/init.d/mediabox_prg :
#!/bin/sh
case "$1" in
start)
cd /var/log/
/usr/local/bin/mediabox404_prg /etc/mediabox404_prg.xml >/dev/null 2>&1 &
;;
stop)
killall mediabox404_prg
;;
*)
echo "Usage: basename $0 {start|stop}" >&2
;;
esac
exit 0
Il faut maintenant rendre ces scripts éxecutables, indiquer qu’ils doivent être démarrés au boot et et créer le répertoire pour les logs:
sudo chmod +x /usr/local/bin/run-stream404 /etc/init.d/stream404 /etc/init.d/mediabox_prg
sudo update-rc.d mediabox_prg defaults 99
sudo update-rc.d stream404 defaults 99
sudo mkdir /var/log/mediabox404
Et voilà votre radio fin prête!! Dernière petite note, si vous ne disposez que d’une petite connexion n’hésitez pas à passer par PeerCast pour diffuser votre radio par Peer to Peer.
Bonne diffusion 😉
Cet article est largement inspiré de installer MediaBox404 sur Debian Sarge du Wiki MediaBox404.
Merci à Albert.