Webcam Client/Serveur

Signaler
Messages postés
13
Date d'inscription
mercredi 14 janvier 2009
Statut
Membre
Dernière intervention
3 janvier 2010
-
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
-
Bonjour ,

Je souhaite créer un programme me permettant d'accéder a une webcam distante (pour faire cela je me suis servi des sources de Stepharcher que je remercie pour son travail ), j'ai donc créer une application client et une application serveur.



J'ai d'abord fait quelques tests sur mon pc avec le serveur pour voir si il se connecté correctement a la webcam et tout ce passe correctement :p , cependant le problème c'est que je ne sais pas trop quoi envoyer sur mon client pour qu'il puisse afficher ce que voit la webcam.


Ps : Je me sert de windows.h pour la plupart des fonctions ;)

Je poste les fonctions intéressante et espérant que vous pourrez m'aider :


La fonction permettant de se connecter a la webcam ( partie serveur ) :

void CWebCam::Connect()
{
// Connexion à la webcam
hWnd_WC = capCreateCaptureWindow("handle", WS_CHILD | WS_VISIBLE,
20, 35, 320, 240, hWnd, 1) ;

// Vérifie la connection
if(!capDriverConnect(hWnd_WC,0))
exit(0);

// trouve de DC
hDC_WC=GetDC(hWnd_WC);

}


La fonction permettant d'afficher ce que voit la webcam

void CWebCam::AfficheWebCam()
{
// Taille du preview = taille de la résolution
capPreviewScale(hWnd_WC,TRUE) ;

// Rafraichissement
capPreviewRate(hWnd_WC,15) ;

// Affiche
capPreview(hWnd_WC,1) ;


}


Pour transmission d'information entre le client et le serveur je me serte de la fonction :
int send(int socket, void* buffer, size_t len, int flags);




A part hWnd_WC je ne sais pas trop ce que je dois envoyer j'espère que vous pourrez m'aider .

Ps: J'ai conservé la plupart du code source de Stepharcher que vous pourrez trouvé ici http://www.cppfrance.com/codes/EXPLOITER-WEBCAM_24541.aspx

merci d'avance :p

2 réponses

Messages postés
13
Date d'inscription
mercredi 14 janvier 2009
Statut
Membre
Dernière intervention
3 janvier 2010

Up!!
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
3
Salut, à priori hWnd_WC est un handle vers une fenêtre pour afficher les frames: inutile d'envoyer cette adresse au client.
Il faut récupérer un pointeur vers les pixels du frame, il s'agit d'un tableau de unsigned char* ou char* mais personne ne fouillera dans le code de Stepharcher à ta place pour obtenir ce pointeur!

Pour rappel chaque pixel de l'image est composé de trois channels : rouge, vert, bleu les trois réunis formant la couleur du pixel. Les pixels sont les uns à la suite des autres donc ton tableau ressemble à RGBRGBRGBRGB...

Tu pourrais l'envoyer tel quel au client : si un frame tient sur moins de 1500 octets (comme une petite image noir & blanc à un seul channel voire compressée jpg, vaste sujet tout ça) tu devrais pouvoir l'envoyer en une seule trame en TCP (qui a dit UDP?).
Sinon tu peux ajouter un header à chaque paquet un peu comme HTTP ou mieux, calculer la différence avec le frame précédent pour ne transmettre que les différences, c'est comme ça que fonctionne la télé par adsl, et là encore il faut accéder aux pixels de l'image.