Tutorial / Howto / How-To...

article en cours de rédaction...

UPnP [1] est un protocole réseau de découverte de périphériques et de services sur un réseau local. Il est par exemple utilisé sur certains modems routeurs pour permettre l’ouverture dynamique de ports vers des postes clients et résoudre les problèmes de NAT [2]. La norme UPnP A/V (Audio/Video) définit plusieurs profils de périphériques pour permettre de partager (UPnP Server) et jouer (UPnP Client et UPnP Renderer) facilement des fichiers multimedia.

Le protocole UPnP utilise des messages XML/SOAP sur HTTP, qui sont multicastés sur le réseau. Les transferts de données (video, musique, images) sont également véhiculés par HTTP. Le protocole est donc très simple d’utilisation et d’implémentation.

Une liste de devices UPnP fonctionnant sous GNU/Linux :

  • UPnP Server : uShare, GMediaServer, CyberMediaGate, MediaTomb (pour partager des fichiers multimédia)
  • UPnP Renderer ou Client : djmount, GMediaRender, VideoLanClient (pour lire ces fichiers)
  • UPnP Controller : cidero (java), CyberLink Sample Control Point (java) (pour envoyer des fichiers d’un UPnP Server vers un UPnP Renderer)

Librairies et SDK UPnP :

Une liste de devices UPnP fonctionnant sous GNU/Linux :

  • UPnP Server : Nero ShowTime 2, TVersity, Windows Media Connect
  • UPnP Renderer : Intel
  • UPnP SDK : Intel

Rq : j’ai écrit une 2ème page sur les tests UPnP que j’ai réalisés.

UPnP Server : uShare

- Site web : http://ushare.geexbox.org/

- Description : uShare is a UPnP (TM) A/V Media Server. It implements the server component that provides UPnP media devices with information on available multimedia files. uShare uses the built-in http server of libupnp to stream the files to clients.

- Formats supportés :

  • Video : asf, avi, dv, divx, wmv, mjpg, mjpeg, mpeg, mpg, mpe, mp2p, vob, mp2t, m1v, m2v, m4v, m4p, mp4ps, ts, ogm, mkv, rmvb, mov, qt
  • Audio : aac, ac3, aif, aiff, at3p, au, snd, dts, rmi, mp1, mp2, mp3, mp4, mpa, ogg, wav, pcm, lpcm, l16, wma, mka, ra, rm, ram
  • Images : bmp, ico, gif, jpeg, jpg, jpe, pcd, png, pnm, ppm, qti, qtf, qtif, tif, tiff
  • Playlist : pls, m3u, asx

- Installation de uShare :

$ cd ~/src
$ wget "http://ushare.geexbox.org/releases/ushare-0.9.5.tar.bz2"
$ tar -xvjf ushare-0.9.5.tar.bz2
$ cd ushare-0.9.5
$ CFLAGS="-Os" ./configure --prefix=/usr
$ make
# make install-strip

Rq : le make install n’est pas nécessaire : le binaire généré peut être utilisé directement.

- Utilisation de uShare en ligne de commande :

$ ushare -n ushare -i eth0 -w -v -c ~/share
Warning: can't parse file "/etc/ushare.conf".
uShare (version 0.9.5), a lightweight UPnP Media Server.
Benjamin Zores (C) 2005, for GeeXboX Team.
See http://ushare.geexbox.org/ for updates.
Initializing UPnP subsystem ...
UPnP MediaServer listening on 10.0.0.4:49152
Sending UPnP advertisement for device ...
Listening for control point connections ...
Building Metadata List ...
Looking for files in content directory : /home/petrus/share
[...]
Found 33 files and subdirectories.

Attention : je vous conseille de désactiver l’interface web d’administration (en passant l’argument -w) sinon n’importe qui pourrait rajouter de nouveaux partages UPnP, via l’interface web http://adresse_ip :port/web/ushare.html ! Par exemple : http://10.0.0.4:49152/web/ushare.html

PNG - 103.3 ko
uShare - Interface web

- Utilisation de uShare en daemon :

Modifier le fichier de configuration /etc/ushare.conf (sous Debian) :

# /etc/ushare.conf
# Configuration file for uShare

# uShare UPnP Friendly Name (default is 'uShare')
USHARE_NAME=ushare

# Interface to listen to (default is eth0).
# Ex : USHARE_IFACE=eth0

# Directories to be shared (space or CSV list).
# Ex: USHARE_DIR=/dir1,/dir2
USHARE_DIR="/home/petrus/share"

# Daemon options
USHARE_OPTIONS="-w"

Démarrer le daemon :

# /etc/init.d/ushare start

TODO : changer le user du daemon : il tourne en root pour l’instant

UPnP Server : CyberMediaGate

- Site web : http://www.cybergarage.org/net/cmgate/cc/index.html

- Description : CyberMediaGate is a reference implementation of UPnP™ * AV Media Server. CyberMediaGate supports local file system and some PVR projects such as MythTV to distribute as the object items of the content directory service, and release a sample inplementation of UPnP™ MediaServer client using VideoLAN client.

- Formats supportés : ?

- Installation de CyberMediaGate

à compléter...

UPnP Server : GMediaServer

- Site web : http://www.nongnu.org/gmediaserver

- Description : GMediaServer is a UPnP™ music media server. It implements the server component that provides UPnP media devices with information on available audio files. GMediaServer uses the built-in http server of libupnp to stream the audio files to clients.

- Formats suportés : audio uniquement

- Installation de GMediaServer

$ cd ~/src
$ wget "http://savannah.nongnu.org/download/gmediaserver/gmediaserver-0.9.0.tar.gz"
$ tar -xvzf gmediaserver-0.9.0.tar.gz
$ cd gmediaserver-0.9.0
$ ./configure
$ make
$ make install

Rq : le make install n’est pas nécessaire : le binaire généré peut être utilisé directement.

- Utilisation de GMediaServer

$ gmediaserver --friendly-name=gmediaserver -i eth0 -v4 ~/share
gmediaserver process id 23847 starting
Scanning directory `/home/petrus/share'
[...]
Using IP address 10.0.0.4.
Initializing UPnP subsystem...
UPnP MediaServer listening on 10.0.0.4:49152
Enabling UPnP web server...
Registering UPnP root device...
Sending UPnP advertisement for device (expire time 100 seconds)...
Listening for control point connections...

UPnP Server : MediaTomb

- Site web : http://mediatomb.sourceforge.net/

- Description : MediaTomb is a UPnP mediaserver, it allows you to browse and stream your content using a UPnP mediarenderer.

- Installation de MediaTomb :

# emerge -av spidermonkey id3lib libexif libextractor
$ cd ~/src
$ wget "http://ovh.dl.sourceforge.net/sourceforge/mediatomb/mediatomb-0.8.1.tar.gz"
$ tar -xvzf mediatomb-0.8.1.tar.gz
$ ./configure --enable-sqlite3 --enable-libmagic --enable-id3lib --enable-libextractor --enable-libexif
$ make
$ cd scripts
$ ./tomb-install

- Utilisation de MediaTomb :

Attention : l’interface web d’administration est désactivée par défaut mais pour le moment, elle est nécessaire pour rajouter de nouveaux partages UPnP. La documentation conseille donc d’activer l’interface web juste le temps pour rajouter les partages puis de desactiver l’interface web !

Pour activer l’interface web d’administration, modifier le fichier $HOME/.mediatomb/config.xml :

<ui enabled="yes"/>

Démarrer MediaTomb :

$ mediatomb
======== MediaTomb UPnP Server version 0.8.1 ========
Loading configuration from ~/.mediatomb/config.xml
Loading configuration from: /home/petrus/.mediatomb/config.xml
UUID GENERATED!: 65a0aae2-80ef-40eb-b15c-4eb34ecd5bb9
Checking configuration...
Config: option not found: /server/servedir using default value:
Config: option not found: /import/metadata-charset using default value: ISO-8859-1
checking ip..
Config: option not found: /server/ip using default value:
Config: option not found: /server/bookmark using default value: mediatomb.html
Config: option not found: /server/port using default value: 0
Config: option not found: /import/library-options/libextractor/auxdata using default value:
Config: option not found: /import/magic-file using default value:
Configuration check succeeded.
Config: option not found: /server/ip using default value:
got ip: (null)
Initialized port: 49152
Server bound to: 10.0.0.4
INFO: upnp_init: webroot: /usr/local/share/mediatomb/web

Regarder sur quel port tourne le serveur web (Initialized port : 49152) et ouvrir dans un navigateur l’interface web d’administration : http://ip_adress :initialized_port/. Par exemple : http://10.0.0.4:49152.

Cliquer sur le menu Browse Filesystem puis choisir le répertoire à partager et cliquer sur le + à droite pour rajouter le répertoire

PNG - 89.8 ko
MediaTomb - Browse Filesystem

Pour vérifier que le répertoire a bien été rajouté dans la base de données, cliquer sur le menu Browse Database :

PNG - 95.2 ko
MediaTomb - Browse Database

Une fois les répertoires ajoutés, n’oubliez pas de désactiver l’interface web en modifiant le fichier $HOME/.mediatomb/config.xml :

<ui enabled="no"/>

... puis redémarrer MediaTomb

UPnP Server : TVersity (Windows XP)

- Site web : http://www.tversity.com/

- Description : The TVersity Media Server is a UPNP AV compliant media server that extends the functionality of UPNP media hubs to navigate, search, play and record, audio and video content from the Internet. It can also replace your existing UPNP media server and handle all the media located on your home network, including media formats that are not natively supported by your media receiver. With TVersity your media hub will be able to play almost any media file you have and in the same time become the set top box of Internet Television/Radio.

- Installation de TVersity :

à compléter...

UPnP Controller : Cidero

- Site web : http://www.cidero.com/

- Description : A collection of software applications and utilities, focused on UPnP-based media distribution and control in the networked home environment.

- Installation de Cidero :

$ cd ~/src
$ wget "http://www.cidero.com/downloads/cidero-1.4-jdk1.5.zip"

- Utilisation de Cidero :

$ MediaController.sh
PNG - 56.8 ko
Cidero - Interface
JPEG - 100.7 ko
Cidero - Debug

à compléter...

UPnP Client : djmount

- Site web : http://djmount.sourceforge.net/

- Description : djmount is a UPnP AV client. It mounts as a Linux filesystem the media content of compatible UPnP AV devices. Djmount discovers automatically all UPnP AV Media Servers on the network, and make the content available in a directory tree. All shared files (e.g. Audio or Video files) are directly visible and can be played using your favorite media player.

- Installation de djmount :

$ ./configure
$ make
# make install-strip

- Utilisation de djmount :

# modprobe fuse
$ djmount /mnt/upnp

- Démonter le montage :

$ fusermount -u /mnt/upnp

UPnP Renderer : GMediaRender

- Site web : http://soggie.soti.org/gmediarender/

- Description : GMediaRender is a UPnP™ media renderer for POSIX®-compliant systems, such as GNU/Linux® or UNIX®. It implements the server component that provides UPnP controllers a means to render media content (audio, video and images) from a UPnP media server.

- Installation de GMediaRender :

$ cd ~/src
$ wget "http://soggie.soti.org/gmediarender/files/gmediarender-0.0.2.tar.bz2"
$ tar -xvjf gmediarender-0.0.2.tar.bz2
$ cd gmediarenderer-0.0.2
$ make

à compléter...

UPnP Client : VideoLanClient

Le support de UPnP a été rajouté à videolan videolan depuis la version 0.8.4 (uniquement sous Linux pour le moment), notamment grâce au patch de Satoshi Konno de cybergarage.

- Installation de vlc :

Télécharger la librairie UPnp Cyberlink for C++ :

$ mkdir clinkcc-1.7.1
$ cd clinkcc-1.7.1
$ wget http://ovh.dl.sourceforge.net/sourceforge/clinkcc/clinkcc171.tar.gz
$ tar -xvzf clinkcc171.tar.gz

Creer le fichier (patch) iconv.patch suivant :

--- CyberLink/src/cybergarage/xml/XML.cpp.orig  2005-12-21 00:45:52.000000000 +0100
+++ CyberLink/src/cybergarage/xml/XML.cpp       2005-12-21 00:46:07.000000000 +0100
@@ -148,7 +148,7 @@
       UnicodeStr *unistr;

       char *coutbuf = (char *)outbuf;
-       size_t ret = iconv(cd, &inbuf, &inbyteleft, &coutbuf, &outbyteleft);
+       size_t ret = iconv(cd, (char **)&inbuf, &inbyteleft, &coutbuf, &outbyteleft);
       if (ret == (size_t)-1) {
               perror("iconv");
               unistr = NULL;

Appliquer le patch créé

$ patch -p0 < iconv.patch

Configurer et compiler la librairie UPnp Cyberlink for C++

$ cd CyberLink
$ ./configure --enable-expat
$ make

Télécharger, configurer et compiler la version svn de vlc

$ mkdir vlc-svn
$ cd vlc-svn
$ svn co svn://svn.videolan.org/vlc/trunk vlc-trunk
$ cd vlc-trunk
$ ./bootstrap
$ ./configure --enable-x11 --enable-xvideo --disable-gtk --enable-sdl --enable-ffmpeg --with-ffmpeg-mp3lame --enable-mad --enable-libdvbpsi --enable-a52 --enable-dts --enable-libmpeg2 --enable-dvdnav --enable-faad --enable-vorbis --enable-ogg --enable-theora --enable-faac --enable-mkv --enable-freetype --enable-fribidi --enable-speex --enable-flac  --enable-caca --enable-skins --enable-skins2 --enable-alsa --disable-kde --disable-qt --enable-wxwindows --enable-ncurses --enable-release --with-cyberlink-tree=/home/thus0/src/clinkcc-1.7.1/CyberLink --enable-cyberlink
$ make
# make install

Rq1 : éventuellement, effacer votre répertoire $HOME/.vlc

Rq2 : patch à appliquer (déjà inclus dans la version svn) [3]

- Configuration de vlc :

Activation de UPnP via le menu Préférences

JPEG - 48.2 ko
vlc - Préférences/Playlist

Activation de UPnP via le menu Découverte de services de la Liste de lecture

JPEG - 27.3 ko
vlc - Découverte de services

- Utilisation de vlc :

Affichage des partages de uShare : support des images, vidéos et audios :)

JPEG - 25.8 ko
vlc - Liste de lecture

Affichage des partages de gMediaServer : pas de support des images ou des vidéos :(

JPEG - 20 ko
vlc - Liste de lecture

Affichage des partages de MediaTomb : l’arborescence des répertoires est affichée depuis la racine :(

JPEG - 25.6 ko
vlc - Liste de lecture

Lancement d’une vidéo partagée en UPnP par uShare : bande-annonce de Da Vinci Code :) Rq : le menu clic-droit sur la vidéo ne marche pas chez moi ; je dois double-cliquer sur la vidéo pour démarrer la lecture

JPEG - 23.9 ko
vlc - The Da Vince Code

Tutoriaux

Liens


[1] Universal Plug & Play

[2] Network Address Translation

[3] http://www.via.ecp.fr/via/ml/vlc-de...