Abysse Tech

HiTech 4 All

web-radio

Comment créer une Web Radio sous CentOS avec IceGenerator et IceCast

by

Au cours d’un projet semi perso, je dois installer une web radio afin de l’utiliser comme vecteur de trafic. A travers ce tutoriel nous allons voir comment procéder. J’ai une relation toute particulière avec les web radios / web TV vu qu’en parler lors d’un entretien d’admission pour un école de commerce m’a valu de finir 2 ème et d’être admis, alors que j’ai déblatéré tout un tas d’âneries prouvant une naïveté à toute épreuve et une ignorance évidente. Et pourtant, le jury n’y a vu que du feu avec « un Empire Médiatique sur internet avec web radio / web TV » LOL!

ET aujourd’hui, j’y reviens mais sans la prétention d’un empire cette fois ci. Alors, à l’époque je faisais une web radio avec nicecast sous mac et itunes ou Shoutcast et Winamp, hors je souhaite à présent bénéficier d’un plus gros réseau pour streamer à un public plutôt qu’à mes potes de promo.

Bien encore une fois vous pouvez opter pour des solutions clefs en main, mais comme d’habitude ce n’est pas fun et on peut y trouver des limitations.

Ici, j’utilise le même VPS que pour le serveur Counter Strike, toujours chez HostStage. Le serveur a été basculé sur CentOS pour l’occasion.

Alors, avant de commencer, sachez qu’en dehors de l’aspect privé requiert de verser les droits et à mon plus grand étonnement ils ne sont pas si chers (60€ par mois minimum ou 6% de vos revenus si vous avez un CA de moins de 15000€ par an). Si votre radio prend une certaine ampleur, il ne faut vraiment pas hésiter à opter pour cette solution.

Allez c’est parti! Voici comment installer une petite web radio sur votre Serveur Privé ou en Local chez vous sous CentOS 5 32 bits pour le serveur utilisé pour ce tutoriel.

La grande difficulté rencontré ici, c’était de compiler ces « diables » de codecs MP3, d’où le choix de IceGenerator au détriment de MPD. Si vous suivez le tutoriel de A à Z, votre radio sera fonctionnelle, si vous sortez légèrement du cadre (en terme du choix de la distribution), vous allez devoir improviser.

1) On va créer notre répertoire de musique dans un endroit que l’on choisit.

mkdir /home/webradio
mkdir /home/webradio/music

2) On installe plusieurs prérequis tels que les compileurs et quelques librairies qui joueront leur importance :

yum groupinstall “Development Tools”
yum install -y curl-devel libtheora-devel libvorbis-devel libxslt-devel speex-devel libxslt

!! Attention au copier / coller des lignes de commandes vérifier bien la syntaxe des «  » ou des — qui se transforme parfois en . »

3) On crée le dossier d’installation de Icecast que l’on va compiler :

mkdir -p /usr/src/icecast
cd /usr/src/icecast

On télécharge Icecast :

wget wget http://downloads.xiph.org/releases/icecast/icecast-2.3.3.tar.gz

On le décompresse :

 tar xf icecast-2.3.3.tar.gz

On se place dans le repertoire :

cd icecast-2.3.3

On configure la compilation et on compile :

./configure –prefix=/opt/icecast/2.3.3
make
make install

On vérifie si cela c’est bien passé en rentrant la commande suivante :

ls /opt/icecast/2.3.3/bin/

Qui doit vous retourner un beau petit dossier :

icecast

On va modifier le fichier icecast qui n’est pas trop compliqué :

vi /opt/icecast/2.3.3/etc/icecast.xml

Je vous colle la partie à éditer (sachez que vous pouvez bien entendu utilisé un gestionnaire de fichier SSH tels que WinSCP, FileZilla, ou CyberDuck pour télécharger le fichier et le modifier sur votre ordinateur)

<icecast>
    <!-- location and admin are two arbitrary strings that are e.g. visible
         on the server info page of the icecast web interface
         (server_version.xsl). -->
    <location>Earth</location>
    <admin>icemaster@localhost</admin>

    <limits>
        <clients>1000</clients>
        <sources>2</sources>
        <threadpool>5</threadpool>
        <queue-size>524288</queue-size>
        <client-timeout>30</client-timeout>
        <header-timeout>15</header-timeout>
        <source-timeout>10</source-timeout>
        <!-- If enabled, this will provide a burst of data when a client
             first connects, thereby significantly reducing the startup
             time for listeners that do substantial buffering. However,
             it also significantly increases latency between the source
             client and listening client.  For low-latency setups, you
             might want to disable this. -->
        <burst-on-connect>1</burst-on-connect>
        <!-- same as burst-on-connect, but this allows for being more
             specific on how much to burst. Most people won't need to
             change from the default 64k. Applies to all mountpoints  -->
        <burst-size>65535</burst-size>
    </limits>

    <authentication>
        <!-- Sources log in with username 'source' -->
        <source-password>motdepasse1</source-password>
        <!-- Relays log in username 'relay' -->
        <relay-password>modedepasse2</relay-password>

        <!-- Admin logs in with the username given below -->
        <admin-user>Username</admin-user>
        <admin-password>motdepasse3</admin-password>
    </authentication>

    <!-- set the mountpoint for a shoutcast source to use, the default if not
         specified is /stream but you can change it here if an alternative is
         wanted or an extension is required -->
    <shoutcast-mount>/hiphop</shoutcast-mount>

En résumé, 3 mot de passes, un username, le nombre de client autorisés en simultané et le mountpoint

4) On va sécuriser un peu notre installation en évitant de faire tourner icecast en root ce qui n’est pas tip top :

On ajoute un groupe d’utilisateur nommé icecast :

groupadd -g 200 icecast

On crée un utilisateur icecast

useradd -d /var/log/icecast -m -g icecast -s /bin/bash -u 200 icecast

On a crée notre dossier de log :

mkdir -p /var/log/icecast

Et on mets des droits récursif sur le dossier icecast :

chown -R icecast:icecast /var/run/icecast

5) On va enfin lancer notre serveur IceCast afin de vérifier que tout c’est bien passé.

/opt/icecast/2.3.3/bin/icecast -c /opt/icecast/2.3.3/etc/icecast.xml -b

On peut maintenant y accéder via :

http://monip:8000

On peut se connecter à la partie administration également en saisissant le couple username / password rentré dans le icecast.xml

Icecast va s’occuper du partage du flux audio source qu’on va lui fournir. Il constitue la partie serveur de notre Web Radio.

6) A présent, on peut s’atteler à la partie du flux audio et enfin nourrir notre serveur de streaming audio. Pour ce faire, on va utiliser donc IceGenerator qui est parfait pour gérer les MP3.

La partie délicate est la suivante il s’agit de s’atteler aux codecs MP3 libshout :

On se place dans le répertoire icecast :

cd /usr/src/icecast

On télécharge libshout version 2.3.1 pour le compiler :

wget http://downloads.us.xiph.org/releases/libshout/libshout-2.3.1.tar.gz

On le décompresse :

tar xf libshout-2.3.1.tar.gz

On se place dans le repertoire libshout

cd libshout*

On le configure :

./configure –prefix=/opt/icecast/2.3.3

!!Attention à l’attribut prefix, vérifier bien votre commande pour éviter le .prefix!!

make
make install

7) On va maintenant installer IceGenerator (enfin!!)

cd /usr/src/icecast

On le télécharge :

wget http://netcologne.dl.sourceforge.net/project/icegenerator/icegenerator/0.5.5-pre2/icegenerator-0.5.5-pre2.tar.gz

On le décompresse :

tar xfz icegenerator-0.5.5-pre2.tar.gz

On le configure :

./configure

La si vous obtenez l’erreur suivante :

checking for shout >= 2.0... Package shout was not found in the pkg-config search path. Perhaps you should add the directory containing `shout.pc' to the PKG_CONFIG_PATH environment variable No package 'shout' found
    configure: error: Library requirements (shout >= 2.0) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.

Vous pouvez bénir le ciel pendant que je l’ai maudis pendant 1 heure avec Google qui remontent des résultats pourrissimaux en ce moment et les gens sont à côté de la plaque.. Voici la solution :

export PKG_CONFIG_PATH=/opt/icecast/2.3.3/lib/pkgconfig:$PKG_CONFIG_PATH

Et la on retente notre configuration de IceGenerator et on compile :

./configure
make
make install

Alors la on est vraiment bien! Tout est prêt! Ah, il manque encore les musiques ;).

8) On va créer le fichier de configuration de icegenerator :

vi /usr/local/etc/webradioconf1.cfg

On y place le code à modifier suivant :

IP=127.0.0.1
PORT=8000
SERVER=2
MOUNT=/hiphop
PASSWORD=motdepasse
FORMAT=1
MP3PATH=m3u:/home/webradio/hiphop1.m3u
LOOP=1
SHUFFLE=1
NAME=AbysseTech Radio Pure HipHop
DESCRIPTION=100% HipHop! Hits and Classics, No Ads 100% music 24/7
GENRE=HipHop
URL=http://5.135.81.179:8000/
LOG=2
LOGPATH=/var/log/icecast/icegen1.log
BITRATE=48000
SOURCE=source

LEs valeurs modifiables sont les suivantes :

MOUNT = qui doit corréler avec celui du icecast.xml PASSWORD= qui doit être le mot de passe source du fichier icecast.xml MP3PATH = qui va être le chemin de votre playlist URL = Votre IP externe de votre radio TITRE et DESCRIPTION = Ce que vous voulez ;).

9) Occupons nous à présent de notre playist.

Pour commencer, vous pouvez déjà uploader sur votre serveur les musiques que vous souhaitez diffuser avec WinSCP, FileZilla ou CyberDuck par exemple.

Une fois que vous avez fini l’upload vous pouvez créer votre playlist automatiquement de la façon suivante :

On crée le fichier :

touch /home/webradio/hiphop1.m3u

Et on peuple ce fichier automatiquement de tous les mp3 présents dans le dossier qu’on veut (c’iti pas génial ça)

find /home/webradio/music -name “*.mp3″ > /home/webradio/hiphop1.m3u

On peut facilement automatiser le refresh quotidien de la playlist.

10) Pour finir on propage notre configuration :

su - icecast -c "export LD_LIBRARY_PATH=/opt/icecast/2.3.3/lib:$LD_LIBRARY_PATH; /usr/local/bin/icegenerator -f /usr/local/etc/abyssetechradio.cfg"

Si vous avez un simple retour à la ligne, votre radio est en route! Bravo!

On peut vérifier que cela fonctionne correctement en tapant ceci :

pgrep -fl icegen

Qui doit vous retourner quelque chose comme ça :

26783 /usr/local/bin/icegenerator -f /usr/local/etc/abyssetechradio.cfg

Et voila!

Pour aller plus loin : becrux.com

Étiquettes : , , ,

One Comment

  • FuraXx
    8 juillet 2016 @ 22 h 55 min

    Bonjour, j’obtins cette erreur ==> chown: impossible d’accéder à « /var/run/icecast »: Aucun fichier ou dossier de ce type

Leave A Comment