RÉCUPÉRER LES IMAGES D?UNE CAMERA IP TRANSMETTANT UN FLUX MJPEG

poldere Messages postés 69 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 12 août 2007 - 12 mars 2006 à 14:28
djmahdouch Messages postés 3 Date d'inscription dimanche 11 novembre 2007 Statut Membre Dernière intervention 4 février 2020 - 23 févr. 2012 à 14:50
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/36494-recuperer-les-images-d-une-camera-ip-transmettant-un-flux-mjpeg

djmahdouch Messages postés 3 Date d'inscription dimanche 11 novembre 2007 Statut Membre Dernière intervention 4 février 2020
Modifié le 4 févr. 2020 à 18:17
salut
Je me présente, Mahdi , étudiant en troisième année de Informatique, et actuellement en 23ème jour de stage de Projet fin d'étude.

Mon sujet porte sur la gestion d'une caméra IP de surveillance sous Android
Concrètement, je dois réaliser une application Android, permettant à l'utilisateur de pouvoir obtenir l'image sur son Tablet , que reçoit la caméra.
Mon problème actuel : récupérer l'image de la caméra, sur Android , création de la classe client (socket, les méthode de récupération de le flux vidéo )
Or, je me permets donc de vous demander un "petit coup de main", afin de savoir par quelle méthode avez vous pu récupérer l'image de la caméra ?
Si vous pouviez me renseigner, cela me serait d'une grande utilité pour la réalisation de mon projet de stage .
En vous remerciant.

MERCI . ......
SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011
12 juin 2009 à 08:07
Salut,

Il faudrait savoir de quel type de mpeg est ton flux d'abord ...
Par exemple certain type de mpeg ne renvois que les pixels qui ont
changé dans l'image par rapport à la précédente ...
Ce qui va engendrer de grosses modifications dans ce code.
Si ta caméra est une TrendNet Tv-IP 300 elle gère le lux MJPEG.
Et si ce n'est pas le cas, il existe du code LGPL chez trend Net:
http://www.trendnet.com/downloads/list_gpl.asp
Avec ça tu devrais pouvoir faire quelque chose de bien !
Bon courage ...
ALICE009 Messages postés 4 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 21 mai 2009
9 juin 2009 à 22:28
salut SEBLINCK ,
oui mon camera IP possède un serveur web intégré , le probleme que le flux transmit par la camera IP est MPEG et non pas MJPEG ?
pour l'adabtation du code :

const char* s=netFormat("GET /TRENDnet-cgi/mpeg/video.cgi?resolution="512 x 480"&fps="25" HTTP/1.1\r\nUser-Agent: HttpClient\r\nHost:"192.168.0.30"\r\nConnection:Keep-Alive\r\nCache-Control:no-cache\r\n\r\n");

est ce que c'est juste ?
SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011
9 juin 2009 à 21:58
Désolé ZOUZOUAG, je n'avais pas vu ta question.
Pour utiliser un client sur le réseaux local
comme source du flux, il faut soit connaitre
son protocole ( dans notre cas, protocole HTTP)
soit utiliser une API ou SDK fournissant une méthode.
Par exemple pour Axis:
Il faut lier le programme avec la lib de l'API,
puis appeller la méthode GetCurrentImage(...),
avec les paramètres qui vont bien. Et tu retrouves
ton image dans un buffer.Qu'il ne reste plus qu'a
pousser sur l'interface .
SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011
9 juin 2009 à 21:51
Salut,

Si ta caméra IP possède un serveur web intégré sur lequel tu peux te connecter,
pour visualiser le flux live en MJPEG, tu peux très simplement adapter ce code.
ALICE009 Messages postés 4 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 21 mai 2009
9 juin 2009 à 10:59
salut ,
je veux récupérer les images d'une camera IP 300 (512 x 480) est ce que je peux adapter ce code pour mon camera IP 300 TRENDnet ?

merci d'avance pour votre aide :)
zouzoualg Messages postés 3 Date d'inscription samedi 25 avril 2009 Statut Membre Dernière intervention 9 mai 2009
9 mai 2009 à 12:27
salut Seblink ,
merci de m'avoir répondu ,j'arrivais à compiler cet programme ,j'ai voulu essayer d'integrer cet programmme pour mon projet sur la detection des visages , Mais est ce que vous avez une idée si je peut récupère mon flux MJPEG non pas par une camera mais par un flux MPEG transmis par un client dans un réseaux local ?
merci d'avance pour votre aide :)
SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011
30 avril 2009 à 19:07
Salut,

Si Visual Studio 2008 ne trouve pas lalib GDI, c'est la loose...
Tu asfait quoi comme type de projet ?
zouzoualg Messages postés 3 Date d'inscription samedi 25 avril 2009 Statut Membre Dernière intervention 9 mai 2009
27 avril 2009 à 23:12
slt,
merci pour ton code , ce geniale comme idée , je voulus le compiler mais je trouver quelque deficulte ce qui conserne le linker , j'utilise visual studio C++2008 comme IDE et je ne trouve pas les lib suivants: libgdi32 libuser32 libole32 liboleaut32 libolepro32 libuuid dans mon IDE , et ce qui conserne libsock32 d'ou je peut le charger ?
merci d'avace pour votre aide :)
cs_Crepuscule3 Messages postés 24 Date d'inscription samedi 13 octobre 2007 Statut Membre Dernière intervention 25 novembre 2008
25 nov. 2008 à 08:06
Bonjour Youp_youp...

Pour ta question, lorsque j'étais encore sur mon projet de master 2, j'ai finis par réussir à récupérer les pixels dans un tableau que je pouvais traiter à ma guise.
Cela remonte maintenant à plus d'un an et je m'apprête à partir au travail, tout ce que je peux donc faire pour l'instant c'est te donner l'adresse d'un de mes messages sur ce forum où il me semble que je donne la solution (pour le cas d'une camera AXIS207MW utilisant un flux MJPEG).

http://www.cppfrance.com/forum/sujet-RECUPERER-IMAGE-DEPUIS-BUFFER_1043087.aspx

De mémoire, il me semble qu'il faut utiliser une fonction d'Axis genre GetCurrentImage(.. , .. , ..) avec les arguments qui vont bien, ce qui te récupère dans un buffer (qui a été passé en argument de la fonction) une image bitmap (dans le premier argument il me semble, si tu mets 1 ça fait du bitmap, si tu mets 0 ça fait du JPEG).

Je n'avais que 2 mois pour mon projet en plus des cours, je n'ai pas atteint le bout mais il ne me restait plus qu'à réafficher mes images traités dans une fenêtre.

J'espère que ça pourra t'aider.

Sinon, si tu veux plus d'info sur ce que j'avais fait en projet de master, recherche "Crepuscule3" sur ce forum, tu devrais trouver tous mes messages sur le sujet. Peut-être que ça t'aidera.

Cordialement,

Crepuscule3
youp_youp_ Messages postés 8 Date d'inscription mercredi 21 décembre 2005 Statut Membre Dernière intervention 18 novembre 2008
24 nov. 2008 à 21:02
up
youp_youp_ Messages postés 8 Date d'inscription mercredi 21 décembre 2005 Statut Membre Dernière intervention 18 novembre 2008
17 nov. 2008 à 18:00
Bonjour,

je souhaiterai savoir si l'un de vous à réussi dans cette mission qu'est la récupération des pixels de l'image?

Bonne soirée
SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011
3 juin 2008 à 11:17
Salut,
je travail sur une Axis 210, il est possible d'utiliser la même méthode que propose GSDevelop, mais il faut changer légèrement la requête ( ça va sans dire ).

"GET /axis-cgi/mjpg/video.cgi?resolution="320x240"&fps="25" HTTP/1.1\r\nUser-Agent: HttpClient\r\nHost:"192.168.10.50"\r\nConnection:Keep-Alive\r\nCache-Control:no-cache\r\n\r\n"

Voilà, sinon il est très facile de récupérer un flux M-jpeg en utilisant l'exemple AXIS,
mais comme le souligne Crepuscule3, il est assez difficile de faire un traitement derrière.
En revanche, la méthode fournis par AXIS est très bonne pour un enrgistrement de flux...
cs_Crepuscule3 Messages postés 24 Date d'inscription samedi 13 octobre 2007 Statut Membre Dernière intervention 25 novembre 2008
24 nov. 2007 à 09:07
Bonjour à tous,

je travaille actuellement sur une camera axis 207MW. Je souhaiterais faire un traitement d'image temps réel sur le flux MJPEG ou MPEG4 provenant de cette camera IP, dans le but de ne visualiser que les contours des objets filmés. Je possède actuellement un programme provenant de chez axis me permettant de relever le flux MJPEG. J'arrive donc à le visualiser mais je n'arrive toujours pas à trouver comment faire un traitement vidéo dessus (pour cela il me faudrait un accès aux pixels). Par ailleurs, je préciserai que les commandes utilisées pour afficher la vidéo sont des fonctions "InvokeHelper" de ActiveX ou DirectX je ne sais plus.
Si l'un d'entre vous a réussit à faire un traitement d'image sur un flux MJPEG, ou si quelqu'un a réussit à faire marcher le programme de cette page web, ou encore si quelqu'un sait comment utiliser le programme de chez axis, pourriez vous me donner un coup de main? Je galère vraiment depuis quelque temps.

Cordialement

Crepuscule3
kalidor86 Messages postés 1 Date d'inscription dimanche 19 novembre 2006 Statut Membre Dernière intervention 14 août 2007
14 août 2007 à 11:58
Salut à vous,

j'ai un problème avec la fonction netInit() à la compliation il me met une error comme quoi elle a besoin d'arguments (elle est appelée avec des arguments dans netSocket.h)
Or si je modifie la fonction dans le .h en lui virant les arguments , il la reconnait plus quand il doit aller la chercher dans la lib et me fait une erreur du type lnk2019.

Comme vous arruvez à le compiler je comprend pas d'où vient mon erreur.
pour info ,j'utilise Visual C++

Merci d'avance pour votre aide :)
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
5 mars 2007 à 11:53
Salut,
J'arrive pas a compiler tu peu me donner la lib netsoket STP
Nylsax Messages postés 14 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 11 mai 2009
29 janv. 2007 à 11:14
Salut je voudrai comprendre cette ligne de programme :
const char* s = netFormat ("GET /VIDEO.CGI HTTP/1.0\r\nUser-Agent: user\r\nAuthorization: Basic YWRtaW46REVVU1Q=\r\n\r\n") ;
Je sais pas comment tu apel ? netFormat ? d'ou il vient ?
Merci.
cs_isetcom Messages postés 2 Date d'inscription vendredi 14 avril 2006 Statut Membre Dernière intervention 14 décembre 2006
14 déc. 2006 à 21:19
salut
je suis un etudiant en informatique je suis entrient de travailler sur la videsurveillance ip. ce pendant j'ai un probleme avec la compilation de votre code il ne genére pas .exe si vous pouvez m'aidé je serais tres reconéssant. c'est tres urgent svp.
voila mon e-mail:mekki.ben-younes@laposte.net
merci d'avance..
je7ch Messages postés 4 Date d'inscription mardi 21 mars 2006 Statut Membre Dernière intervention 7 mai 2007
14 déc. 2006 à 20:55
salut
j'arrive à compiler votre code mais il ne veut pas s'executer.Bon il m'affiche le message suivant "fatal error C1010: unexpected end of file while looking for precompiled header directive
Error executing cl.exe."
j'ai besoin de votre aide s.v.p .C'est tres important.
merci
poseidon162 Messages postés 2 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 7 juillet 2006
7 juil. 2006 à 15:04
Salut a tous.

Deja bien ton code.
Moi je travailles avec une DCS-6620G mais je dois recuperer le flux video afin de l'afficher dans une frame.
Alors j'arrive a controler la camera au niveau rotation par contre impossible de recuperer le flux.
J'utilise ethereal pour recuperer la requete a envoyer mais lorsque je l'envoie j'ai une exception : "Le serveur a renvoyé une réponse non valide ou non reconnue".
Pourtant j'envoi la même requête qu'IE.

voila le code correspondant.

char *l_strHeaders2 = "User-Agent: VVTK (ver=40)\r\nAccept: */*\r\nHost: 10.226.144.238\r\n\r\n";
char *l_strObject2 = "/cgi-bin/downstream.cgi?SID=0";
m_pconnection = m_session.GetHttpConnection(l_strServeur, port , "VVTK (ver=40)");
m_pfile = m_pconnection->OpenRequest(CHttpConnection::HTTP_VERB_GET , l_strObject2,NULL , 1 , NULL , "HTTP/1.0");
if(m_pfile != NULL)
{
try
{
m_pfile->AddRequestHeaders(l_strHeaders2);
m_pfile->SendRequest(NULL,0,NULL,0);
}
catch(CInternetException *e)
{
char error[255];
e->GetErrorMessage(error,255);
}
catch(CException *e)
{
char error[255];
e->GetErrorMessage(error,255);
}
}

et voila la requete envoyé par IE vu par ethereal :
GET /cgi-bin/downstream.cgi?SID=0 HTTP/1.0

User-Agent: VVTK (ver=40)

Accept: */*

Host: 10.226.144.238

et voila la mienne :

GET /cgi-bin/downstream.cgi?SID=0 HTTP/1.1

User-Agent: VVTK (ver=40)

Accept: */*

Host: 10.226.144.238



alors je me dit que c a cause du HTTP/1.1 mais il me le met par defaut et je ne sais comment le passer en 1.0.

Si quelqu'un a une idée je vous serez vraiment reconnaissant.

Merci d'avance
sarkosichon Messages postés 1 Date d'inscription jeudi 29 décembre 2005 Statut Membre Dernière intervention 9 juin 2006
9 juin 2006 à 12:07
salut!
Merci pour ton code mais je n'arrive pas à le compiler. je ne trouve pas la lib plib. j'ai trouvé netSocket.h mais il me manque toujours des fichiers d'en tete. si tu peu m'aiguillé ou ziper ton repertoire include et le mettre sur le site ca serai bien sympa de ta part.
merci d'avance.
hugo_cpp Messages postés 8 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 17 août 2006
12 mai 2006 à 16:53
Slt,
Merci pour ton code, il est plutôt bien fait et surtout il marche!! Je l'ai adapter pour ma camera (Sony SNC-P1) car elle peut délivrer soit des MJPEG, soit du MPEG4. J'aimerai maintenant récupérer le flux MPEG4, pense-tu que c'est possible à partir de ton code? J'ai pas encore eu trop le temps de me pencher dessus mais si je trouve je te previens.
A+
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
18 avril 2006 à 11:10
Pour que ca marche il faut aussi linker avec libws2_32.a et libwsock32.a.
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
10 avril 2006 à 16:45
Salut
dans ton code, tu déclare
#define longMaxJpeg 16384 // longueur maximale d'une image jpeg reçue (suffisant pour du 320x200)
Comment tu trouve ton 16384, comment le caluler ? car moi j'utilise du 320x240.
Merci
poldere Messages postés 69 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 12 août 2007
14 mars 2006 à 11:16
concernat la vision binoculaire . . . . tu connait ce site http://www.fuzzgun.btinternet.co.uk/rodney/rodney.htm . Si ça peut t'aider il y a un bon projet et de bonnes sources.
cs_aerith Messages postés 54 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 12 mars 2006
14 mars 2006 à 11:11
J'ai commencer un algo de traitement d'image (il en est a la recherche de lignes complexes), sont but seras la vision binoculaire, en C+SDL...
Si tu arrive a me motivé je veux bien le continuer...

Je doit modifier cette recherche de ligne pour la rendre plus sensible, avec une notion d'intervale.

Je dev portable...
poldere Messages postés 69 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 12 août 2007
12 mars 2006 à 14:28
Salut! Tiens ! Tu travaille sur un robot ? Moi aussi. A l'occasion on pourra avoir un contact pour échange vocal. De mon coté je suis en VB , win XP et cam USB ( un peu différent n'est ce pas lol ). A plus . . .