La plupart des caméras IP se commandent grâce à des requêtes GET. Mais il y a des rebelles qui n’acceptent que les requêtes POST… Et tout les logiciels de pilotage de caméra IP ne gèrent pas GET et POST.
Pour remédier à cela, trois solutions :
- Changer de caméras IP : Mauvaise idée… Ca coûte des sous !
- Changer de logiciel de pilotage : Re mauvaise idée, j’aime bien celui que j’utilise. Et ça coûte aussi des sous…
- Passer par un intermédiaire qui va convertir les GET du logiciel en POST pour la caméra : Voila une solution qui ne coûte pas chère !
L’intermédiaire en question est un hébergeur qui supportera l’exécution de fichier php (Free, OVH, un serveur perso chez soi, …).
Préparation
Créer le fichier cameraip.php :
<?php // // Exemple : // Pour le flux video : /cameraip.php&/MJPEG.CGI&123.123.123.123:1234 // Pour le controle : /cameraip.php&/PANTILTCONTROL.CGI&123.123.123.123:1234&PanTiltPresetPositionMove=3 // // En clair : // // /cameraip.php & /chemin & ipcamera:port & Parametre=valeur // // Il peut y avoir plusieurs paramètre mais doivent être séparés par un & // $a = explode( '&', $_SERVER['QUERY_STRING'], 3 ); if ( count( $a ) < 2 ) die; $path = $a[0]; $h = explode( ':', $a[1] ); $host = $h[0]; $port = isset( $h[1] ) ? $h[1] : 80; if ( count( $a ) == 2 ) // Si pas de paramètres : redirection simple { header( "Location: http://$host:$port$path" ); } else // Sinon convertion du GET en POST... { $params = $a[2]; $length = strlen( $params ); echo "<pre>"; echo "$host:$port$path -> $params\n"; if ( $fd = fsockopen( $host, $port, $errno, $errmsg ) ) { echo "Connecté à $host:$port\n"; $data = "POST $path HTTP/1.1\r\n". "TE: deflate,gzip;q=0.3\r\n". "Connection: TE, close\r\n". "Host: $host\r\n". "User-Agent: libwww-perl/5.834\r\n". "Content-length: $length\r\n". "Content-Type: application/x-www-form-urlencoded\r\n". "\r\n". "$params"; fputs( $fd, $data ); $ret = ''; while( !feof( $fd ) ) $ret .= fgets( $fd, 4096 ); fclose( $fd ); echo $ret; } else { echo "Connection impossible à $host:$port\n$errno : $errmsg"; } echo "</pre>"; } ?>
Placez ce fichier sur votre site web.
L’idée est simple, cameraip.php prends trois paramètres :
- Le chemin et fichier qui permet, soit de récupérer le flux vidéo (Ex : /MJPEG.CGI), soit de commander la caméra (Ex: /PANTILTCONTROL.CGI).
- L’adresse et le port de la caméra (cameraip.php ne la connait pas).
- Optionnel, les paramètres de contrôles (Mouvement, zoom, etc).
Utilisation
Prenons un exemple
- Votre site web est à l’adresse www.hebergeur.fr/monsite.
- Vous stockez cameraip.php à la racine de votre site.
- Vos caméras ip sont à l’adresse : chezmoi.dyndns.org avec comme port le 9001 pour la première, 9002 pour la deuxième… (Vous avez évidement fait les redirections de port adéquats).
- Le flux vidéo de vos caméras s’obtient par /MJPEG.CGI.
- Le pilotage de vos caméras se fait par l’intermédiaire de /PANTILTCONTROL.CGI suivi des diverses commandes.
Dans votre logiciel favori
- Adresse de la caméra IP :
www.hebergeur.fr
- Flux vidéo caméra 1 :
/monsite/cameraip.php?/MJPEG.CGI&chezmoi.dyndns.org:9001
- Commande 1 caméra 1 :
/monsite/cameraip.php?/PANTILTCONTROL.CGI&chezmoi.dyndns.org:9001&Commande=1
Commande=1 n’est qu’un exemple, adaptez en fonction de vos caméras.
Conclusion
En attendant que les caméras et les logiciels parlent tous la même langue, cette solution permet de patienter…
Laisser un commentaire