Petite experimentation autour d’une Freebox

Hier soir, je n’arrivais pas à dormir… J’ai donc décidé de regarder la Freebox sur mon portable, en Wifi depuis mon lit…

Le problème en Wifi, c’est qu’il y a beaucoup trop de paquets perdus… et comme le flux est en UDP, ils ne sont pas retransmis… Donc, ça coupe tout le temps et on a toujours plein de gros carrés.

Je me suis donc mis en tête d’écrire un petit proxy RTSP vers HTTP. Mon postulat de départ est simple. En HTTP, grâce a une liaison TCP, la qualité devrait être meilleur, vu que les paquets perdus sont retransmis (en contrepartie, il faut un buffer pour pouvoir attendre que tout les paquet soient arrivé et dans l’ordre avant de les jouer, mais ça c’est le player qui s’en occupe…). D’autre part, le fait de disposer d’un flux http devrais permettre de lire le flux avec des players qui ne gèrent pas le RTSP (comme QuikTime Player ou des périphériques dédié). Enfin, je me suis dit que l’écriture d’un truc comme ça devait être simple est marrante…

J’ai donc commencé à essayer de le faire en C… Puis je me suis rappelé le nombre de lignes de code qu’il faut aligner avant de pouvoir mettre en place un socket, et aussi que la gestion des string était inexistante… J’ai donc décidé d’essayer d’écrire ça en python… Comme je viens de me mettre à ce langage, je me suis dit que ça pouvait être un bon exercice…

L’algorithme est plutôt simple :

  • On met en place un socket serveur pour attendre une connexion HTTP de la part du client
  • On récupère l’url demandé par le client, et on lui renvois le header de réponse
  • On se connecte à la Freebox, et on demande a jouer le flux demandé (via l’url)
  • On met en place un socket UDP prêt à recevoir le flux de la Freebox
  • Et enfin, on répète toutes les données envoyées sur le port UDP vers le client

Voilà le code que ça donne (Télécharger) :


Pour l’instant, VLC arrive à se connecter, le proxy se connecte à la Freebox et commence à répéter le flux… mais rien a ne s’affiche à l’écran…

Bon il était déjà 2h30 et maintenant, j’avais vraiment envie de dormir… Mission réussie… Je suis aller me coucher 😉

J’ai deux piste à creuser pour essayer de faire marcher ça : Vérifier que toutes les données sont bien retransmises (problème de taille de buffer, ou de vitesse (paquets dropé) par exemple), ou vérifier si je peux bien renvoyer le flux brute de cette façon, et s’il ne faut pas le convertir et el remettre en forme…

Affaire à suivre 😉

Update 12/02/2006 : J’ai débugé le script.
Update 21/02/2006 : Quelques modifications.

(3 commentaires)

  1. j’ai parcouru quelques ynes des pages de ton blg et j’adore 😉

  2. Bonjour
    Je suis intéressé par ton script, travailles tu toujours dessus ?
    merci

  3. Je n’utilise plus ce script… Mais je sais que des utilisateurs de XBMC l’ont utilisé et l’on fait évolué…

    Sinon, pour les dernières versions que j’ai fait ou pour d’autres approches pour régler le problème :
    http://www.puyb.net/index.php/?q...

Répondre à jerome Annuler la réponse

Votre adresse ne sera pas publiée.

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