Skip to content

Kévin Dunglas

Founder of Les-Tilleuls.coop (worker-owned cooperative). Creator of API Platform, FrankenPHP, Mercure.rocks, Vulcain.rocks and of some Symfony components.

Menu
  • Talks
  • Resume
  • Sponsor me
  • Contact
Menu

Créer une webradio avec Icecast et MediaBox404 sous Ubuntu

Posted on December 14, 2005 by Kévin Dunglas

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.

MediaBox404

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).

Icecast

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.

PeerCast

Bonne diffusion 😉

Cet article est largement inspiré de installer MediaBox404 sur Debian Sarge du Wiki MediaBox404.

Merci à Albert.

Related posts:

  1. Avoir de jolies fenêtres ombragées sous Ubuntu
  2. Installer Flock sous Ubuntu
  3. Lire les partitions Guitar Pro sous Ubuntu avec DGuitar
  4. Les Bérus sur Radio Libertaire en ce moment

Leave a ReplyCancel reply

Social

  • Bluesky
  • GitHub
  • LinkedIn
  • Mastodon
  • X
  • YouTube

Links

  • API Platform
  • FrankenPHP
  • Les-Tilleuls.coop
  • Mercure.rocks
  • Vulcain.rocks

Subscribe to this blog

Top Posts & Pages

  • FrankenPHP: The Modern Php App Server, written in Go
  • FrankenPHP Is Now Officially Supported by The PHP Foundation
  • Develop Faster With FrankenPHP
  • JSON Columns and Doctrine DBAL 3 Upgrade
  • FrankenPHP 1.3: Massive Performance Improvements, Watcher Mode, Dedicated Prometheus Metrics, and More
  • Securely Access Private Git Repositories and Composer Packages in Docker Builds
  • Preventing CORS Preflight Requests Using Content Negotiation
  • The PHP Revolution Is Underway: FrankenPHP 1.0 Beta
  • Installing a LaTeX environment on a Mac
  • Containerization Tips and Tricks for PHP apps

Tags

Apache API API Platform Buzz Caddy Docker Doctrine FrankenPHP Go Google GraphQL HTTP/2 Hydra hypermedia Hébergement Javascript JSON-LD Kubernetes La Coopérative des Tilleuls Les-Tilleuls.coop Lille Linux Mac Mercure Messagerie Instantanée MySQL performance PHP Punk Rock Python React REST Rock'n'Roll Schema.org Security SEO SEO Symfony Symfony Live Sécurité Ubuntu Web 2.0 webperf XHTML XML

Archives

Categories

  • DevOps (85)
    • Ubuntu (68)
  • Go (18)
  • JavaScript (46)
  • Mercure (7)
  • Opinions (91)
  • PHP (171)
    • API Platform (77)
    • FrankenPHP (10)
    • Laravel (1)
    • Symfony (97)
    • Wordpress (6)
  • Python (14)
  • Security (15)
  • SEO (25)
  • Talks (46)
© 2025 Kévin Dunglas | Powered by Minimalist Blog WordPress Theme