Préambule
Pour ce billet de rentrée, je vais expliquer comment intégrer un serveur UPnP (Universal Plug & Play) à notre Raspberry Pi. Le serveur UPnP servira à partager tous types de documents multimédia sur un réseau (audio, image et vidéo).
Il est biensur possible d'utiliser le fameux media center XBMC (porté pour la raspberry pi) pour partager et visualiser les documents, mais dans mon cas, je souhaite quelque chose de leger, de facile à administrer et j'ai toujours pas envie de brancher ma RasPi sur ma télévision. ;-).
Je me suis tourné vers le serveur GPL UPnP MediaTomb. Il me permet entre autre d'administrer mon serveur via une page web, de faire du transcodage, de faire des miniatures et pleins de bonnes choses encore.
Nativement, le packge MediaTomb n'est pas présent dans l'environnement Buildroot, on va commencer par ajouter ce paquet à buildroot pour le configurer, le compiler et l'installer sur notre cible.
Installation de nos paquets
libMP4v2
Avant d'attaquer l'ajout de mediatomb, on va commencer par une libraire MP4v2, non présente dans l'environnement Buildroot. Cette librairie sert à la manipulation de fichiers au format MP4 (dérivé du format Apple QuickTime).
Je vous fourni le tarball libmp4v2.tar.gz util à la création de notre paquet dans l'environnement buildroot. Dans cette archive, deux fichiers sont présents :
- Config.in : Fichier de description de notre application
- libmp4v2.mk : Makefile de téléchargement, configuration, compilation et installation de notre executable.
# tar xvzf libmp4v2.tar.gz -C BUILDROOT_PATH/package/
Le fichier Config.in :
config BR2_PACKAGE_LIBMP4V2 bool "libmp4v2" help The MP4v2 library provides an API to create and modify mp4 files as defined by ISO-IEC:14496-1:2001 MPEG-4 Systems. This file format is derived from Apple's QuickTime file format that has been used as a multimedia file format in a variety of platforms and applications. http://code.google.com/p/mp4v2/
Le fichier libmp4v2.mk :
############################################################# # # libmp4v2 # ############################################################# LIBMP4V2_VERSION = 2.0.0 LIBMP4V2_SOURCE = mp4v2-$(LIBMP4V2_VERSION).tar.bz2 LIBMP4V2_SITE = http://mp4v2.googlecode.com/files LIBMP4V2_INSTALL_STAGING = YES LIBMP4V2_INSTALL_TARGET = YES define LIBMP4V2_UNINSTALL_TARGET_CMDS rm -f $(TARGET_DIR)/usr/bin/mp4* rm -f $(TARGET_DIR)/usr/lib/libmp4v2* endef define LIBMP4V2_UNINSTALL_STAGING_CMDS rm -f $(STAGING_DIR)/usr/bin/mp4* rm -rf $(STAGING_DIR)/usr/include/mp4v2 rm -f $(STAGING_DIR)/usr/lib/libmp4v2* endef $(eval $(call AUTOTARGETS))
Je vous conseille d'aller voir la documentation de buildroot concernant l'ajout de nouveaux paquets.
Il va falloir ensuite indiquer à buildroot qu'un nouveau paquet à été créé, pour cela, on va modifier le fichier de configuration général (Config.in) du sous dossier package et lui rajouter la ligne surligné dans la section multimedia.
menu "Multimedia" source "package/libdvdread/Config.in" source "package/libdvdnav/Config.in" source "package/libmms/Config.in" source "package/libmpeg2/Config.in" source "package/libogg/Config.in" source "package/libplayer/Config.in" source "package/libtheora/Config.in" source "package/live555/Config.in" source "package/mediastreamer/Config.in" source "package/libmp4v2/Config.in" endmenu
L'installation de cette librairie est finie (nous n'avons pas besoin lancer une compilation pour le moment, ce sera fait lors de la compilation de mediatomb puisque c'est une dépendance de celui-ci), nous allons passer à l'installation de notre serveur dans buildroot. Le principe d'installation va être exactement identique que pour cette librairie.
mediatomb
Je vous fourni le tarball mediatomb.tar.gz util à la création de notre paquet dans l'environnement buildroot. Dans cette archive, trois fichiers sont présents :
- Config.in : Fichier de description de notre application
- mediatomb.mk : Makefile de téléchargement, configuration, compilation et installation de notre executable.
- mediatomb.patch : Patch qui sera appliqué par buildroot lors de la compilation du serveur
# tar xvzf mediatomb.tar.gz -C BUILDROOT_PATH/package/
Le fichier Config.in :
config BR2_PACKAGE_MEDIATOMB bool "mediatomb" select BR2_PACKAGE_SQLITE select BR2_PACKAGE_EXPAT help MediaTomb is an open source (GPL) UPnP MediaServer with a nice web user interface, it allows you to stream your digital media through your home network and listen to/watch it on a variety of UPnP compatible devices. MediaTomb implements the UPnP MediaServer V 1.0 specification that can be found on http://www.upnp.org/. The current implementation focuses on parts that are required by the specification, however we look into extending the functionality to cover the optional parts of the spec as well. MediaTomb should work with any UPnP compliant MediaRenderer, please tell us if you experience difficulties with particular models, also take a look at the Supported Devices list for more information.
Le fichier mediatomb.mk :
############################################################# # # mediatomb # ############################################################# MEDIATOMB_VERSION = 0.12.1 MEDIATOMB_SOURCE = mediatomb-$(MEDIATOMB_VERSION).tar.gz MEDIATOMB_SITE = http://downloads.sourceforge.net/mediatomb MEDIATOMB_INSTALL_STAGING = YES # avoid enable static option in makefile SHARED_STATIC_LIBS_OPTS = --enable-shared # sqlite3 paths ugly !!! MEDIATOMB_CONF_OPT = \ --disable-rpl-malloc \ --enable-pthread-lib \ --disable-mysql \ --disable-libmagic \ --disable-lastfmlib \ --disable-id3lib \ --with-search=$(STAGING_DIR)/usr/include \ --with-sqlite3-h=$(BUILD_DIR)/sqlite-$(SQLITE_VERSION) \ --with-sqlite3-libs=$(TARGET_DIR)/usr/lib \ --with-expat-h=$(BASE_DIR)/host/usr/include \ --with-expat-libs=$(STAGING_DIR)/usr/lib ifeq ($(BR2_PACKAGE_CURL),y) MEDIATOMB_CONF_OPT += \ --enable-curl \ --with-curl-cfg=$(BASE_DIR)/host/usr/arm-unknown-linux-gnueabi/sysroot/usr/bin/curl-config MEDIATOMB_DEPENDENCIES += libcurl endif ifeq ($(BR2_PACKAGE_LIBEXIF),y) MEDIATOMB_CONF_OPT += \ --with-libexif-h=$(STAGING_DIR)/usr/include \ --with-libexif-libs=$(STAGING_DIR)/usr/lib MEDIATOMB_DEPENDENCIES += libexif else MEDIATOMB_CONF_OPT += \ --disable-libexif endif ifeq ($(BR2_PACKAGE_TAGLIB),y) MEDIATOMB_CONF_OPT += \ --with-taglib-cfg=$(STAGING_DIR)/usr/bin/taglib-config MEDIATOMB_DEPENDENCIES += taglib else MEDIATOMB_CONF_OPT += \ --disable-taglib endif ifeq ($(BR2_PACKAGE_ZLIB),y) MEDIATOMB_CONF_OPT += \ --with-zlib-h=$(BASE_DIR)/host/usr/include --with-zlib-libs=$(STAGING_DIR)/usr/lib MEDIATOMB_DEPENDENCIES += zlib else MEDIATOMB_CONF_OPT += \ --disable-zlib endif ifeq ($(BR2_PACKAGE_LIBMP4V2),y) MEDIATOMB_CONF_OPT += \ --with-libmp4v2-h=$(STAGING_DIR)/usr/include --with-libmp4v2-libs=$(STAGING_DIR)/usr/lib MEDIATOMB_DEPENDENCIES += libmp4v2 else MEDIATOMB_CONF_OPT += \ --disable-libmp4v2 endif $(eval $(call AUTOTARGETS))
Sans oublier d'ajouter notre paquet à buildroot avec la modification du fichier de configuration générale des paquets (Config.in) dans le sous dossier package :
menu "Multimedia" source "package/libdvdread/Config.in" source "package/libdvdnav/Config.in" source "package/libmms/Config.in" source "package/libmpeg2/Config.in" source "package/libogg/Config.in" source "package/libplayer/Config.in" source "package/libtheora/Config.in" source "package/live555/Config.in" source "package/mediastreamer/Config.in" source "package/libmp4v2/Config.in" source "package/mediatomb/Config.in" endmenu
Ce paquet fait appel à de nombreuses dépendances, 2 sont obligatoires et automatique cochées (sqlite3 et libexpat) lors de l'activation de celui-ci, les autres dépendances sont fortement recommandées, donc il va falloir cocher préalablement, les paquets :
- curl
- zlib
- taglib
- libmp4v2
- libexif
Pour choisir les paquets, Entrer la commande à la racine de buildroot :
# make menuconfig
Le paquet mediatomb fraichement créé dans buildoot se trouve dans le sous menu "multimedia" de "library'.
Il ne reste plus qu'à compiler et installer le tout :
# make
A la fin de la configuration du paquet, un rapport est affiché :
CONFIGURATION SUMMARY ---- sqlite3 : yes mysql : disabled libjs : missing libmagic : inotify : no libexif : yes id3lib : disabled taglib : yes libmp4v2 : yes ffmpeg : yes ffmpegthumbnailer : missing lastfmlib : disabled external transcoding : yes curl : yes YouTube : yes libextractor : disabled db-autocreate : yes
Une fois la compilation terminée, nous pouvons vérifier que le serveur est bien installé :
# ls -al BUILDROOT_PATH/output/target/usr/bin/mediatomb -rwxr-xr-x 1 sinseman44 sinseman44 1153596 2012-09-11 19:14 mediatomb
et les fichiers de configuration :
# ls -al BUILDROOT_PATH/output/target/usr/share/mediatomb drwxrwxr-x 4 sinseman44 sinseman44 4096 2012-09-11 19:14 . drwxrwxr-x 25 sinseman44 sinseman44 4096 2012-09-11 19:14 .. drwxrwxr-x 2 sinseman44 sinseman44 4096 2012-09-11 19:14 js -rw-r--r-- 1 sinseman44 sinseman44 1362 2012-09-11 19:14 mappings.xml -rw-r--r-- 1 sinseman44 sinseman44 3820 2012-09-11 19:14 mysql.sql -rw-r--r-- 1 sinseman44 sinseman44 2933 2012-09-11 19:14 sqlite3.sql drwxrwxr-x 4 sinseman44 sinseman44 4096 2012-09-11 19:14 web
Je vous conseille d'aller voir un ancien tutoriel, pour la mise à jour du système de fichiers sur la carte SD avec les nouvelles applications fraichement installées.
Utilisation de mediatomb
Sur notre carte, on peut vérifier le bon fonctionnement de notre serveur à l'aide de la commande :
# /usr/bin/mediatomb --version MediaTomb UPnP Server version 0.12.1 - http://mediatomb.cc/ =============================================================================== Copyright 2005-2010 Gena Batsyan, Sergey Bostandzhyan, Leonhard Wimmer. MediaTomb is free software, covered by the GNU General Public License version 2
Lancement du serveur à la main
On peut démarrer le serveur "à la main" (voir l'aide pour les différentes options) :
# /usr/bin/mediatomb -d -e eth0 -p 8080 Running mediatomb to start UPnP server 1970-01-01 00:09:53 INFO: Loading configuration from: /root/.mediatomb/config.xml 1970-01-01 00:09:53 INFO: Checking configuration... 1970-01-01 00:09:53 INFO: Setting filesystem import charset to ANSI_X3.4-1968 1970-01-01 00:09:53 INFO: Setting metadata import charset to ANSI_X3.4-1968 1970-01-01 00:09:53 INFO: Setting playlist charset to ANSI_X3.4-1968 1970-01-01 00:09:53 WARNING: You enabled the YouTube feature, which allows you to watch YouTube videos on your UPnP device! Please check http://www.youtube.com/t/terms By using this feature you may be violating YouTube service terms and conditions! 1970-01-01 00:09:53 INFO: Configuration check succeeded.
il va démarrer en mode démon, sur l'interface réseau eth0, avec l'interface web sur le port 8080.
Pour avoir accès à l'interface web, ouvrer votre navigateur web favori et entrer l'adresse : http://RASPI_IP_ADDR:8080 (en remplaçant RASPI_IP_ADDR par celle qui va bien)
Lancement du serveur au démarrage de la carte
Copier le script S51upnpd dans le sous-dossier board/raspberrypi de buildroot et modifier le script post-build.sh dans ce même sous-dossier, et rajouter la ligne surlignée :
TARGETDIR=$1 # Set root password to 'root'. Password generated with # mkpasswd, from the 'whois' package in Debian/Ubuntu. sed -i 's%^root::%root:8kfIfYHmcyQEE:%' $TARGETDIR/etc/shadow # Generate boot config files echo "dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait" > $TARGETDIR/boot/cmdline.txt echo "disable_overscan=1" > $TARGETDIR/boot/config.txt echo "arm_freq=800" >> $TARGETDIR/boot/config.txt # Point /bin/sh to /bin/bash ln -T -s /bin/bash $TARGETDIR/bin/sh # Package the /boot partition tar -czf $TARGETDIR/../images/boot.tar.gz --exclude=Image -C $TARGETDIR/boot/ . # add a corrected, and lightweight inittab #cp board/raspberrypi/inittab $TARGETDIR/etc/inittab # add eth0 dhcp entry into /etc/network/interfaces cp board/raspberrypi/interfaces $TARGETDIR/etc/network/ # make sure that ntpdate is run before sshd is started cp board/raspberrypi/S41ntpdate $TARGETDIR/etc/init.d/ cp board/raspberrypi/S51upnpd $TARGETDIR/etc/init.d/ chmod a+x $TARGETDIR/etc/init.d/S41ntpdate
Ce script vous permettra de faire la même chose que la ligne de commande lancée précedement mais automatique au démarrage du système. Je vous conseille d'aller jeter un coup d'oeil à la documentation de mediatomb pour plus d'infos (utilisation avec une télévision connectée et/ou une console type PS3 ou XBOX 360, etc ...).
Amusez-vous bien avec ...
Aucun commentaire:
Enregistrer un commentaire