Pourquoi on ne peut pas transcoder vers une Freebox

Les serveurs multimédias domestiques évoluent de jour en jour. Il n'y a pas si longtemps, on se baladait avec des disques durs portables puis des clés USB, des SDCards pour aller de l'ordi à la platine de salon. Désormais toutes les boxes font plus ou moins serveur et lecteur de flux réseau. C'est le cas aussi pour certaines consoles de jeux (hackées ou non).

Pour ma part, j'ai une PS3 et une Freebox HD (V5, pas la dernière), elles font toutes deux - mal chacune dans leur genre - lecteur DLNA.

Au fil du temps, j'ai d'abord utilisé un petit serveur DLNA qui se trouvait sur mon premier NAS, autant dire qu'il n'était pas top, ne supportait rien et le processeur n'avait de toute façon pas le oumpff pour faire autre chose que streamer en direct les contenus (c'était un TeraStationII de Buffalo).

Depuis j'ai monté mon "petit" NAS perso sur un HP MicroServer avec FreeNAS comme OS/Distrib. Sur FreeNAS,l'une des alternatives "au déballage" est l'installation de Plex. Ce serveur multimédia a de nombreuses fonctions (comme le streaming à distance par exemple, le partage via internet, etc.) et en local dispose d'un module serveur DLNA (=UPnP) qui gère le transcodage.

Le transcodage consiste pour le serveur à recalculer les flux vidéo et audio à la volée lorsque le lecteur ne supporte pas le format original du fichier. La puissance du processeur du MicroServer est suffisante pour la plupart de mes besoins.

L'avantage du transcodage, c'est qu'on a plus à se poser la question du format, on streame un fichier vers la PS3, les tablettes/téléphones Android ou de la pomme de façon totalement transparente même si comme c'est le cas pour les différents iTrucs, il n'y a pas beaucoup de format supporté à la base...

Or comme un oeil sagace peu s'en rendre compte, je n'ai pas cité ci-dessus la Freebox... En effet, celle-ci, bien qu'elle supporte pas mal de codecs tant video qu'audio ou des contenants multimédias pas les plus courants (le Matroska par exemple, excellent container mais peu diffusé face à l'AVI,le MPEG-TS ou au MP4) marche encore plus mal que la PS3 qui avant le transcodage était TRES tatillonne...

Pour résumer : La Freebox ne supporte pas l'un des principaux containers actuel à savoir le MP4, ainsi tout fichier s'annoncant comme "*.mp4" ou avec un type MIME "video/mp4" sera tout simplement ignoré dans la liste des fichiers disponibles (alors que le serveur les envoie bien dans la liste), par ailleurs, pour une raison à l'origine inconnue, il n'était pas possible de transcoder, la freebox n'arrivant pas à récupérer le flux (qui fonctionnait en faisant mimer la freebox par XBMC ou VLC). La freebox a d'autres limitations mais je les laisse de côté car rien en théorie que le transcodage ne pourrait résoudre !

Je me suis donc mis en tête de faire fonctionner ce %#~$£^#"& de transcodage... Si la PS3 le fait il n'y avait pas de raison que la freebox (supportant plus de codec) ne le fasse pas ! Après quelques jours à triturer les profils, a lire des lignes et des lignes de logs de Plex. Il faut se rendre à l'évidence. Il n'y a rien à faire du côté serveur ! Le problème est exclusivement du côté client. J'ai donc ouvert un ticket sur le bugtracker de la Freebox HD mais sans grand espoir quand on voit le nombre de tickets ouverts en attente depuis des années !

Pour la petite histoire, Plex se base sur les champs d'entête et en particulier sur le champ HTTP "User-Agent" pour identifier le matériel qui lui parle. Or la freebox envoie bien une telle ligne lorsqu'elle parcours l'arborescence par l'énumérateur UPnP, mais une fois la ressource multimédia trouvée, elle va la chercher via une requête HTTP ne contenant pas ce fameux "User-Agent"... Résultat, Plex perd la notion du type de matériel qui lui parle et considère parler à un matériel "Generic", c'est à dire qui sait tout lire sans transcodage. N'ayant plus notion de destination de transcodage, l'accès aux ressources énumérées à l'étape précédent échoue lui aussi.

La solution propre est que la Freebox envoie toujours son User-Agent... et il n'y a hélas pas de solution sale car Plex ne fait pas de discrimination par adresse IP par exemple (normal, ca n'a pas de sens dans un réseau universal**Plug'nPlay** ou les IP peuvent varier sans prévenir à l'occasion d'un renouvellement de bail DHCP par exemple...).

Donc toi qui bosse chez Free au développement de la Freebox et qui passe par hasard ici, s'il te plait pourrais-tu rajouter une ligne dans "fbxupnpav" pour que le User-Agent soit envoyé lors de la demande d'un objet pour le streaming. Je t'assure, il y en a pour une ligne du genre

httpResponse.header("User-Agent","Linux/2.6 UPnP/1.0 fbxupnpav/1.0");

en fonction de ton langage de prédilection...

Note, si le source de fbxupnpav avait été libre, je l'aurais fait moi-même et je t'aurais même économisé ça...

Allez soit cool, vieux ! ;)

Je craque ou pas ?

Ubuntu en 3200x1800 et bien plus joli et pratique que win8.1 . Certes faut de bon yeux sur un 13" mais c'est tout à fait utilisable... Donc je sens que ça va imminer... Pour l'instant le seul hic c'est que j'aime bien travailler sur un HD neuf et garder celui d'origine dans un coin et là... ben  […]

Lire la suite

Un monnayeur en carton pour la borne en carton

Juste un petit post pour montrer le prototype du monnayeur de la borne d'arcade en carton. Il est réalisé à partir d'un petit colis reçu d'amazon, de chutes de carton simple cannelure et de papier standard (60g) Le papier est bien pour tester mais il s’abîme au passage des pièces, je le remplacerai  […]

Lire la suite

Le plus gros de la borne d'arcade est fini

Depuis la précédente note, la borne d'arcade en carton a bien avancé ; en fait, elle est fonctionnelle grâce à mon fidèle petit MSI U100 (et oui un Intel ATOM ça suffit même si le démarrage de MAMEUI est un "peu" lent). Voici donc les étapes encore à réaliser : Sécuriser la fixation de  […]

Lire la suite

Projet d'été avec ma descendance

En cet été 2013, l'une des activités de vacances avec Lucas sera la réalisation d'une MAMECab mais avec une optique : le moins de dépenses possible. Pour cela, elle sera réalisée au maximum avec du matériel de récup. Les seuls produits neufs seront : les joysticks, les boutons, l'encodeur USB et un  […]

Lire la suite

Premières taches d'administration après l'installation d'une image sur Raspberry Pi

Se logguer sur son R-Pi avec image Pisces Pour se logguer, je rappelle qu'il faut utiliser le compte "raspbian" avec le mot de passe "raspbian". L'image pisces a un serveur ssh fonctionnel dès le démarrage, c'est ce que j'utilise (mon R-Pi n'a ni clavier ni écran) Si vous  […]

Lire la suite

Quelques ordres S: (S12,S20,S21,S22,S23)

J'ai été très occupé ces derniers temps, pas eu trop le temps d'écrire les articles sur d'autres fonctions S:(end) de l'ELV Max! En voici quelques unes : ConfigValve (Commande 0x12) 00 00 01 Bitfield : 76543210 10 = broadcast (?) 02 12 COMMANDE 03 00 04 00 05 00 06 AABBCC Adresse d'émission 07 .. 08  […]

Lire la suite

ELV Max! commande "s:" syntaxe générale et commande de réglage des températures par défaut (0x11)

La commande "s:" sert à envoyer une commande (send en anglais quoi). Le format général est s:<chaine en base64> Pour illustrer voici la commande générée par la modification du décalage de température sur un thermostat dont l'adresse est 00fb6d. s:AAARAAAAAPttACoiPQkJGAM= Le décodage  […]

Lire la suite

ELV Max! Contenu de la ligne L:ive

A la différence des lignes de C:onfig qui sont aussi nombreuses qu'il y a de périphériques branchés, la ligne L:ive est unique. Tous les périphériques sont regroupés en une seule ligne. Par ailleurs il n'y a pas d'information sur le cube dans la ligne L: Interogation du cube On peut demander une  […]

Lire la suite

J'ai découvert une commande de plus sur ELV Max!, ben j'aurais préféré m'en passer... :)

Alors que je bidouillais le Cube via netcat, j'ai lancé quelques commandes de la forme <lettre><:><cr><lf> Et bien, ca m'a permis de découvrir à mon corps défendant la commande "a:" que l'on peut désormais surnommer "Reset sauvage de toute les  […]

Lire la suite

ELV MAX! Lignes Host (H:) et Maison (M:)

Revenons à l'étude de la réponse initiale du Cube Max! Le format le plus global est : un ensemble de lignes commençant toutes par une lettre suivie d'un "deux points" lui même suivi d'un contenu chaque ligne est terminée par un marqueur assez classique : cr/lf (carriage return/line feed)  […]

Lire la suite

ELV MAX! Début d'exploration

Je vais vous épargner le détail de la méthodologie mais pour faire simple. Il faut sniffer le réseau entre l'appli java qui réside sur l'ordinateur et le boîtier. Pour cela, j'ai fait brutal (parce que bien sur l'appli ne marche que sous Windows) : j'ai intercalé un ordi entre les 2, mis en place  […]

Lire la suite

Haut de page