Webradio
Dans cette partie, nous allons voir comment proposer une radio web sans prendre toutes les ressources du serveur.
L'idéal serait de pouvoir diffuser des émissions en direct. Lorsque personne ne parle sur la radio, de la musique sera automatiquement jouée à partir d'une liste de lecture.
Nous allons utiliser les outils icecast et mpd.
Configuration d'icecast et mpd
Commençons par les installer :
# pkg_add icecast mpd
On va copier l'exemple de configuration d'icecast avant de l'éditer :
# cp /usr/local/share/examples/icecast/icecast.xml.dist /var/icecast/icecast.xml
Configurez ce fichier à votre goût. Voici un exemple de ce que j'ai modifié :
<location>Sur Mars</location> <authentication> <source-password>motdepasse</source-password> <relay-password>motdepasse</relay-password> <admin-user>admin</admin-user> <admin-password>adminpw</admin-password> </authentication> <hostname>chezmoi.tld</hostname> <!-- You may have multiple <listener> elements --> <listen-socket> <port>8000</port> <bind-address>0.0.0.0</bind-address> </listen-socket> <mount> <mount-name>/play.ogg</mount-name> <no-mount>1</no-mount> </mount> <mount> <mount-name>/live.ogg</mount-name> <fallback-mount>/play.ogg</fallback-mount> <fallback-override>1</fallback-override> </mount>
On voit bien dans cette configuration que lorsqu'un "live" est en cours, il est diffusé, sinon ça bascule automatiquement sur la playlist.
On active icecast puis on le lance :
# rcctl enable icecast # rcctl start icecast
Ensuite, nous allons configurer le lecteur de musique, qui sera ici mpd. Éditez le fichier "/etc/mpd.conf" de cette façon :
# Dossier contenant toute la musique music_directory "/mnt/Musique" # Pour icecast. Pensez à modifier le mot de passe audio_output { type "shout" encoding "ogg" name "Ma super radio" host "localhost" port "8000" mount "/play.ogg" password "motdepasse" bitrate "128" format "44100:16:2" }
Je n'ai listé ci-dessus seulement ce que j'ai eu besoin de modifier. Changez bien le mot de passe pour envoyer la musique à icecast.
Enfin, activez mpd et lancez-le :
# rcctl enable mpd # rcctl start mpd
Vous pouvez lancer la lecture en utilisant un client mpd, comme mpc. Il s'installe tout simplement :
# pkg_add mpc
Voici quelques commandes bien pratiques :
- Lecture : mpc play
- Remplir la liste d lecture avec toutes les musiques : mpc ls | mpc add
- Lecture aléatoire : mpc random on
- Lecture en boucle : mpc repeat on
- Fondu entre les pistes : mpc crossfade 3
Avant d'essayer d'écouter votre musique, ouvrez et redirigez le port 8000 dans votre pare-feu et routeur.
Pour tester votre radio, ouvrez l'adresse suivante avec un lecteur de musique (vlc par exemple) : http://chezmoi.tld:8000/live.ogg.
Diffuser une émission
Afin de diffuser une émission, il faudra utiliser n'importe quel logiciel capable de communiquer avec icecast. La seule différence sera que l'on diffusera sur "/live.ogg" directement et non plus sur "/play.ogg".
Prenons pour exemple vlc qui va jouer ce que vous voulez pour l'envoyer sur le serveur.
Une fois vlc ouvert, cliquez sur "Media" > "Flux". Ajoutez un fichier puis cliquez sur diffuser.
Cliquez sur "Next", puis choisissez dans "Nouvelle destination" "IceCast". Cliquez sur "Ajouter".
Remplissez ensuite les différents champs :
- Adresse : chezmoi.tld
- Port utilisé : 8000 par défaut
- Point de montage : /live.ogg
- Utilisateur:mot de passe : source:votremotdepasse
L'utilisateur ici est source, à moins d'avoir modifié le fichier de configuration sur ce point.
Vous pouvez activer le transcodage si vous le souhaitez. Audio Vorbis (OGG) fonctionne bien en général. Il vous reste à valider la suite.
Afficher sur un site ce qui est joué
Vous voudrez peut-être afficher sur votre site web ce que la radio est en train de jouer. Mettez alors ceci dans "/var/icecast/web/all.xsl"
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml"/> <xsl:template match="*"> <xsl:copy-of select="."/> </xsl:template> </xsl:stylesheet>
Ensuite, dans un fichier "/var/icecast/web/onair.xsl", mettez :
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text"/> <xsl:template match="/icestats"> <!-- only show the first source --> <xsl:apply-templates select="source[1]"/> </xsl:template> <xsl:template match="source"> <xsl:choose> <xsl:when test="title or artist"> <xsl:if test="artist"><xsl:value-of select="artist" /> - </xsl:if> <xsl:value-of select="title" /> </xsl:when> <xsl:otherwise>Unknown</xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet>
Les personnes allant sur http://chezmoi.tld:8000/onair.xsl pourront voir ce qui est joué. Dans votre code html, il suffirait alors de rajouter ceci pour l'afficher sur une page:
<h3>Now playing</h3> <iframe id="icecast" src="http://chezmoi.tld:8000/onair.xsl"> </iframe> <audio src="http://chezmoi.tld:8000/live.ogg" controls="controls"></audio>