Archives Mensuelles: août 2009

J’ai détecté de nouvelles erreurs dans mon plug-in : la première étant que lorsque l’administrateur demandait le passage en focus d’un flux vidéo qu’il ne diffusait pas en local, ce flux se bloquait une fois qu’il était en focus. Mais cela fut aisément réglé, j’avais simplement oublié de relancer un flux vidéo après son rechargement. Le second problème était que, lorsque qu’un client se déconnectait alors que l’interface était en mode focus, cela provoquait une exception. Pendant la matinée et le début d’après-midi, je n’ai pas pu travailler sur cette exception car le reste de l’équipe effectuait des tests. j’en ai donc profité pour revoir quelque peu certains aspects de mon code qui ne me semblaient pas très bien codés. J’ai ensuite pu reprendre mes tests, et j’ai finalement trouvé à quoi était due mon exception. Cependant, maintenant que j’ai retiré la ligne de code qui posait problème, au moment de la déconnexion d’un client pendant le mode focus, une des vidéo de ce client continue d’être affichée. Je dois donc encore me pencher sur la résolution de ce problème.

Nicolas H. étant de retour, j’ai pu installer mon plug-in sur les deux ordinateurs que l’on m’a prêté pour mes tests. J’ai donc lancé un client sur mon ordinateur, et un autre sur un de ces ordinateur de test. Il s’est avéré qu’un ensemble de comportements anormaux se sont produits. Par exemple, le premier client lancé ne faisait pas apparaître les flux vidéo du second. Le second, lui, faisait apparaître les media players destinés à afficher les flux du premier, mais ne les diffusait pas. De plus, lorsque l’on passait en mode focus, et que l’on voulait revenir en mode par défaut, le seul terminal à revenir en mode par défaut était celui qui diffusait le flux sur lequel l’administrateur avait cliqué. Enfin, lorsqu’un des clients se déconnectait, une exception se produisait, et l’autre client ne retirait pas ses media player de l’interface. En-dehors du fait que le second client ne diffusait pas les flux du premier, toutes ces erreurs provenant de petites fautes bêtes qui furent très simples à résoudre. Le premier client ne faisait pas apparaître de flux supplémentaire à la connexion d’un nouveau client car je ne parcourais pas la bonne liste d’identifiants de clients. Quant au non-passage en mode par défaut, il était dû à un bout de code placé dans la mauvaise boucle.

Le problème de la non-diffusion des flux me semblait un peu plus complexe. En fait, il s’avérait que je n’envoyait pas assez d’informations, ou des informations érronnées à un client lorsqu’il se connectait, concernant les flux déjà existants qu’il aurait à diffuser. Mais cela n’était pas aussi difficile à résoudre que je l’aurais cru, car il me suffisait de reprendre le code que j’avais réalisé pour retransmettre les flux d’un nouveau client aux autres clients, et de l’adapter un tant soit peu. Le plug-in fonctionne maintenant comme souhaité. Cependant, je pense revoir cette partie du code, car il me semble qu’elle peut être très aisément simplifiée, et que cela rendrait le code plus propre et plus simple à comprendre. De plus, il serait préférable que j’effectue encore quelques tests afin de vérifier la robustesse de mon code.

Aujourd’hui, j’ai voulu installer mon plug-in sur deux autres ordinateurs, avec l’aide de Nicolas R. Malheureusment, nous ne réussissions pas à récupérer certaines informations, et Nicolas H. étant absent, il ne pouvait pas nous aider. J’ai donc, en attendant, nettoyé et commenté mon code.

J’ai achevé la partie focus aujourd’hui. Tout d’abord, Nicolas R. a effectué quelques modifications sur une de ses classes afin que je puisse m’en servir, ce qui a résolu mon problème de streaming de la caméra IP. Ensuite, je me suis rendu compte qu’il semblait y avoir un petit souci avec le passage en mode focus, car le framerate de la webcam ne changeait jamais. Je me suis finalement rendue compte que le code de ma fonction n’était pas bien ordonné et que le problème venait de là. J’ai également rencontré un problème de par le fait que lorque l’interface était en mode focus et que je voulais me déconnecter, une exception était lancée. Le problème venait en fait du code de mon interface, que j’ai donc modifié.

Puis j’ai voulu faire en sorte que ce soit bien le clic de la souris qui enclenche le mode focus (je m’étais jusque-là servie de boutons qui faisaient ce travail). Nicolas R. m’a conseillé, en attendant de faire plus proprement, de passer le client en paramètre de l’interface. Cela fonctionnait alors plutôt bien. Cependant, je me suis rappelée qu’il fallait que lorsque l’utilisateur clique sur la vidéo qui est déjà en mode focus, cela ramène l’interface au mode par défaut. J’ai donc fait en sorte que lorsq’un clietn reçoive un message indiquant le passage en mode focus d’une vidéo, il vérifie si celle-ci n’est pas déjà en mode focus, auquel cas il retourne en mode par défaut et la repasse dans son framerate d’origine.

Enfin, j’ai quelque peu modifié mon interface graphique pour qu’elle soit plus propre. J’ai retiré les boutons de test et j’ai modifié le calcul des dimensions de la fenêtre, car ceux-ci prennaient en compte toute la fenêtre de l’application au lieu de se restreindre à celle du plug-in.

J’ai continué de tenter de résoudre mon problème d’affichage de la caméra IP. Étant donné que je n’arrivais pas à afficher le flux dans mon plug-in, j’ai essayé de l’afficher simplement dans l’interface utilisée par le plug-in, sans aucune fonction spécifique si ce n’est celles dont on a besoin pour afficher un flux. Cela ne fonctionnait pas non plus. J’ai alors songé à reprendre l’application de tests que j’ai développée avant de commencer le plug-in. J’ai spécifié le chemin de la caméra IP, et j’ai réussi à l’afficher dans l’application de tests. J’ai donc recherché dans le code de cette application et de la boîte de dialogue qu’elle utilise pour déterminer les périphériques audio et vidéo à streamer, ce que j’avais bien pu omettre en codant mon plug-in pour que le flux n’apparaisse pas. Mais tout semblait bien correspondre à ce que je faisais. J’ai donc comparé les pipelines générées par mon plug-in à celles générées par l’application de tests, mais elles ne différaient pas grandement. Cependant, c’est à ce moment-là qu’une idée m’est venue : j’ai tenté de streamer le flux de ma caméra IP dans l’application test, mais SANS streamer un flux audio parallèlement. Cela ne fonctionnait pas. J’ai alors regardé la pipeline générée, et j’ai réalisé que bien qu’aucun flux audio n’était spécifié, la pipeline en prenait tout de même un en compte, ce qui bloquait tout, puisqu’il n’y avait aucune donnée audio à récupérer. J’ai donc signalé cela à Nicolas R., car cela m’empêche de progresser dans mon travail.

En attendant, j’ai “nettoyé” et un peu commenté mon code.

Nous avons terminé d’installer Debian sur ma machine Windows ce matin. Par la même occasion, nous avons installé Java, Eclipse, ainsi que les classes dont j’aurais besoin pour le projet. Nicolas R. nous a un peu présenté le projet, à Lorenzo et moi, et il m’a également expliqué comment développer un plug-in. J’ai passé le reste de la journée à étudier SWT et à tester de petits exemples.

Je rencontre toujours un problème avec l’affichage de mon flux vidéo sur IP. J’ai tenté de le résoudre toute la journée, mais en vain. Je ne vois vraiment pas à quoi peut être dû ce problème. Qui-plus-est, la pipeline permettant d’afficher ce flux fonctionne parfaitement en ligne de commande.

En attendant, j’ai mis le mode focus en place. Mais n’ayant qu’une seule vidéo à diffuser, mes tests sont assez limités et j’ai peur de passer à côté de quelque chose.

Enfin, en relisant le terminal de mon serveur, j’ai découvert qu’apparemment, entre deux sessions, la structure de donnés contenant les flux vidéo que le serveur devait recevoir ne se vidait pas, et une exception se produisait au moment de la déconnexion d’un client. J’ai finalement réalisé que ‘javais oublié de rattacher les écouteurs sur l’activité des clients aux objet client et serveur.

Je me penche actuellement sur un autre problème : lors de la déconnexion du client, un mediaPlayer reste affiché dans l’interface graphique, alors qu’en toute logique, ils devraient tous être supprimés. J’essaie donc de déterminer d’où provient le dernier mediaPlayer restant.

Aujourd’hui, j’ai commencé par réorganiser certaines parties de mon code de sorte à ce que le serveur envoie aux différents clients, avec les paramètres des flux qu’ils recevront, l’identifiant du flux qui les émet. Ainsi, lorsqu’un client se déconnecte, les autres clients pourront aisément identifier les flux à supprimer.

Puis j’ai voulu commencer à m’occuper de la gestion du passage en mode focus. Seulement, je rencontrait un problème avec le framerate. Avec l’aide de Nicolas R., j’ai fini par saisir mon erreur. Il fallait que je mette en place un système qui récupère de lui-même les sources vidéos qui y sont connectées, ainsi que les flux des caméras sur réseau. J’ai donc passé une certaine partie de l’après-midi à m’occuper de mettre en place ce système et à modifier mon code pour qu’il s’adapte à cela. Je streame désormais les flux de ma wecam et de ma caméra sur IP. Cependant, je n’arrive pas à afficher le flux de ma caméra sur IP. Son flux semble pourtant bien être streamé. Je cherche donc actuellement la cause de cette erreur.

Ce matin, j’ai enfin réussi à résoudre mon problème de streaming. Mon application arrive donc enfin de nouveau à streamer un flux vers le serveur et à réceptionner ce flux une fois qu’il est renvoyé. J’en ai profité pour “nettoyer” quelque peu mon code.

J’ai donc ensuite pu m’atteler à l’envoi automatique des flux du client vers le serveur lors de sa connexion. De même, je me suis occupée de l’arrêt et de la suppression de tous mediaPlayers du client lors de sa déconnexion, ainsi que de l’arrêt des mediaPlayers côté serveur, et enfin de la suppression de ce client des destinataires de tous les flux retransmis. Reste à stopper et supprimer les mediaPlayers d’un client déconnecté chez les autres clients, mais il semblerait que je doive apporter quelques modifications à mes structures de données pour cela. De plus, j’ai commencé à réfléchir un peu à la façon de mettre en place le passage en mode focus au niveau du client et du serveur.

Je n’arrive toujours pas à streamer les flux depuis la nouvelle version de mon code. J’ai découvert pas mal de lacunes dans mon code, par exemple de mauvaises données envoyées, etc… Je les ai corrigées, mais le problème persiste. Je suppose cependant qu’il doit venir d’un erreur de ce type qui m’aurait échappée.