DLNA

Un peu d’histoire et de vocabulaire :

DLNA, Digital Living Network Alliance, n’est pas un protocole mais un regroupement des constructeurs pour le partage et la lecture des médias sur ou depuis des appareils multimédia.

Cependant, DLNA s’appuie sur le protocole Universal Plug and Play Audio Video. Dans UPnP AV on retrouve du :

  • TCP/IP : ensemble de protocole pour établir une communication
  • HTTP : couche application de TCP/IP
  • UDP : couche transport de TCP/IP

Et le concept de fonctionnement :

  • DMS : Digital Media Server, serveur de fichier multimedia
  • DMP : Digital Media Player, liste le contenu du DMS
  • DMR : Digital Media Renderer, joue le contenu affiché par le DMP

Dans mon contexte, mon NAS est un DMS et ma TV est à la fois DMP et DMR.

On retrouvera UPnP pour une autre fonctionnalité avec Plex.

Voici mon expérience avec 3 DMS :

Netgear ReadyNAS 102

Ici peu de configuration possible, simplement une activation du procole ReadyDLNA. J’ai su plus tard en explorant via SSH que Netgear utilise MiniDLNA.

MiniDLNA

Mon envie de faire un serveur « fait-maison » s’est fait ressentir au fur et à mesure de mon apprentissage. En couplant Raspbian et MiniDLNA, je suis arrivé à un résultat satisfaisant : musique sur fond de FLAC, vidéos décodés avec du Dolby Digital ou DTS. Néanmoins certaines vidéos, surtout des .AVI, ne se lançait pas sur ma TV et je ne comprenais pas pourquoi donc je les ré-encodais à la main depuis mon PC.

Autre petit soucis, les musiques s’affichaient par ordre alphabétique au lieu de l’ordre numérique. Pour remédier à ce problème, il faut ajouter cette ligne à minidlna.conf

force_sort_criteria=+upnp:class,+upnp:originalTrackNumber,+dc:title

Plex

Est alors apparu Plex. Depuis que j’ai monté mon système FreeNAS, ce plugin est apparu comme une évidence pour lire mes médias et ce depuis n’importe où et de manière automatique. Pourquoi automatique ? Grâce, encore une fois, au protocole UPnP mais cette fois-ci avec la fonctionnalité Internet Gateway Device. UPnP IGD permet l’ouverture de port automatique de votre routeur si ce dernier a le protocole UPnP d’activer.

Plex inclut un DMS sauf que sa configuration est plus complexe. Il faut associer un profil avec le lecteur multimédia (DMP et DMR). Et cette association, je ne l’ai pas compris tout de suite donc j’ai galéré à lire mes médias sur ma TV…

J’ai pu arrivé à un résultat potable grâce au mode débogage des journaux. Je voyais bien que ma TV était bien associée à un profil quand je naviguais dans les menus DLNA mais pas quand je lisais un média. Il me basculait sur un profil générique.

C’est à ce moment là que les en-têtes HTTP rentre en jeu. Lorsque le client demande des infos au serveur, il le fait via des requêtes HTTP sauf que leurs en-têtes peuvent être différentes en fonction du type du média demandé. Les voici pour ma TV :

<Identification>
 <Header name="User-Agent" substring="Panasonic MIL DLNA" />
 <Header name="User-Agent" substring="Panasonic" />
 <Header name="transferMode.dlna.org" substring="Streaming" />
</Identification>

Grâce à ça, j’ai bien une lecture de mes médias directement depuis le client sinon le serveur transcode le flux pour le rendre compatible à ma TV mais un concept m’échappe.

Ce concept a émergé depuis la révolution des DivX : les codecs.

Le mot codec est le mot le plus courant utilisé mais il y a souvent amalgame avec le mot conteneur.

Pour simplifier, le conteneur est le fichier lui-même et il est repérable avec son extension (.mkv, .mp3, .avi,…). A l’intérieur de ce container, on retrouve les codecs

conteneur-codec.jpg

Il y en a de différentes sortes : vidéo, audio, image, sous-tire, métadata,…

Pour connaître les codecs utilisés par votre appareil multimedia, il suffit de se référer à son manuel. Par exemple pour ma TV :

MKV (.mkv)
Video codec : H.264 BP/MP/HP, MPEG1, MPEG2, MPEG4 SP/ASP
Audio codec : AAC, Dolby Digital, Dolby Digital Plus, DTS core, HE-AAC, MPEG Audio, MP3

Dans le profile.xml, ceci donnera dans la section DirectPlay :

<DirectPlayProfiles>
 <VideoProfile container="mkv" codec="h264,mpeg2video,mpeg4" audioCodec="aac,ac3,eac3,dts,mp3" subtitleCodec="srt" />
</DirectPlayProfiles>

Et si votre média inclut un codec non compatible avec votre TV, il faut configurer le transcodage à la section TranscodeTarget

<TranscodeTargets>
 <VideoProfile container="mkv" codec="h264" audioCodec="mp3" />
</TranscodeTargets>

Et dans tout ce Schmilblick, il y a la gestion des sous-titres. Même chose, se référer à la TV :

Le fichier vidéo et le fichier des sous-titres doivent être dans le même répertoire avec exactement le même nom (seul l’extension change). Si plusieurs fichiers de sous-titres sont détectés alors ils seront pris dans cet ordre : .srt .sub .txt

Sauf que la plupart des médias inclut des sous-titres et Plex transcode directement en fonction de vos préférences/configurations.

Comme les sous-titres sont aussi des codecs, il suffit de les inclure dans le directplay pour que les sous-titres fonctionnent correctement.

Actuellement je ne maîtrise pas les codecs ni totalement ma configuration xml et j’ai encore des « çà ne marche jamais » de ma chérie 🙂

Bon film !

Clément Kerbastard

Fondateur du site Opti-IT, administrateur système et réseau en alternance avec l'ENI et FUTUROSOFT, ancien joueur professionnel et enseignant de golf, ma reconversion dans l'informatique me donne toujours l'envie de partager mes connaissances.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.