begin process at 2010 02 10 06:39:29
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Périphériques

 > WEBCAM+ MICROSERVEUR HTTP = WEBCAM IP (INDY 9 ET INDY 10)

WEBCAM+ MICROSERVEUR HTTP = WEBCAM IP (INDY 9 ET INDY 10)


 Information sur la source

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Périphériques Classé sous :internet, webcam, http, serveur, indy Niveau :Débutant Date de création :22/07/2006 Date de mise à jour :26/08/2006 13:38:11 Vu / téléchargé :16 573 / 3 125

Auteur : jlen100

Ecrire un message privé
Site perso
Commentaire sur cette source (24)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Quoi de plus sympa de visualiser ce qui ce passe chez soi quand on est à l'autre bout du monde d’intégrer des images de sa caméra sur son site ou d’agir sur son ordinateur à distance ! !
Cette application a été réalisée en collaboration avec francky23012301.
Elle est destinée à être intégré au MODULE VIDEOSURVEILLANCE et si je la poste séparément du module c'est pour montrer combien il est facile d'intégrer quelques fonctionnalités WEB dans une application DELPHI en utilisant INDY.
Le principe est simple on met un petit serveur HTTP dans le PC quelques pages HTLM et il suffit de se connecter avec un navigateur (I.E ou FF) pour les visualiser en cliquant sur le lien du mail, ou en ouvrant son site ou encore en tapant l'adresse IP du PC (http://XX.XX.XX.XX/)
Le gros avantage du protocole HTTP c’est de ne pas nécessiter l’installation d’une application sur la machine cliente : le navigateur suffit.
C’est le script de la page qui assure le rafraîchissement de la page (1 fois/s à 1 fois/30s) pour la caméra en « live » on peut aller jusqu’à 10 images/s (attention à la bande passante de votre connexion internet).
En commande process on a une inter-activité entre le navigateur et le PC. Je n’ai mis que quelques commandes pour l’exemple mais vu la simplicité du procédé on peut imaginer bien d’autres applications.
La désactivation du compte est automatique.
j'ai rajouté la version INDY 10 elle est dans le répertoire INDY 10



 Conclusion

Comme généralement les adresses IP sont dynamiques nous y avons intégré la détection automatique, la transmission de l'adresse par mail la mise à jour des liens dans les pages WEB
Le composant IDHTTPserver gérant la connexion, le protocole et les comptes utilisateur la programmation du serveur est très particulièrement simple.
Il suffit de définir un petit interpréteur pour charger les pages ou les fichiers ainsi que les images dynamiques.
Comme j'utilise le composant Videocapture vous le trouverez dans la source : http://www.delphifr.com/codes/VIDEOSURVEILLANCE-CA MERAS-ENVOI-EMAIL-APPEL-TELEPHONIQUE_37687.aspx dans le répertoire composant
Il faut bien sur avoir INDY 9 installé. (ou INDY 10 pour la version indy10)
Par défaut utilisateur : 'moi' et mot de passe : '123456'.
Nota comme j'envoie des images issues de bitmap ce n'est pas de la vidéo qui est trop lourde en termes de flux (le débit montant « upload » étant généralement limité à 128k et cela même si vous avez une connexion à 10M )
Pour la version INDY 10 c'est comme d'habitude : unités manquantes ou renommées, propriétés introuvables et il a fallu également recréer la fonction ServeFile...
Par contre ceux qui disposent de la version DELPHI 2005 pourront créer les pages HTML directement avec DELPHI.

J’ai inclus 3 pages HTML :
1) Une page test.htm qui montre comment inclure des images dans un site ainsi que le lien sur la page privée
2) Une page Zoomlive.htm qui est PopUp qui est appelé quand on clique sur l’image il montre la façon de faire pour récupérer des images « vidéo »
3) Une page default.htm qui  donne la caméra en live et montre comment accéder aux fonctions process
Pour pouvoir transmettre les images à un site WEB public tout en conservant la confidentialité des autre données j’ai défini 2 espaces :

1) une zone publique ou seule les images sont accessibles depuis la toile (on peut désactiver cette possibilité en décochant l'option "toujours transmettre les images"

2)Une zone privée accessible uniquement par mot de passe qui permet d'agir sur le PC il suffit de mettre une page sur le site ayant un lien sur le serveur et que cette page soit présente dans la liste "serveur distant" onglet 'options internet (c’est la page "test.htm" de la démo) après saisie et validation du mot de passe le serveur envoie la page définie dans "Nom de la 1ère page" onglet Page WEB" elle doit être également dans la liste "serveur local" (double cliquer sur le nom) pour mise à jour.

Pour la zone publique toutes les pages faisant référence aux images ou à un lien sur le serveur local doivent être déclarées dans la liste "serveur distant".
Ces listes servent à mettre à jour les références images et les liens lors de la connexion du serveur après mise à jour ces fiches sont uplaodées sur le site par connexion FTP elles sont également sauvegardées en local pour permettre les tests sans avoir de site.
listes des variables JAVASCRIPT (à mettre en début de ligne)
var Host= --->pour les références images
var cadence= ---->pour le nombre d'images par secondes
Pour le lien il faut qu'il soit de la forme :
href=
C’est à dire pour un lien complet :
<a
href= "";---> il faut que href soit seul sur la ligne!!
target="_blank">Serveur</a>
si on veut que le rafraîchissement de la page soit réglé par le programme il faut mettre <meta http-equiv="Refresh" content="20"> en début de ligne
pour que les images soient rafraîchies en même temps que la page il faille mettre une fonction JAVASCRIPT:
function StartPage(){
//mette ici toutes les images de la page à rafraîchir
document.camera1.src="http://"+Host+"/" +"ImageCamera1";
Start();//uniquement si caméra live
}
et juste avant </body>
<script>StartPage();</script><!--doit être placé juste avant</body> -->
pour avoir des images "live"
if faut la fonction JAVASCRIPT
function NextImage()
{
indice = indice+1; // les navigateurs ne tenant pas compte des commandes meta no store et autres on est obligé de demander une image différente à chaque image ! ! ! ! !
//ici on met toute les images live
document.form1.sta.src="http://"+Host+"/"+ind ice+"ImageCamera"+NumCam;
}
function Start()
{
temps = temps+1;
if (temps < 2 ) {
setTimeout("Start()",1000/cadence);
} else
{
temps = 0;
NextImage();
Start(); //la boucle démarre !
}
}
J’ai préféré utiliser une fonction JAVASCRIPT Start() ; pour initialiser la page plutôt que la directive Onload dans le body qui présente des différences de fonctionnement entre les navigateurs.
Pour les commandes process il suffit de mettre une action dans onclick d’un bouton
onclick="document.location.href='?action=Nom_de_l 'action" le fait de ne pas mettre la page ni l'IP rappellera la page en cours.
pour renvoyer une valeur au navigateur il y a 2 solutions:
soit utiliser le php (je n'ai pas encore testé).
soit modifier des variables JAVASCRIPT dans la page HTML avant de la renvoyer.
C'est la solution que j'ai retenue pour l'instant. il suffit de déclarer la variable dans le script , de la mettre à jour dans le programme ensuite on l'affecte à la zone dans la fonction StartPage (voir la fiche default.htm pour la variable NumCam)
Attention quand on utilise une caméra « live » il est impératif de demander régulièrement un rafraîchissement de la page pour vider le cache.
Ne pas oublier de mettre le fichier inpout32.dll dans le répertoire de l’application



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

23 juillet 2006 09:19:49 :
correction du bug du au memo dans le tabsheet mais je n'ai pas tràs bien compris ce qu'il se passait
23 juillet 2006 15:31:27 :
Ajouter version INDY 10 (indispensable pour DELPHI 2005)
24 juillet 2006 16:55:10 :
ajouter en tête
26 août 2006 13:38:11 :
Ajouter compte public; Ajouter listes de pages HTML externes; Ajouter mis à jour des IP dans pages HTML externes Ajouter fonctions Process Ajouter Pages HTML pour exemple de caméra "live" inclusion d'image dans pages externes et commandes process

 Sources du même auteur

Source avec Zip Source avec une capture VIDEOSURVEILLANCE A 4 CAMERAS +ENVOI EMAIL+APPEL TELEPHONIQU...
RECHERCHE AUTOMATIQUE D'UN PORT SERIE
Source avec Zip Source avec une capture PILOTAGE 4 AXES POUR MOTEUR PAS A PAS + 4 SERVOS MOTEURS CC+...

 Sources de la même categorie

Source avec Zip Source avec une capture EXTRAIRE PÉRIPHÉRIQUE USB ( HOTPLUG ) par yanb
Source avec Zip Source avec une capture LOGICIEL INTERRUPTEUR MONDIAL USB par ced55957
Source avec Zip Source avec une capture RETIRER LES PÉRIPHÉRIQUES USB par yanb
Source avec Zip CHARGER ET ENVOYER DES DONNÉES VIA L'USB par ldesmartin
Source avec Zip Source avec une capture GESTION DU CLAVIER G15 DE LOGITECH par delphitness

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture LOGICIEL INTERRUPTEUR MONDIAL USB par ced55957
Source avec Zip Source avec une capture PARSER D'EN-TÊTE HTTP par ILP
Source avec Zip Source avec une capture DOWNLOADS HTTP EN MULTITHREAD AVEC INDY par JeremyLecouvert
AFFICHER, TELECHARGER DES IMAGES SE TROUVANT SUR INTERNET DA... par Mokost
Source avec Zip Source avec une capture TÉLÉCHARGEMENT DE MISES À JOUR AVEC INDY par Matt 261

Commentaires et avis

Commentaire de jlen100 le 23/07/2006 02:50:40

je viens de m'appercevoir d'un bug assez bizarre: lorsque le memo du tabsheet est masqué il n'est pas toujours mis à jour ce qui provoque en plus une erreur d'exécution lors de la sortie du programme (handle invalide) je corrigerai cela demain (enfin je remettrais ce memo hors du tabsheet.

Commentaire de jlen100 le 23/07/2006 09:21:17

le bug est corrigé mais j'avoue humblement ne pas avoir compris pourquoi ce memo disparraissait

Commentaire de Matt 261 le 23/07/2006 10:21:44

Excellent ! tout bonnement excellent ! Bravo à vous deux.

Commentaire de jlen100 le 23/07/2006 10:31:40

salut matt merci pour le commentaire.
j'en profite pour informer que la version INDY sra prête dans la journée.
C'est comme d'habitude des unités qui ont disparues ou ont été renommées, des propirétés introuvables et la fonction ServeFile qu'il a fallu recréer la M.. quoi!! Enfin je suis en train de finir les tests et ça devrait rouler
@+
jlen

Commentaire de jlen100 le 23/07/2006 15:35:20

voila qui est fait la version INDY 10 est disponnible

bonne prog

@+
jlen

Commentaire de cincap le 23/07/2006 17:39:21

Salut Jlen100,
Encore une fois Bravo, décidément tu n'arrêtes pas de nous surprendre.
Dans le projet actuel, je ne sais choisir qu'une de mes deux caméras, peut-être normal ?
Sinon le code est assez fluide.

Cincap alias Max

Commentaire de jlen100 le 23/07/2006 17:52:38

salut cincap,
Bon ce n'est pas normal, mais je vois de quoi cela vient: pour les tests j'ai forcé le choix sur la première caméra présente et je n'ai pas sauvegarder en fichier ini je corrige cela et je reposte
petite précision en indy9 si l'icone n'est pas présent cela plante je vais donc récupérer la fonction ServeFile de la version développée pour Indy 10 qui ne présente pas ce bug
@+
jlen

Commentaire de jlen100 le 24/07/2006 17:01:48

j'ai ajouté le choix de la webcam
@+
jlen

Commentaire de cincap le 28/07/2006 13:26:02

Bonjour Jlen100,

Concernant le module "Web", j'ai modifié la fonction de récupération de l'IP afin d'éviter de passer par le site qui communique un cheval de troie, soit l'adresse :(http://filezilla.sourceforge.net/misc/ip.php).

@+

Cincap

Commentaire de jlen100 le 28/07/2006 21:17:41

bonsoir
pour le cheval de Troie les anti virus le bloque (encore faut-il en avoir un et qu'il soit à jour mais pour les anxieux je modifierai la fonction getlocalIP en proposant 4 sites au choix:
function TFServer.GetLocalIp: string;
var HTMLSource:string;
  wsaData: TWSAData;
  addr: TSockAddrIn;
  Phe: PHostEnt;
  szHostName: array[0..128] of Char;
  BeginDelimit,EndDelimit:integer;
begin
  if RadioButton1.Checked then
  begin
try
    try
      if WSAStartup($101, WSAData) <> 0 then
        raise Exception.Create('Cannot initialize WSA');
      try
        if GetHostName(szHostName, 128) <> SOCKET_ERROR then
        begin
          Phe := GetHostByName(szHostName);
          if Assigned(Phe) then
          begin
            addr.sin_addr.S_addr := longint(plongint(Phe^.h_addr_list^)^);
            Result := inet_ntoa(addr.sin_addr);
          end;
        end;
      finally
        WSACleanup;
      end;
    except
      on e:Exception do begin
        Result:='Error: '+e.Message;
        raise;
      end else
        raise;
    end;
  finally
    //
  end;
  end;
  if RadioButton2.Checked then
  begin
  Try
    HTMLSource:=IdHTTP1.Get('http://checkip.dyndns.org/');
    delete(HTMLSource,1,pos(':',HTMLSource)+1);
    delete(HTMLSource,pos('<',HTMLSource),80);
    result:=HTMLSource;
  end;
  Except
//  Result:=false;
  end;
  if RadioButton3.Checked then
  Try
   result:=IdHTTP1.Get('http://filezilla.sourceforge.net/misc/ip.php');
//Dommage car la procédure était particulièrement simple!!!
  Except
//  Result:=false;
  end;
  if RadioButton4.Checked then// ce site m'a été proposé par francky
  begin
  Try
    HTMLSource:= IdHTTP1.Get('http://www.showmyip.com/fr/'); //On demande le contenu de la page et on le récupère dans HTMLSource
    BeginDelimit:=length(Copy(HTMLSource,1, Pos('Internet',HTMLSource)+ 9 ) );//);76 ,77
    EndDelimit:=length(Copy(HTMLSource,Pos('-->',HTMLSource)-1,Length(HTMLSource)));
    Result:=Copy(HTMLSource,BeginDelimit,Length(HTMLSource)-BeginDelimit-EndDelimit+1); //On extrait l'adresse IP de HTMLSource
  Except
//  Result:=false;
  end;
  end;
  IPServer.Text:=Result;//'Automatic Ip detection: '+
end;

@+
jlen

Commentaire de jlen100 le 29/07/2006 09:54:06

petit avatar dans le copié collé à remplacer par:
function TFServer.GetLocalIp: string;
var HTMLSource:string;
  wsaData: TWSAData;
  addr: TSockAddrIn;
  Phe: PHostEnt;
  szHostName: array[0..128] of Char;
  BeginDelimit,EndDelimit:integer;
begin
  if RadioButton1.Checked then
  begin
try
    try
      if WSAStartup($101, WSAData) <> 0 then
        raise Exception.Create('Cannot initialize WSA');
      try
        if GetHostName(szHostName, 128) <> SOCKET_ERROR then
        begin
          Phe := GetHostByName(szHostName);
          if Assigned(Phe) then
          begin
            addr.sin_addr.S_addr := longint(plongint(Phe^.h_addr_list^)^);
            Result := inet_ntoa(addr.sin_addr);
          end;
        end;
      finally
        WSACleanup;
      end;
    except
      on e:Exception do begin
        Result:='Error: '+e.Message;
        raise;
      end else
        raise;
    end;
  finally
    //StaticText1.Caption:='Automatic Ip detection: '+Result;
  end;
  end;
  if RadioButton2.Checked then
  begin
  Try
    HTMLSource:=IdHTTP1.Get('http://checkip.dyndns.org/');
    delete(HTMLSource,1,pos(':',HTMLSource)+1);
    delete(HTMLSource,pos('<',HTMLSource),80);
    result:=HTMLSource;
  Except
//  Result:=false;
  end;
  end;
  if RadioButton3.Checked then
  Try
   result:=IdHTTP1.Get('http://filezilla.sourceforge.net/misc/ip.php');
  Except
//  Result:=false;
  end;
  if RadioButton4.Checked then
  begin
  Try
    HTMLSource:= IdHTTP1.Get('http://www.showmyip.com/fr/'); //On demande le contenu de la page et on le récupère dans HTMLSource
    BeginDelimit:=length(Copy(HTMLSource,1, Pos('Internet',HTMLSource)+ 9 ) );//);76 ,77
    EndDelimit:=length(Copy(HTMLSource,Pos('-->',HTMLSource)-1,Length(HTMLSource)));
    Result:=Copy(HTMLSource,BeginDelimit,Length(HTMLSource)-BeginDelimit-EndDelimit+1); //On extrait l'adresse IP de HTMLSource
  Except
//  Result:=false;
  end;
  end;
  IPServer.Text:=Result;//'Automatic Ip detection: '
end;

@+

jlen

Commentaire de jlen100 le 29/07/2006 10:38:57

petit nota en passant : il faut également modifier le fichier .INI pour qu'il conserve la sélection!!
@+
jlen

Commentaire de jlen100 le 29/07/2006 10:54:38

pour sauvegarder la sélection du mode recherche de l'IP en fichier.INI

dans le Formclose rajouter:
  for i:=1 to 4 do
  begin
    if TRadioButton(FindComponent('RadioButton'+inttostr(i))).Checked then break;
  end;
.
.
.
  fIniFile.WriteInteger('Internet', 'ModeIP',i);
et dans le formCreate:

  i:= fIniFile.ReadInteger('Internet', 'ModeIP',1);
  TRadioButton(FindComponent('RadioButton'+inttostr(i))).Checked:=true;

@+
jlen

Commentaire de jlen100 le 26/08/2006 13:47:39

grosse mise à jour
suite à plusieurs demandes j'ai ajouté la possibilité de pouvoir transmettre les images à un site WEB ceci m'a amené à faire une zone publque et une zone privée j'en ai profité pour y ajouter la possibilité de commander le PC à distance Il y aun peu de HTML et de javascript désolé pour cette entorse à DELPHI!!

@+
jlen

Commentaire de cincap le 08/09/2006 06:36:52

Bonjour JLEN100,

Encore une nouvelle fois tu te surpasses dans cette version.

Bravo pour cette réalisation et pour l'ensemble de tes réalisations au profit de tous.

Cincap alias Max

Commentaire de cincap le 08/09/2006 13:21:26

J'ai oublié, il est impossible de noter ta source, cela ne fonctionne pas sur ce site.

Commentaire de Matt 261 le 08/09/2006 20:08:56

@ Cincap : tu peux recommencer, je viens de tester et ça marche.

Commentaire de jlen100 le 08/09/2006 20:43:57

merci pour la note

Commentaire de elbayad le 11/11/2006 15:38:40

J'ai testé ça marche très bien quand les machines sont sur un réseau local. De l'extérieur y'a pas d'images

Commentaire de nethacker le 05/03/2007 18:31:07

salut,
ta source est vraiment superbe juste un tout petit probleme !
dans la description principalement un mot dans le deuxieme paragraphe , première phrase !
a force d'ecrire vite t'a ecrit htlm au lieu de hmtl !
a part ca y'a rien à dire !

Commentaire de cincap le 05/03/2007 18:44:59

Bonsoir,

A ma connaissance, c'est bien le format HTLM ou HTM qui sont valides dans ce cas.

JLEN100 a raison, je ne comprends donc pas ton intervention avec un supposé format HMTL.

@+,

Cincap

Commentaire de Matt 261 le 05/03/2007 18:51:03

Salut,

le HTLM étant moins connu que le HTML, je pense que c'est simplement une erreur de la part de nethacker.

@+
Matt

Commentaire de cincap le 06/03/2007 09:34:42

Bonjour,

@ Matt261, après une vérification, en fait le format HTML ou HTM sont Ok, nethacker a donc raison si lui même n'avait pas commis l'erreur d'écrire "HMTL" qui est un format qui n'existe pas.

Par contre avec FrontPage, j'ai créé une page de test avec le format HTLM et il n'est pas reconnu par IE7.

Julen100 à peut être aussi fourché sur le nom.

Cela ne gène en rien la qualité de la source.

@+,

Cincap

Commentaire de jlen100 le 10/03/2007 00:31:08

bonsoir
pour le format HTML c'est effectivement une faute de frappe de ma part
Mea culpa

@+

jlen

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

cherche serveur HTTP 1.1 [ par jejecool ] Est ce que quelqu'un pourrait me donner un lien vers un composant de type serveur HTTP 1.1.merci! Indy HTTP Server [ par guiguikun ] Bonjour,comment puis-je faire pour désactiver les msgbox d'erreur du composant Indy HTTP Server ?un peu comme ErrorCode = 0 avec TServerSocket Ftp avec Indy [ par stailer ] Salut tout le monde,Je suis en train de faire un mini client ftp et j'ai un petit souci avec le composant indy tidftp.dans une boucle je liste chacun [Indy] Composant TIdPop3Server [ par baloo151 ] Bonjour,Je cherche à réaliser un simple serveur POP3 à partir du programme de démo fourni avec Indy.Je n'arrive pas à faire fonctionner la commande po Création de Serveur FTP avec idFTPServer. [ par PyroBruno ] J'aimerais savoir si qq'un dispose d'une source, d'un tutoriel autre que ceux qu'on trouve sur le site d'indy, ou de n'importe quoi d'autre pour perme Fonctionnement du Client Serveur avec les composants Indy [ par th3r1ddl3r ] Bonjour,je n'arrive pas à faire fonctionner les composants Indy IdTcpClient et IdTCPServer , impossible de me connecter à mon serveur. Peut on m'expli composant serveur http [ par MoveX ] voila, si quelqu un pouvait me dire un composant pour creer un serveur http assez simple de preference, ce serait gentil de m indiquer, et si possible Aide sur intégration serveur http [ par fredolau ] Bonjour,Je dois intégrer un serveur http dans une application delphi.Ce que je fais pour l'instant, j'utilise le débogueur d'application web dans mon connexion internet et TApdWinsockPort [ par pioonice ] BonjourVoila, mon appli se connecte à internet via un modem 56k.Je n'utilise pas les API windows.Je me connecte au serveur en utilisant un TApdWinsock Problem D'echanger interne entre client et serveur indy [ par Sylvainlefou ] SalutJe suis en train d'essayer de programmer un proxy http.Pour le moment j'ai traité les infos venus du client et j'ai appellé le serveur http qui m


Nos sponsors


Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,404 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales