La gestion de Camera avec Flex et les surprises de Google

Posted in Flex on mai 1st, 2009 by Ajrarn

… j’ai voulu tester dernièrement la gestion de ma webcam dans une application Flex.

Je me suis donc rendu sur les APIs de Adobe et ai découvert la méthode getCamera() de la classe flash.media.Camera. Selon les préconisations que j’y ai trouvé j’ai donc appelé bêtement cette méthode et l’ai attaché à un composant MXML VideoDisplay que j’ai identifié par la référence videoCamera :

var webcam:Camera = Camera.getCamera();
 
if(webcam) {
  videoCamera.attachCamera(webcam);
}
else {
  Alert.show("Vous ne semblez pas avoir de webcam."); 
}

Je lance mon application Flex et… rien. Le grand noir dans mon composant. Il semble donc que l’appli détecte quelque chose (sinon, j’aurai eu l’alerte) mais qu’elle ne m’affiche pas l’image…

Je vérifie les branchements de ma webcam, je la teste à travers une autre application. Aucun problème… Tout fonctionne normalement.

Je me dis que j’ai raté un truc et je me rends sur des sites qui fournissent des exemples d’applis utilisant la webcam comme celui-ci.

Idem.

Je décide donc de voir ce qui se passe sous le capot. Je rajoute notamment cette ligne de code pour voir quelles caméras sont détectées :

var cameraNames:ArrayCollection = 
                  new ArrayCollection(Camera.names);

Je passe en mode debug sur Flex Builder et là, surprise! L’appli ne me détecte pas une mais trois caméras! La première possède un libellé qui semble correspondre à la mienne et les deux autres sont : Google Camera Adapter 0 et Google Camera Adapter 1. De plus, il semble que, bizarrement, même si ma webcam est en première position dans la liste, ce soit le Google Camera Adapter 1 qui soit retourné par la méthode getCamera().

La surprise passée, je cherche un peu sur la toile et ne trouve que très peu d’infos sur ces 2 références. Il semble que lorsqu’on utilise GTalk pour dialoguer en vidéo, Google installe des composants sur votre ordinateur. Pas de quoi fouetter un chat, mais embêtant pour les applis Flex.

Je modifie donc mon code pour que la méthode getCamera() choisisse la première de la liste :

var webcam:Camera = Camera.getCamera("0");

Ca y est! Tout marche bien…

Vous trouverez ici un exemple dans lequel je liste les caméras détectées par Flex et demande de choisir celle qu’on souhaite utiliser pour afficher l’image.

Tags: , ,