TV Samsung, Mediatomb et Ubuntu

logo smart tvMa vieille télé à tube cathodique ne voulant décidément pas tomber en panne après 30 ans de bons et loyaux services, j’ai fini par m’en débarrasser pour profiter des beaux écrans plats que l’on nous propose aujourd’hui.

Je sais, c’est pas bien, j’aurai du attendre qu’elle me lâche, ce n’est pas la peine de râler contre l’obsolescence programmée… pour m’arranger avec ma conscience, je me dis que la technologie LED consomme moins d’énergie… 😉

J’ai choisi le modèle UE40SE6100, une « SMART TV » qui permet plein de choses, dont une qui m’intéressait particulièrement : pouvoir visualiser les contenus multimédia de mon PC via un serveur UPnP, en l’occurrence Mediatomb.

J’installe donc Mediatomb sur le PC Ubuntu, et sur la télé je vois apparaître une nouvelle source : serait-ce aussi simple ?

mediatomb sur samsung

Hélas non, impossible de récupérer ne serait-ce que la liste des fichiers : message d’erreur « Impossible d’exécuter la demande. Retour de MEDIA PLAY à l’écran principal ».

erreur samsung

Comme ça n’a pas vraiment été facile de trouver la solution, voilà les étapes que j’ai suivi pour finalement réussir à faire marcher tout cela :

  • Je vérifie tout d’abord que la freebox player voit bien mon serveur Mediatomb et peut lister et lire les fichiers. C’est bien le cas, et donc pas de problème de port réseau à ouvrir etc…
  • Quelques recherches sur internet ne m’apportent pas grand chose : je trouve sur la documentation d’Ubuntu-fr quelques infos (modifier le <custom-http-headers> dans le fichier config) mais sans succès. Il y a bien quelques articles qui parlent d’un problème de protocole non respecté par Samsung et qui poserait problème…
  • J’installe alors un autre serveur UPnP, à savoir uShare. Même résultat, y compris pour la freebox.
  • Je pense alors à un problème côté TV, et je mets à jour le firmware de la télé. Pas plus de succès.
  • Finalement, je lance une machine virtuelle (XP sur Virtualbox), et installe uShare : et là, tout fonctionne sans aucun problème.

J’en conclue qu’il y a un problème entre les serveur UPnP sur Linux et Samsung. Et je retourne sur internet faire quelques recherches.

Quelques explications pour mieux comprendre :

  • uShare et Mediatomb sont  des serveurs UPnP et DLNA.
  • DLNA est une alliance entre 250 sociétés, définissant un standard d’interopérabilité permettant la lecture, le partage et le contrôle d’appareils multimédia.
  • UPnP est le protocole réseau utilisé par DLNA.
  • Samsung a surnommé ce système All Share.

Et finalement, je tombe sur cette article : Compiling Mediatomb on Ubuntu 12.04 with support for Samsung Smart TVs. On y apprend que Samsung n’a pas respecté le RFC 2396, et l’auteur fourni les informations pour recomplier Mediatomb en y incluant un patch existant.

À première vue, les instructions ont l’air compliqué, mais finalement tout s’est bien passé. Voilà les instructions, adaptées à Ubuntu 13.04 (32 bits), les instructions données sur la page étant pour Ubuntu 12.04 (64 bits).

On va d’abord se créer un répertoire, puis installer quelques outils, et télécharger les sources de mediatomb afin de pouvoir le recompiler :

mkdir mediatomb
cd mediatomb/
sudo apt-get install dpkg-dev devscripts fakeroot
sudo apt-get build-dep mediatomb
sudo apt-get source -d mediatomb
dpkg-source -x mediatomb_0.12.1-0ubuntu5.dsc

Jusque-là, rien de très compliqué. L’instruction suivante est un peu plus inhabituelle :

cat > mediatomb-0.12.1/debian/patches/mediatomb-urifix.patch << EOF
--- a/tombupnp/upnp/src/genlib/net/uri/uri.c
+++ b/tombupnp/upnp/src/genlib/net/uri/uri.c
@@ -1042,7 +1042,8 @@
         out->path_type = REL_PATH;
     }

-    if( ( ( begin_hostport + 1 ) < max ) && ( in[begin_hostport] == '/' )
+    //parse hostport only if scheme was found
+    if( ( begin_hostport > 0 ) && ( ( begin_hostport + 1 ) < max ) && ( in[begin_hostport] == '/' )
         && ( in[begin_hostport + 1] == '/' ) ) {
         begin_hostport += 2;

@@ -1059,6 +1060,12 @@
         out->hostport.text.size = 0;
         out->hostport.text.buff = 0;
         begin_path = begin_hostport;
+
+        //remove excessive leading slashes (fix for Samsung Smart TV 2012)
+        while( ( ( begin_path + 1 ) < max ) && ( in[begin_path] == '/' ) && ( in[begin_path + 1] == '/') ) {
+            begin_path++;
+        }
+
     }

     begin_fragment =
EOF

En fait, on va tout simplement créer un fichier appelé mediatomb-urifix.patch dans le répertoire mediatomb-0.12.1/debian/patches/, en y copiant le contenu qui suit, jusqu’à rencontrer EOF (End Of File). Si l’opération vous parait trop compliquée, vous pouvez tout simplement le faire à l’aide d’un éditeur de texte tel que gedit.

On continue :

cd mediatomb-0.12.1/
sudo dch -i 'Samsung Smart TV 2012 fix by swiergot'
sudo dpkg-buildpackage -rfakeroot
cd ..
sudo dpkg -i mediatomb-common_0.12.1-0ubuntu6_i386.deb mediatomb-daemon_0.12.1-0ubuntu6_all.deb mediatomb_0.12.1-0ubuntu6_i386.deb

Reste à télécharger le fichier de configuration « qui marche », et à le copier au bon endroit :

sudo wget http://pastie.org/pastes/5397054/download -O /etc/mediatomb/config.xml

Voilà, vous pouvez lancer Mediatomb, et partager des répertoires qui seront désormais parfaitement accessible depuis la TV Samsung. Pour rappel, quelques commandes utiles :

sudo service mediatomb start
sudo service mediatomb stop
sudo service mediatomb restart

Le fichier de configuration est donc /etc/mediatomb/config.xml, et le fichier de log /var/log/mediatomb.log.

Enfin, si vous avez des problèmes pour lire les fichiers .avi, chercher la ligne suivante dans le fichier de configuration :

<!-- <map from="avi" to="video/avi"/> -->

et enlever les commentaires :

<map from="avi" to="video/avi"/>

Bon visionnage ! 😉

Laisser un commentaire

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