Si vous avez une Freebox, VLC une TV dite "connectée" ou une console de salon, vous disposez du protocole UPnP-AV, qui permet de lire sur un périphérique les contenus media stockés sur un autre périphérique présent sur le réseau local.
Protocole
UPnP-AV définit trois rôles :
- le control point, en gros la télécommande
- le media server, chargé de stocker, présenter et diffuser le contenu
- le media renderer, chargé de jouer le media, audio et/ou vidéo, sur un périphérique, haut parleur et écran
Le control point pilote le media server et le media renderer.
Dans la pratique, le control point et le media renderer peuvent ne faire qu'un :
Découverte
Qui dit plug and play dit pas de configuration. Alors comment le control point a connaissance des media servers et media renderers disponibles sur le réseau ? Avec le "protocole simple de découverte de services", en anglais "Simple Service Discovery Protocol", SSPD, qui se base sur la multidiffusion.
En gros, le control point hurle en UDP sur l'adresse de multicast 239.255.255.250, sur le port 1900: "qui est là ?". Et les services présents répondent en UDP, en donnant leur nature (upnp) et l'adresse où ils peuvent être joint.
Le reste du dialogue entre le control point et un services se fait de manière plus classique, en unicast, en SOAP, c'est à dire du XML sur HTTP.
En résumé, si vous voulez lire les media de votre PC sur la Freebox ou dans VLC sur une autre machine, il suffit de disposer d'un media server UpnP-AV.
Gerbera
Pour ma part, j'ai d'abord installé Gerbera, un fork de mediatomb, que j'avais utilise sur un NAS.
Gerbera est un media server bourré de fonctionnalités: interface web, support des icônes, des couvertures, des sous-titres, plugins pour exposer des sources externes, etc.
C'est, de fait, un logiciel plutôt complexe (C++, 152 fichiers, 22'537 uloc). Mais facile à installer et à configurer.
Son principal défaut, je trouve, est que la source de vérité de Gerbera est sa base de données et qu'il doit régulièrement synchroniser le contenu du système de fichiers pour la maintenir à jour. Et qui dit synchro dit dé-synchro.
J'ai commencé à avoir des galères lorsque j'ai voulu ajouter des fichiers de sous-titre. La configuration est un peu compliquée et les fichiers n'étaient pas vus, ni par la Box ni par VLC.
Je me suis dit que ce serait tellement plus simple avec un logiciel tout bête qui se contente d'exposer le système de fichiers directement et sans fioritures.
mcf/upnp-av
J'ai testé pas mal de candidats pour finalement dénicher mcf/upnp-av.
Il est tout simple (C, 5 fichers, 1'121 uloc). A tel point qu'il ne délivre pas lui même le contenu : il faut lui adjoindre un serveur HTTP pointant sur le même répertoire.
Il fait donc uniquement la réponse à la découverte de service et le listing du contenu.
Serveur HTTP
Je me suis alors mis en quête d'un serveur HTTP ; surtout pas de la trempe d'un Apache HTTPd ou d'un nginx mais le plus simple possible.
Je suis tombé sur la page des logiciels de l'ACME Laboratories (je croyais que cette entreprise n'existait que dans les Looney Tunes).
Le micro et le mini sont trop limités ; l'un ne supporte pas les ranges HTTP, nécessaire pour sauter à n'importe quel endroit d'un media ; l'autre ne supporte pas l'urlencoded tel que présenté dans le par le media server. Mais le thttpd fait le boulot. Un peu plus que nécessaire d'ailleurs…
Mise en œuvre
Les deux logiciels se compilent très facilement, à coup de configure et de make.
J'ai écrit un bout de script shell pour lancer le tout.
#!/bin/sh -eu
CMDD=$(dirname $(realpath $0))
PATH="${CMDD}:${PATH}"
# following ports must be allowed in FW : 1900/udp, 8000/tcp, 39053/tcp
# thttpd require the files to be 644
media="${1}"
uuid="${2:-f84d2a96-c8c0-11f0-b723-37fd10a4e15a}"
mediaserver_ip="$(ip route get 9.9.9.9 | awk '{print $7; exit}')"
mediaserver_port="39053"
stream_ip="${mediaserver_ip}"
stream_port="8000"
thttpd -D -p "${stream_port}" -d "${media}" &
upnp-mediaserver -l "${mediaserver_ip}" -p "${mediaserver_port}" -C "${media}" "${uuid}" "http://${stream_ip}:${stream_port}/"
Il serait préférable de le réécrire en unité systemd pour faire plus propre.
Conclusion
And … It works™

J'aime cette approche à la Unix : un programme qui fait une chose et le fait bien ; que l'on combine à d'autres pour arriver à la fonctionnalité voulue.
Idéalement, j'aimerai sortir la fonctionnalité de listing de contenus pour la déléguer à un programme externe, et ne plus être contraint de mettre le serveur HTTP et le media server au même endroit.
Bon visionnage
# Ready Media / minidlna
Posté par redo_fr . Évalué à 6 (+4/-0).
Merci pour cette découverte, c'est très intéressant.
Pour ma part, j'utilise Ready Media (ex miniDLNA) depuis des années, simple et efficace.
Celui qui pose une question est bête cinq minutes, celui qui n'en pose pas le reste toute sa vie.
[^] # Re: Ready Media / minidlna
Posté par steph1978 . Évalué à 2 (+2/-2).
Cela a fait partie des candidats que j'ai regardé.
Mais j'ai été un peu refroidi par ses 132 dépendances : ux-vdso, jpeg, id3tag, sqlite3, avformat, avutil, exif, FLAC, vorbis, ogg, c, z, m, avcodec, xml2, bz2, gme, openmpt, chromaprint, bluray, gnutls, rabbitmq, srt-gnutls, ssh-gcrypt, zmq, va-drm, va, va-x11, vdpau, X11, drm, mfx, OpenCL, b64/ld-linux-x86-64, swresample, vpx, webpmux, webp, lzma, aribb24, dav1d, opencore-amrwb, rsvg-2, gobject-2, glib-2, cairo, zvbi, snappy, aom, codec2, gsm, mp3lame, opencore-amrnb, openjp2, opus, shine, speex, theoraenc, theoradec, twolame, vo-amrwbenc, vorbisenc, x264, x265, xvidcore, icuuc, stdc++, gcc_s, mpg123, vorbisfile, fontconfig, freetype, udfread, p11-kit, idn2, unistring, tasn1, nettle, hogweed, gmp, ssl, crypto, gcrypt, gpg-error, gssapi_krb5, bsd, sodium, pgm-5, norm, Xext, Xfixes, xcb, soxr, png16, cairo-gobject, gdk_pixbuf-2, gio-2, pangocairo-1, pango-1, ffi, pcre, pixman-1, xcb-shm, xcb-render, Xrender, numa, pthread, icudata, expat, uuid, brotlidec, krb5, k5crypto, com_err, krb5support, md, Xau, Xdmcp, gomp, gmodule-2, mount, selinux, pangoft2-1, harfbuzz, fribidi, thai, brotlicommon, keyutils, resolv, blkid, pcre2-8, graphite2, datrie ; dixit
ldd.[^] # Re: Ready Media / minidlna
Posté par steph1978 . Évalué à 3 (+2/-1).
Pour celle/celui qui a jugé mon commentaire précédent "inutile", je vais compléter.
Avoir 130 dépendances n'est pas un soucis en soit si cela peut se résoudre par un
apt installou équivalent. Mais1/ même dans ce cas, ça prend pas mal de place (j'ai un SSD interne de 32GB).
2/ dans Debian, c'est la version 1.3.0 qui est packagée alors que la 1.3.3 est sortie.
3/ si je veux l'installer sur un système pour lequel le paquet n'existe pas, je dois passer par la case compilation et là c'est
for 1..130; do ./configure; echo install missing deps; done# par rapport à DLNA
Posté par flavien75 . Évalué à 4 (+3/-0).
Ton poste me fait beaucoup penser au protocole DLNA (j'ai même l'impression que c'est de ça dont tu parles).
J'avais mis ça en route il y a 10 sur un PC avec Ubuntu (passé depuis à Debian) pour partager une télé.
Avec minidlna, c'est vrai très très rapide:
éditer le fichier /etc/minidlna.conf et ajouter les chemins à surveiller, par exemple:
Il est possible d'ajouter cette ligne autant de fois qu'il y a de chemins à vérifier.
on redémarre le service :
Et c'est parti, le temps d'arriver à la TV, on a un logo Debian dans les sources vidéos, et accès à nos vidéos.
Les vrais naviguent en -42
[^] # Re: par rapport à DLNA
Posté par steph1978 . Évalué à 3 (+1/-0).
Si je comprends bien la page wikipedia, DLNA utilise, entre autre, UPnP-AV.
# Freebox
Posté par Bruno (Mastodon) . Évalué à 1 (+0/-0).
J'ai VLC sur la TV, j'active UPnP Av sur la Freebox (Delta) et c'est ok.
Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.