web-dev-qa-db-fra.com

Pourquoi la base de données minidlna n'est-elle pas actualisée?

Je développe un serveur MiniDLNA pour diffuser du contenu multimédia via WiFi. Les fichiers existants sont affichés correctement. Cependant, lorsque j'ajoute de nouveaux fichiers dans des dossiers multimédias, les modifications ne sont pas mises à jour sur les clients MiniDLNA. J'ai également essayé de redémarrer le serveur mais cela ne reflète pas les changements.

J'ai changé inotify_interval = 60 mais il ne met toujours pas à jour files.db qui est la base de données de la liste de supports MiniDLNA. Si je supprime cette base de données et redémarre le serveur, les modifications sont affichées.

Est-ce que quelqu'un sait ce que le problème pourrait être?

41
Dipen

En résumé, la méthode la plus fiable pour que MiniDLNA réanalyse tous les fichiers multimédias consiste à exécuter le jeu de commandes suivant:

$ Sudo minidlnad -R
$ Sudo service minidlna restart

Script côté client pour réanalyser le serveur

Cependant, de temps en temps, MiniDLNA s'exécutera sur un serveur. Voici un script côté client pour demander une nouvelle analyse sur un tel serveur:

#!/usr/bin/env bash
ssh -t server.on.lan 'Sudo minidlnad -R && Sudo service minidlna restart'
41

AzP a déjà fourni la plupart des informations, mais certaines d'entre elles sont incorrectes.

Tout d’abord, cette option n’existe pas inotify_interval. La seule option qui existe est notify_interval et n'a rien à voir avec inotify.

Donc, pour clarifier, notify_interval _ contrôle la fréquence à laquelle le (mini) serveur DLNA s’annonce sur le réseau. La valeur par défaut de 895 signifie qu'il s'annonce lui-même toutes les 15 minutes environ, ce qui signifie que les clients auront besoin de 15 minutes au maximum pour trouver le serveur. Personnellement, j'utilise 1-5 minutes en fonction de la volatilité du client sur le réseau.

Pour que minidlna trouve les fichiers qui ont été ajoutés, il existe deux options:

  • Le premier équivaut à supprimer le fichier files.db et consiste à redémarrer minidlna en passant le -R argument qui impose une nouvelle analyse complète et construit la base de données à partir de zéro. Depuis la version 1.2.0, il y a maintenant aussi le -r argument qui effectue une action de reconstruction. Cela préserve toutes les bases de données existantes et supprime et ajoute les anciens et nouveaux enregistrements, respectivement.
  • La seconde consiste à compter sur inotify events en définissant inotify=yes et redémarrage de minidlna. Si inotify est défini sur =no, la seule option permettant de mettre à jour la base de données de fichiers est la nouvelle analyse forcée.

De plus, pour que inotify fonctionne, le système de fichiers doit prendre en charge les événements inotify, ce qui n'est pas le cas dans la plupart des systèmes de fichiers distants. Si vous exécutez minidlna sur NFS, aucun événement inotify ne sera détecté car ils sont générés côté serveur et non sur le client.

Enfin, même si inotify fonctionne et est pris en charge par le système de fichiers, l'utilisateur sous lequel minidlna est exécuté doit pouvoir lire le fichier, sinon il ne pourra pas récupérer les métadonnées nécessaires. Dans ce cas, le fichier journal (généralement /var/log/minidlna.log) devrait contenir des informations utiles.

28
unode

MiniDLNA utilise inotify, une fonctionnalité du noyau Linux, utilisée pour détecter les modifications apportées à des fichiers et à des répertoires spécifiques du système de fichiers. Pour que cela fonctionne, vous avez besoin de la prise en charge d’inotify dans votre noyau.

Le notify_interval (notez le manque de 'i'), pour autant que je sache, n'est utilisé que si vous avez désactivé inotify. Pour utiliser le notify_interval (c'est-à-dire que le serveur "interroge" le système de fichiers pour connaître les modifications au lieu d'en être automatiquement informé), vous devez désactiver la fonctionnalité inotify.

Voici à quoi ça ressemble dans mon /etc/minidlna.conf:

# set this to no to disable inotify monitoring to automatically discover new files
# note: the default is yes
inotify=yes

Assurez-vous que inotify est activé dans votre noyau.

S'il n'est pas activé et que vous ne souhaitez pas l'activer, une nouvelle analyse forcée est le moyen de forcer MiniDLNA à analyser de nouveau le lecteur.

5
AzP

J'ai récemment découvert que minidlna ne met pas à jour la base de données si le fichier multimédia est un lien dur. Si vous souhaitez que ces fichiers apparaissent dans la base de données, une nouvelle analyse complète est nécessaire.

ex: si vous avez un fichier /home/movies/foo.mkv et un lien dur dans /home/minidlna/video/foo.mkv, où '/ home/minidlna' est votre part minidlna, vous devrez effectuer une nouvelle analyse jusqu'à ce que ce fichier apparaît dans la base de données (et ensuite votre client DLNA).

J'essaie encore de trouver un moyen de contourner cela. Si quelqu'un a des idées, il est le bienvenu.

2
Karan Bhalla

Il existe un correctif pour le code source de minidlna sur sourceforge qui ne permet pas une nouvelle analyse complète, mais une sorte d'analyse incrémentielle. Cela a bien fonctionné, mais avec certaines versions ultérieures, le correctif est endommagé. Voir ici Lien vers SF

Cordialement Gerry

1
user1226230