MiniDLNA: le serveur UPnP/DLNA léger

A la recherche d’un serveur UPnP à installer sur mon plug-computer Docktsar, on m’a conseillé MiniDLNA, un serveur UPnP qui répond enfin à mes attentes.

Un petit tour d’horizon

J’avais déjà fait il y a un moment un tour d’horizon de ce que je pouvais installer sur un serveur Debian.

Disponible dans les dépôts Debian Lenny:
Gmediaserver – UPnP Mediaserver
Mediatomb – UPnP MediaServer
uShare – Lightweight UPnP A/V Media Server

Que je connais aussi:
FUPPES
PyMeds
PS3 Media Server
Twonkyvision (aka TwonkyServer) License d’utilisation payante.

Mais aucun ne m’avais pleinement satisfait, soit trop lourds à gérer, trop gourmands en ressources, ne tenant pas forcément la charge d’une grosse collection, des incompatibilités diverses et variées (tant au niveau interne avec les fichiers, les tags, qu’avec certains clients UPnP), des classements farfelus de la médiathèque et/ou de l’ordre des pistes, parfois l’obligation d’un mode de navigation dans la médiathèque pas très ergonomique pour une collection conséquente, ou encore l’impossibilité de naviguer dans la bibliothèque lors que le serveur est en train de streamer un fichier…
Bref aucun ne répondait pleinement à ce que je cherchais, excepté peut-être Twonkyvision qui est payant.

MiniDLNA

MiniDLNA (anciennement ReadyDLNA) est un serveur dont l’objectif est d’être pleinement compatible avec les clients DLNA/UPnP-AV. Il a été développé par un employé de la société NETGEAR pour leur gamme de NAS « ReadyNAS ».
Donc dans sa conception MiniDLNA est pensé pour fonctionner sur de petites machines aux capacités restreintes (tel que les NAS), ce qui est idéal pour le Dockstar (CPU ARM, 128Mo de RAM).

Il est aussi réputé pour être plus compatible que certains autres serveurs UPnP/DLNA avec différents matériels un peu capricieux dans l’électronique grand public (ex: Téléviseurs avec fonctionnalité DLNA).

En téléchargement est disponible un binaire pré-compilé pour architecture x86 et son fichier de conf. Une simple extraction de l’archive en plaçant minidlna dans le répertoire /usr/sbin/ et minidlna.conf dans le répertoire /etc/. Puis quelques réglages dans le fichier de conf, lancer minidlna et hop ça a fonctionné direct sur mon portable sur Ubuntu.

Parfait rendu sur ma radio wifi Freecom MusicPal: navigation par artistes, albums, recherche de fichier, mais surtout possibilité de navigation dans l’arborescence du système de fichiers (ce que je préfère). Les pistes sont bien classées dans le bon ordre, lancez un morceau et il enchaine automatiquement ceux qui suivent dans le même dossier.
Le seul « désagrément » inévitable mais attendu c’est la durée du scan initial de la bibliothèque si celle-ci est conséquente. (Note: à partir de la version 1.0.22, l’utilisation de Inotify permet à la base de données de se mettre à jour toute seule lors de l’ajout de nouveaux médias).

Installation de MiniDLNA sur le Dockstar (Debian)

Étant donné que le Dockstar de Seagate (équivalent du PogoPlug, basé sur SheevaPlug) a une architecture processeur différente (ARM Marvell Kirkwood 1,2 GHz), il va falloir compiler MiniDLNA.

Un petit tutoriel? Allez…
Bon déjà ne pas oublier qu’on est avec l’utilisateur root.

On installe d’abord les dépendances requises pour la compilation:

aptitude install build-essential libexif-dev libjpeg-dev libid3tag0-dev libflac-dev libvorbis-dev libsqlite3-dev libavformat-dev libuuid1


Puis on va se placer dans le dossier temporaire:

cd /tmp/


On télécharge le fichier des sources (ici la dernière version en date était la 1.0.18):

wget http://downloads.sourceforge.net/project/minidlna/minidlna/1.0.18/minidlna_1.0.18_src.tar.gz


Et l'on décompresse l'archive:

tar -xzvf minidlna_1.0.18_src.tar.gz


On se met dans le dossier des sources décompressées "minidlna":

cd minidlna


Et on lance un "make"

make


Il n'y a plus qu'à copier les fichiers obtenus aux bons endroits:

cp minidlna /usr/sbin/
cp minidlna.conf /etc/
cat linux/minidlna.init.d.script > /etc/init.d/minidlna
chmod +X /etc/init.d/minidlna
chmod 755 /etc/init.d/minidlna


On peut faire un peu de ménage en désinstallant les paquets "dev" destinés à la compilation:

aptitude remove libexif-dev libjpeg-dev libid3tag0-dev libflac-dev libvorbis-dev libsqlite3-dev libavformat-dev

Voilà, vous n'avez plus qu'à faire les réglages de vos préférences (dossier où sont stockés vos medias, port d'écoute, pochettes d'albums, etc...) dans le /etc/minidlna.conf puis de lancer minidlna, soit par:

./usr/sbin/minidlna

ou plus propre:

/etc/init.d/minidlna start

Note: /etc/init.d/minidlna vous permet de l'ajouter en démarrage automatique à votre séquence de boot 😉

update-rc.d minidlna defaults

Cas pratique et personnel sur le Dockstar:

MiniDLNA a mis 1h15 pour scanner 71815 fichiers, c'est très honorable en considérant le petit CPU du Dockstar, sa RAM et le fait que les medias soient sur un disque USB.

Néanmoins lors du scan/indexation il se gauffre complétement et passe un temps monstre dès qu'il trouve le moindre fichier de playlist de type m3u.

Le problème des fichiers de playlist:
Lors du scan il a passé ~ 2 minutes d'analyse par fichier m3u qu'il a trouvé, s'il en trouve tout un tas l'indexation ne finira jamais...
(il fait une comparaison récurrente de dingue dans une énorme base sqlite sur des valeurs sans index, je vous laisse imaginer le massacre pour ceux qui ont l'habitude des bases de données)

Comme je n'ai aucune utilité des fichiers m3u, ni pls, je les ai effacé de ma bibliothèque en me rendant dans le dossier où sont stockés mes medias et en utilisant ces commandes:

find . -name "*.m3u" -exec rm '{}' \;
find . -name "*.M3U" -exec rm '{}' \;
find . -name "*.pls" -exec rm '{}' \;
find . -name "*.PLS" -exec rm '{}' \;

Le cache de MiniDLNA mis dans le répertoire /tmp:
Par défaut MiniDLNA génère ses fichiers de cache (base de données, etc...) dans le dossier temporaire /tmp/ qui dégage à chaque reboot (ça veut dire rescanner tout à chaque démarrage de la machine).
Une option est disponible depuis des récentes version pour stocker ces données ailleurs (au choix de l'utilisateur).
Il suffit de renseigner la variable "db_dir" dans le fichier de configuration, ex:

db_dir=/var/cache/minidlna

note: je n'avais vu nulle part cette mention, on me l'a indiqué dans un forum.

Une fois le scan terminé, en fonctionnement normal il ne consomme que très peu de ressource:
4.5% de la mémoire (sur 128Mo de RAM) et quasi 0% de CPU (à peine quelques % en pointe)

Module Webmin: MiniDLNA Webmin Module permet de modifier la configuration de MiniDLNA, de le redémarrer ou de relancer un scan depuis Webmin.

29 thoughts on “MiniDLNA: le serveur UPnP/DLNA léger”

  1. gaggou says:

    Bonne synthèse de l’install, merci. Je vais essayer de faire la même chose sur le mien.
    Pour l’instant, il est en train de télécharger sa debian.

    Gaggou

  2. leicht says:

    Merci pour ce tuto.
    ça marche nickel !

  3. Eric says:

    Bonjour,

    J’ai bien suivi ce tuto mais j’ai un soucis lorsque je lance minidlna.
    J’obtiens cette erreur => minidlna: error while loading shared libraries: libavformat.so.52: cannot open shared object file: No such file or directory

    Pourtant, tout s’est bien passé avant …

    Si vous avez une petite idée …

    Merci

  4. tof says:

    @Eric, il te faudrait peut-être alors installer libavformat

  5. Eric says:

    Après recherches, il fallait en fait installer ffmpeg puis flac. Avec tout ça, tout est ok !

    Merci

  6. stealth says:

    Article très intéressant, je l’utilise sur un nas DNS 323 et c’est effectivement performant, un bémol quand même pour l’indexation qui est vraiment lente, attendre plus d’une heure quand on ajoute une seul video c’est limite, il faudrait vraiment que minidlna ne recréer pas entièrement sa base à chaque indexation mais gére simplement l’ajout et la suppression de fichier (voir ici n’hésitez pas à demander l’implémentation 😉 http://sourceforge.net/tracker/?func=detail&aid=3114841&group_id=243163&atid=1121519 )

    Un autre petit souci, c’est qu’il n’est pas possible de changer l’ordre d’affichage des fichiers et dans mon cas les répertoires apparaissent seulement après les fichiers, mais c’est peut-être plutôt un souci avec la freebox

  7. tof says:

    Oui je suis aussi d’avis qu’il faudrait une ré-indexation partielle basée sur Inotify

    @stealth: regarde si jamais tu n’as pas des fichiers de playlist qui trainent dans ta bibliothèque (m3u, pls, etc…) car il ne semble pas les aimer du tout (ça le fait scanner en boucle récurrente). Chez moi il met ~1h15 pour scanner un disque de 500Go plein de medias musicaux (musique libre: http://www.jamendo.com/fr/ , http://magnatune.com/ , netlabels, etc…) où j’y ai supprimé tous les fichiers de playlist. Lorsque j’avais encore des fichiers de playlist présents dans la bibliothèque, au bout de 24h il n’en avait pas encore fini de scanner…

  8. stealth says:

    Pas obligatoirement sur Inotify car beaucoup de Nas ne l’inclus pas dans leur noyau et minidlna est spécialement étudié pour les Nas (c’est une dev de Netgear pour les readynas)

    Mais plutôt sur l’équivalent d’un fingerprint qui compare si un fichier à disparu et dans ce cas le retire ou si il n’est pas dans la base l’ajoute.

    Pour moi 1H15 c’est beaucoup je trouve, surtout si on fait des manipulations quotidiennes sur les fichiers

  9. VDIAS says:

    Starting minidlna: minidlna/usr/sbin/minidlna: error while loading shared libraries: libexif.so.12: cannot open shared object file: No such file or directory
    failed!

    ?????????

  10. VDIAS says:

    update-rc.d minidlna defaults

    update-rc.d: using dependency based boot sequencing
    insserv: warning: script ‘K01minidlna’ missing LSB tags and overrides
    insserv: warning: script ‘minidlna’ missing LSB tags and overrides

  11. tof says:

    @VDIAS: probably libexif and its dev package is missing: libexif-dev

  12. TheG says:

    Quelqu’un a-t-il un retour d’expérience de streaming divx, (sur tv sony) avec le dockstat ou autre ?

  13. Dju says:

    Salut
    je cherchais un peu d’actualité au sujet de mon DS adoré et suis tombé sur et article…
    ce fut ZE révélation :)
    j’ai une chaine hifi philips (tournant sous un petit linux embarqué :p ) me permettant de streamer des radios internet, mais également de faire du upnp/dlna, fonction que je n’avais encore jamais exploitée jusqu’ici…
    Grâce à tes explications claires, j’ai pu compiler minidlna sur mon DS (la dernière version est la 1.22) et semble gérer le inotify.
    Pour indexer ma collection audio (22G) montée dans un partage nfs sur mon filer depuis le DS, il a fallu 2 minutes. c’est plutôt honnête :)
    Une fois la config faite et les meupeu3 listés, je peux maintenant écouter toute ma zique depuis ma chaine hifi sans avoir mon pc démarré….
    bref de la grosse boulette atomique 😀

  14. Dju says:

    Ha et sinon, niveau consommation des ressources, minidlna me prend 0.2% du proc’ et environ 9 Mo de ram… bref que dalle !
    Un grand merci, donc 😉

  15. tof says:

    Rohh mais ça m’intéresse beaucoup d’apprendre qu’il serait possible d’utiliser inotify. Parce que refaire des scans complets de ma base de medias, en cas d’update, ça me lourde un peu.

  16. Dju says:

    salut
    Avec la derniere version de minidlna, je confirme que inotify marche :)
    MAiIS, dans mon cas, non :(
    En effet, si les fichiers sont en local sur mon dock (ou sur un disque dur usb) ca roule. la modif est faite instantannément dans files.db sans rescanner tout le dossier.
    Par contre, mon dossier est en fait un partage CIFS (samba) pour acceder à mes meupeu3 sur mon filer. Et la, pas de inotify :(

  17. tof says:

    Ouaip, ça me semble logique. Qui dit Inotify dit inode, donc impossible avec Samba d’abord parce relicat de MS…, d’autre part parce qu’en remote le kernel n’est prévenu d’aucun événement de changements sur le filesystem distant.
    Je ne pense pas que cela soit possible non plus avec NFS… (mais je m’avance peut-être).

    Bon moi je sens que dès je repasse près de mon Dockstar (dans ~ 15j), je vais remettre une version plus à jour de MiniDLNA pour profiter d’Inotify 😀
    Et je vais aussi enfin préparer le Dockstar que j’ai dans un placard depuis un an pour mon frère.

  18. Dju says:

    ô homme de peu de foi !
    (suis quand même d’accord pour le relicat, hein… :p )
    le dit filer est sous squeeze en ext4 et je partage avec samba. depuis le DS, en montant le partage en CIFS avec l’option directio, ça marche :)
    testé et retesté, la moindre modif’ de fichier, la base est mise à jour dans la seconde et visible depuis ma chaine hifi.

  19. LGnap says:

    Coucou,

    Alors moi j’ai un minidlna de version 1.0.22 (dernière existante je viens de checker) sur un dockstar mais ça m’empêche pas d’avoir des problèmes.
    Pour certains fichiers quand je les met à la racine des partitions tout est notifié et vu directement sur ma tv samsung, mais si je le met dans des sous dossiers il semblerait que inotify ne fonctionne pas tjrs.

    Le comportement est aléatoire, une fois il vient de me voir le nouveau dossier et le fichier direct et une autre après 20 minutes il ne voit encore rien.

    Le problème se pose aussi sur des sous dossiers que je vide puis que je rerempli (genre je le tape là le temps de mater mon film et puis le supprime) 1 fois sur 2 il n’est pas détecté.

    Si vous avez des idées…

    Meric d’avance 😉

  20. Dockstar says:

    Après compilation et installation de la version 1.0.22 d’après les instructions de cet article (merci galipe), miniDLNA a démarré après l’installation de librairies complémentaires :
    aptitude install libexif12 libid3tag0 libflac8

  21. tof says:

    C’est bizarre, je pensais que normalement libexif12 libid3tag0 libflac8 étaient installés automatiquement lors de l’installe de leur version « -dev » pour la compilation.
    ————
    Autre sujet: il existe un module Webmin pour MiniDLNA: http://sourceforge.net/projects/minidlnawebmin/
    Il est assez « brut de fonderie », mais c’est déjà ça 😉
    ————
    Je viens d’aller jeter un oeil dans la base de donnée SQLite de MiniDLNA grâce à SQLiteManager. Elle est monstrueuse, mais cela permet d’envisager plein de choses en utilisant cette base comme backend 😀
    – Déjà une interface web de navigation et stream un peu plus attrayant à la Jinzora, Ampache, etc… Mais bon j’ai déjà mon propre système maison qui me plaît bien mieux que ceux disponibles, par contre j’ai récemment utilisé cette base pour obtenir les infos id3 de mes médias, ce qui évite la lourdeur de refaire un parsing des tag id3 via la librairie PHP getid3
    – création d’un set d’API compatible avec Subsonic (je l’ai fait pour mon système maison, donc c’est faisable). L’intérêt est de pouvoir avoir accès à votre médiathèque de façon plus sexy sur votre smartphone ou tablette (iOS/Android) grâce aux applis qui gèrent ces API: http://www.subsonic.org/pages/apps.jsp . L’appli pour Android de Subsonic est vraiment sympa et gratuite, mais le serveur en lui-même me déplaît et me semble inadapté au Dockstar (Java, MySQL, etc…), de + au niveau du serveur une donation monétaire de 10 ou 20 euros est requise pour pouvoir continuer à utiliser les API. Donc voilà s’affranchir du serveur Subsonic, et balancer les bons XML générés en PHP ou Python depuis la base de MiniDLNA vers l’appli Android, avec une simple ouverture de port dans votre routeur, cela veut dire accès à votre médiathèque depuis partout et pas seulement depuis votre LAN…
    Bref, j’entrevois MiniDLNA comme une base d’expansion possible pour d’autres projets 😉

  22. gui7 says:

    Salut

    Quelqu’un arrive-t-il à faire fonctionner les sous-titres (srt) avec MiniDlna ?

    Merci d’avance

  23. tof says:

    Je t’avoue n’avoir jamais essayé, je l’utilise que pour la musique…

  24. Pingback: Installer et configurer MiniDLNA sous debian squeeze | HomeServer.DIY
  25. Trackback: Installer et configurer MiniDLNA sous debian squeeze | HomeServer.DIY
  26. gabidospi says:

    Salut à tous,

    Super tuto, je l’ai suivi et tout va presque bien.
    Je dis presque bien parce que:
    1. Je crois qu’il ne charge tous les fichiers présents (par exemple j’ai des dossiers de musique, par album, et dans certains, il n’y a qu’un seul morceau voire très peu).

    2. En rajoutant 2 disques durs à mon Dockstar, je n’arrive pas à les faire voir ensemble.
    En faisant des essais je me suis rendu compte que c’est le fichier index qui donne l’arborescence à afficher. J’explique: au début j’installe un dd Seagate et le fichier index minidlna je le fais inscrie dans un dossier de celui-ci. Résultat: le dd Seagate est bien visible sur ma freebox player.
    Dans minidnla.conf c’est marqué
    « if have multiples directories , you can have multiple media_dir= lines »
    Par conséquent, lorsque j’ai rajouté un autre disque dur (WD) à mon dock, j’ai rajouté une autre ligne avec le cheminement pour le contenu media.
    Résultat: Sur la freebox je vois toujours le premier dd (seagate).
    En changeant le fichier index sur dd WD, je vois que celui-ci
    En le mettant sur le dockstar (dans /tmp/minidnla) je ne vois plus rien.

    Je tiens à préciser que les fichiers des deux disques durs je peux les voir sur mon ordi branché sur le réseau, donc je crois qu’il y a un problème qu’au niveau du serveur upnp.

    Merci de me guider si vous avez des solutions.

  27. tof says:

    Salut gabidospi,

    1. ouaip, il scanne et répertorie tout ce qu’il voit (dans la mesure des types et extensions de fichiers que tu lui as autorisé)

    2. as-tu essayer d’utiliser les liens symboliques? http://en.wikipedia.org/wiki/Symbolic_link
    En faisant un lien symbolique de ton second HDD vers un dossier du premier?

  28. Jerome says:

    Salut,
    j’ai installé miniDLNA via Optware sur un nas DNS 320 et tout a fonctionné a merveille depuis une Freebox Player par contre chez moi avec ma Sony KDL 32w5500 (via ma LIVEBOX) j’ai accès aux répertoires mais il n’y rien dedans.
    Est-ce que qq’un a une idée?

  29. Pingback: J’ai choisi, pour moi c’est Betamax ! | riduidel's wordpress
  30. Trackback: J’ai choisi, pour moi c’est Betamax ! | riduidel's wordpress
  31. Pingback: Bye bye mediatomb, hello minidlna | riduidel's wordpress
  32. Trackback: Bye bye mediatomb, hello minidlna | riduidel's wordpress

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>