dimanche 18 janvier 2009

Screenshot du 18/01/2009

Voici une petite capture d’écran de la version 0.2.1.

Paquets Ubuntu et OpenSuse pour la version 0.2.1

Voilà juste pour vous informer que les paquets sont en ligne pour la version 0.2.1 :

http://www.freetuxtv.org/packages/

samedi 17 janvier 2009

Sortie de FreetuxTV 0.2.1

Ça y est voici enfin une nouvelle qui va ravir les utilisateur de Neuf-SFR, cette version corrige le problème avec le multiposte de SFR et ainsi que pour certaines WebTV.

Extrait du ChangeLog :
  • Support de la redirection d’une URL dans une playlist
  • Meilleure intégration du thème GTK dans la liste des chaînes
  • Ajout d’une couleur pour distinguer la chaîne en cours de lecture

dimanche 11 janvier 2009

Commit : Résolution du problème avec les chaînes Neuf

Hello,

Voilà enfin une bonne nouvelle pour les neufnautes, j’ai pu régler le problème qui empechait l’utilisation de FreetuxTV avec la playlist de SRF-Neuf. Je doit dire que j’ai bien galérer, les problèmes ne fesait que s’enchaîner, j’ai bien cru que j’y arriverai jamais, mais bon à force d’être obstiné parfois ça paye. ^^

Bon étant donné que j’ai eu mal de trouver des infos, je vais rentré un peu dans le détail ici, ça pourra peut être servir à d’autres développeurs.

Bon, prenons le problème à la source, on m’a informé à plusieurs reprises que FreetuxTV ne fonctionnait pas avec la playlist Neuf, alors qu’elle fonctionne très bien avec VLC. Bon n’ayant pas de connexion Neuf sous la main, je me suis demandé comment j’allais pouvoir trouver le problème. Heureusement, un internaute m’a informé qu’il y avait aussi un problème avec certaines WebTV, et c’était donc le cas avec la radio de France Info. Je suis donc parti la dessus pour résoudre ce problème.

Le problème est donc qu’en réalité les liens présent dans la playlist de Neuf, sont des liens vers d’autre playlist qui elles ne contiennent qu’un seul lien vers la bonne URL à lire. Le problème est donc que le fonctionnement de la libvlc 0.9, ne fait plus automatiquement cette redirection.

Plus techniquement, lorsqu’on créer un média avec libvlc_media_new qu’on ajoute ensuite dans le media player avec libvlc_media_player_set_media, j’ai pu constater que le média n’est effectivement parser qu’une fois qu’on lance la lecture du média. En effet, la libvlc se charge de détecter le type de média automatiquement, et le problème est qu’on ne peut pas le connaître à l’avance, et aucune fonction n’existe pour ça. Ainsi, quand on lancait la lecture d’une chaîne dans FreetuxTV dont l’url etait un flux vidéo, ça ne posait pas de problème la lecture se lancait, mais lorsqu’il s’agissait d’une playlist, la fonction libvlc_media_player_play parsait le média, mais ne fesait rien détectant que ce n’était pas un flux vidéo.

C’est là que j’ai commencer à me prendre la tête, je suis alors aller demander des informations sur le forum des developpeurs de VLC. On m’a alors informé qu’il y avait plusieurs méthodes. Soit utiliser libvlc_media_list_add_file_content sachant que cette méthode est déprécié, ou soit géré ça avec la liste les éléments fils qui sont crée à la lecture d’une playlist avec libvlc_media_subitems. Je me suis donc orienté vers la deuxième solution à mon goût plus propre, même si plus compliquer à gérer.

En effet, cette solution m’a obligé à utiliser le gestionnaire d’événement. En effet, le problème est que le lancement de la lecture d’un média est threader donc impossible de gérer ça directement après l’appel de la fonction de lecture. J’ai alors vu qu’il y avait un évenement libvlc_MediaSubItemAdded qui permet de détecter quand le parse du média ajoute un fils dans le média.

Étant donné qu’en pratique, il est possible qu’il y est plusieurs fils, j’ai décider pour simplifier que FreetuxTV lira toujours le premier des éléments fils.

J’ai donc réussi dans un premier temps a récupérer l’url dans de l’élément à lire, mais quand j’appelais alors ma fonction de lecture, je tombais alors dans ma console sur un problème du genre :

LibVLC fatal error locking mutex in thread 3010456464 at misc/variables.c:832: 22
Error message: Invalid argument at:
/usr/lib/libvlccore.so.0(vlc_pthread_fatal+0xb5)[0xb773dcc5]
Aborted

Et c’est ce point qui m’a bloqué pendant si longtemps. Je ne comprenais pas l’origine du problème. Et j’ai même été jusqu’a voir dans le code source de VLC pour comprendre ce qui ce passait. En effet, si j’ai bien compris, il y’a une sorte de vérification que le thread qui appele la fonction de lecture est le même que celui qui a créer l’instance de VLC. Et le problème dans FreetuxTV, c’est la couche GTK qui ajoute son thread principal (le fameux gtk_main). C’est encore un peu flou pour moi, mais le fait est qu’on ne peut pas directement mettre à jour la lecture sans passer par un evenement GTK. Après des heures et des heures de prise de tête, la solution que j’ai trouver est d’utiliser g_idle_add, qui permet d’envoyé une fonction utilisateur dans la boucle de gtk.

Et là, qu’elle fut ma joi de voir que ça marche. Bref, je sais pas si mon explication est bien clair car ça ne l’est déjà pas pour moi completement, mais bon j’espère que ça pourra servir à quelq’un qui peut se retrouver dans le même cas de figure que moi.

Voilà,

Je fais quelques petites modifications sur FreetuxTV, et ensuite je vous livre une nouvelle version, d’ici la fin de la semaine normalement. Encore un peu de patience ;).