Streaming ogg avec mpd/icecast

/!\ Ce tutorial est en cours de finalisation. Todo:


Introduction

Ce document traite de la mise en place d'un serveur de streaming audio en ogg vorbis sur une distribution Gentoo. Cela doit être aussi valable pour tout autre distribution mais je ne le traiterai pas ici... A vous de faire l'effort de transcrire.

Comme il s'agit pour ma part d'une utilisation purement personnel, il est possible que quelques parties vous soient inutiles. Ainsi, j'utilise ReverseProxy d'Apache afin de pouvoir accéder au flux via le port 80. De plus, j'ai aussi configuré IceCast pour demander une authentification par mot de passe afin d'être le seul à pouvoir accéder au flux. Enfin, je souhaite pouvoir contrôler la lecture en cours par interface http. Pour cela, j'utiliserai PhpMP.

Installation

Afin de travailler sur des versions plus récentes, nous allons ajouter mpd et IceCast en ~arch dans package.keywords

echo "net-misc/icecast ~amd64" >> /etc/portage/package.keywords
echo "net-misc/mpd ~amd64" >> /etc/portage/package.keywords

Ceci est surtout nécessaire pour mpd qui dans sa version 12, laquelle n'est pas encore considéré stable, permet la diffusion de plusieurs flux mais surtout l'encodage à la volée en ogg vorbis avec diffusion vers un serveur IceCast.

Il nous faut ensuite vérifier les USE-flags pour ces deux paquets ainsi que pour PhpMP. Je vous laisse voir ça directement avec vos besoin sur votre système. N'oubliez pas "icecast" ainsi que "vorbis" pour mpd. Il est aussi probable que vous deviez recompiler php.

Vous pouvez dès lors lancer la commande magique:

emerge -avt mpd icecast phpmp

Vérifiez que tout est bon et lancez l'installation.

Configuration

Configuration de IceCast

A partir de la version 2.3.1, IceCast tourne par défaut avec l'utilisateur icecast et le group nogroup. Afin qu'il puisse écrire dans les logs, nous devons donc changer les droits du dossier.

chown icecast:nogroup /var/log/icecast

La configuration d'IceCast s'effectue en partie dans un fichier xml. Ouvrez /etc/icecast2/icecast.xml avec votre éditeur favoris. Plusieurs modifications doivent être ici apportés.

La première chose à faire est de modifier les 3 instances du password hackme de <source-password>, <relay-password> et <admin-password>. Puis, comme nous l'avons mentionné plus haut, nous allons sécuriser l'accès au flux. Il s'agit d'abord de déclarer cela ici.

    <mount>
        <mount-name>/mpd.ogg</mount-name>
        <authentication type="htpasswd">
                <option name="filename" value="/chemin/absolu/vers/myauth"/>
                <option name="allow_duplicate_users" value="0"/>
        </authentication>
    </mount>

Notez le mount-name, nous l'utiliserons pour la configuration de mpd.

Pour les autres options, je vous laisse regarder la documentation et modifier pour votre cas.

Configuration de Mpd

Editer le fichier /etc/mpd.conf

Il y a beaucoup d'options. Nous allons procéder dans l'ordre et seulement pour les options nécessaires au bon fonctionnement de notre serveur de streaming.

music_directory                 "/le_repertoire/de_votre/musique"
audio_output {
    type        "shout"
    name        "my cool stream"
    host        "localhost"
    port        "8000"
    mount       "/mpd.ogg"
    password    "hackme"
    #   quality     "7.0"
    bitrate     "64"
    format      "44100:16:2"
    # Optional Paramters
    user        "source"
    description "here's my long descriptiion"
    genre       "jazz"
}

C'est ici que nous réglons l'encodage et l'envoie du flux vers IceCast. Donc, pour le mount, vous mettez ce que vous avez mis précédement dans IceCast. Pareil pour le password (ici, on utilise l'utilisateur source). Régler le bitrate selon votre connexion. Enfin, format "44100:16:1" est le format audio du flux. Le premier chiffre est le taux d'échantillonnage en Hertz. Le second est le nombre de bits et enfin le troisième définit le nombre de canaux: 1 pour mono, 2 pour stereo.

Pour plus de précisions, je vous renvoie à la documentation :p

Il ne reste plus qu'à construire la base de données de mpd et ce sera bon pour cette partie (cela peut durer un moment selon le nombre de chanson dans vos répertoires).

/usr/bin/mpd --create-db

Lancement, tests et finalisation

Les différentes configuations étant terminées, nous pouvons alors lancer tout ce beau monde, tester et finaliser.

/etc/init.d/mpd start && /etc/init.d/icecast restart

Si tout démarre sans problème, il nous faut dès lors rajouter un/des utilisateur(s). IceCast possède une interface d'administration : http://localhost:8000/admin/
Cherchez votre mountpoint et ajoutez vos utilisateurs.

Toujours dans votre navigateur : http://localhost/phpmp/
Cette interface légère (^^) va vous permettre de contrôler mpd (Si vous avez accès au ssh, ne vous privez pas d'installer ncmpc ou tout autre logiciel de contrôle pour mpd... ce n'est pas mon cas partout alors je contourne via http ici). Sélectionnez quelques chansons et lancez la lecture.

Enfin, sortez votre lecteur mp3 kivabieng (tous ne gèrent pas l'authentification... vous trouverez une liste non exhaustive de ceux la gérant dans la documentation de IceCast) et ouvrez l'url vers votre flux: http://localhost:8000/mpd.ogg
Après authentification, cela devrait fonctionner... Si ce n'est pas le cas, consulter les logs :/

Les bases de ce tutorial