Utilisation de l'UPnP AV avec la Freebox : Mediatomb

La freebox est compatible depuis Mai 2009 avec le standard UPnp AV, c'est-à-dire qu'elle est capable de chercher les serveurs UPnP AV sur le réseau local et d'exploiter les fichiers partagés par les serveurs.

La [http://fr.wikipedia.org/wiki/UPNP|page wikipedia sur l'UPnP] et surtout le paragraphe sur l'UPnP AV explique mieux que moi les différentes parties impliquée.

[http://mediatomb.cc/|Mediatomb] est un serveur UPnP AV, il partage sur le réseaux les médias que l'utilisateur a sélectionnés.

Le seul problème c'est que seul les fichiers vidéos sont lisibles par la freebox, les fichiers audio n'apparaissent même pas dans l'interface. Cette limitation imposée par free utilise le mimetype des fichiers annoncé par le serveur UPnP/AV. En clair la freebox n'accepte que les mimetype suivants : * video/x-matroska * video/x-msvideo

elle refuse tous les autres. Il suffit de donner le mimetype video/x-msvideo à n'importe quel fichier pour qu'il soit affiché dans l'interface. Mais il ne sera pas pour autant lu par la freebox...

Installation et configuration

Mediatomb est empaqueté dans Debian, donc pour l'installation :

sudo aptitude install mediatomb

La configuration de mediatomb est situé dans le fichier /etc/mediatomb/config.xml. Comme j'ai plusieurs interfaces réseaux, j'ai indiqué laquelle utilisée :

[...]
<server>
    <interface>eth0</interface>
[...]

Pour que le démon démarre automatiquement au boot, il faut modifier le fichier /etc/default/mediatomb :

[...]
NO_START="no"
[...]

Après avoir démarré le service, une interface web est disponible à http://IP:49152/. Cette interface permet d'ajouter des médias ou des répertoires en utilisant l'ongler Filesystem. Une fois les médias ajoutés, ils sont disponibles dans l'onglet 'Database'.

Par défaut mediatomb range les médias en fonction de leur type (video, audio, image) et créé une arborescence virtuel pour certain media (répertoires album, artiste, date, ... pour les fichiers audio).

À partir de maintenant les fichiers sont accessibles par la freebox.

Organisation des médias

Transcoder des mp3

La freebox est capable de lire les fichiers mp3, mais refuse de les lister et refuse un flux uniquement audio mp3. Pour preuve, il est possible de lire un fichier AVI ayant une bande son encodé en mp3.

La solution consiste à transcoder les mp3 en fichier vidéo. Sur le principe, on utilise n'importe quoi comme source vidéo, du moment que la source audio est le fichier mp3.

VLC est capable de lire 2 flux en même temps (audio + vidéo) et de les transcoder en un seul.

#!/bin/bash

DIR="/home/path/to/music"
FILE="myfile.mp3"
COVER="cover.png"


vlc \
  --sout "#transcode{vcodec=mp2v,vb=400,scale=1,audio-sync}:duplicate{dst=display}" \
  --sub-filter "marq{marquee=Artiste: \$a\$_Titre: \$t\$_Album: \$b\$_Piste: \$n,size=12}" \
  --fake-duration=5000 --fake-width=300 --fake-height=300 --fake-fps=10 \
  --fake-file "${DIR}/${COVER}" \
  --input-slave "#fake://" \
  "${DIR}/${FILE}"

Tester le service UPnP/AV

Le logiciel [http://djmount.sourceforge.net/|djmount] est capable d'exploiter les serveur UPnP/AV. Il utilise fuse pour créer une arborescence représentant le contenu du serveur UPnP.

sudo aptitude install libfuse-dev
wget http://sourceforge.net/project/downloading.php?group_id=142039&filename=djmount-0.71.tar.gz&a=15058957
tar xvzf djmount-0.71.tar.gz
cd djmount
./configure
make

Pour l'utiliser :

mkdir /tmp/upnp
cd /path/to/install/djmount
sudo ./djmount -f -o allow_other /tmp/upnp/

le -f force djmount à rester en foreground, c'est utile pour voir ce qui se passe.

Pour démonter l'arborescence :

sudo fusermount -u /tmp/upnp/

Dans les répertoires virtuels il y a un répertoire nommé .metadata qui contient les fichiers xml décrivant chacun des fichiers, c'est très utile pour comprendre ce que communique le serveur UPnP.

Liens utiles

  • [http://wiki.videolan.org/Documentation:Modules/fake|Documentation sur le module fake de VLC]
  • [http://wiki.videolan.org/Documentation:Modules/marq|Documentation sur le module marq de VLC]
  • [http://wiki.videolan.org/Documentation:Play_HowTo/Format_String|Documentation sur le format des chaîne de caractère pour marq dans VLC]
  • [http://wiki.videolan.org/Documentation:Streaming_HowTo/Advanced_Streaming_Using_the_Command_Line|Documentation partielle pour transcoder avec VLC]
  • [http://www.straightnochaser.org/2007/06/upnp-av-streaming-in-ubuntu-with-a-d-link-dns-323/|Documentation d'installation de djmount]