Partager des contenus avec UPnP
Par Thus0, samedi 17 décembre 2005 à 00:37 :: Multimedia ::#81
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 :
- la référence : CyberLink (c, c++, java, perl)
- Linux SDK for UPnP Devices
- Intel
- Siemens
- Microsoft
- http://www.upnp.org/resources/sdks.asp
- ...
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-stripRq : 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

- 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 startTODO : 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 installRq : 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/webRegarder 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

- 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 :

- 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
- Cidero - Interface

- 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/upnpUPnP 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.gzCreer 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.patchConfigurer et compiler la librairie UPnp Cyberlink for C++
$ cd CyberLink
$ ./configure --enable-expat
$ makeTé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 installRq1 : é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

- vlc - Préférences/Playlist
Activation de UPnP via le menu Découverte de services de la Liste de lecture

- vlc - Découverte de services
Utilisation de vlc :
Affichage des partages de uShare : support des images, vidéos et audios :)

- vlc - Liste de lecture
Affichage des partages de gMediaServer : pas de support des images ou des vidéos :(

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

- 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

- vlc - The Da Vince Code
Commentaires
Bonjour,
Je viens d’installer mediatomb un peu grace à ton site, mais je n’ai pas réussi à lire mes sous-titres sur mon Philips SL300i. Je n’arrive pas à trouver d’info mis à part pour le DSM320... Peux-tu m’aider et me dire si il gère les sous-titres, et comment faire pour gérer les sous-titres, des trucs en particulier, une configuration...
Merci d’avance