{"id":700,"date":"2010-07-20T12:52:58","date_gmt":"2010-07-20T10:52:58","guid":{"rendered":"http:\/\/www.sbskl.com\/?p=700"},"modified":"2010-07-20T13:59:16","modified_gmt":"2010-07-20T11:59:16","slug":"camera-ip-commandee-en-post","status":"publish","type":"post","link":"http:\/\/www.sbskl.com\/?p=700","title":{"rendered":"Cam\u00e9ra IP command\u00e9e en POST"},"content":{"rendered":"<p>La plupart des cam\u00e9ras IP se commandent gr\u00e2ce \u00e0 des requ\u00eates GET. Mais il y a des rebelles qui n&rsquo;acceptent que les requ\u00eates POST&#8230;\u00a0<!--more-->Et tout les logiciels de pilotage de cam\u00e9ra IP ne g\u00e8rent pas GET <strong>et<\/strong> POST.<\/p>\n<p>Pour rem\u00e9dier \u00e0 cela, trois solutions :<\/p>\n<ol>\n<li>Changer de cam\u00e9ras IP : Mauvaise id\u00e9e&#8230; Ca co\u00fbte des sous !<\/li>\n<li>Changer de logiciel de pilotage : Re mauvaise id\u00e9e, j&rsquo;aime bien celui que j&rsquo;utilise. Et \u00e7a co\u00fbte aussi des sous&#8230;<\/li>\n<li>Passer par un interm\u00e9diaire qui va convertir les GET du logiciel en POST pour la cam\u00e9ra : Voila une solution qui ne co\u00fbte pas ch\u00e8re !<\/li>\n<\/ol>\n<p>L&rsquo;interm\u00e9diaire\u00a0 en question est un h\u00e9bergeur qui supportera l&rsquo;ex\u00e9cution de fichier php (Free, OVH, un serveur perso chez soi, &#8230;).<\/p>\n<h3>Pr\u00e9paration<\/h3>\n<p>Cr\u00e9er le fichier <strong>cameraip.php<\/strong> :<\/p>\n<pre class=\"brush:php\">&lt;?php\r\n\/\/\r\n\/\/ Exemple :\r\n\/\/ Pour le flux video : \/cameraip.php&amp;\/MJPEG.CGI&amp;123.123.123.123:1234\r\n\/\/ Pour le controle   : \/cameraip.php&amp;\/PANTILTCONTROL.CGI&amp;123.123.123.123:1234&amp;PanTiltPresetPositionMove=3\r\n\/\/\r\n\/\/ En clair :\r\n\/\/\r\n\/\/ \t\/cameraip.php &amp; \/chemin &amp; ipcamera:port &amp; Parametre=valeur\r\n\/\/\r\n\/\/ Il peut y avoir plusieurs param\u00e8tre mais doivent \u00eatre s\u00e9par\u00e9s par un &amp;\r\n\/\/\r\n\r\n\t$a = explode( '&amp;', $_SERVER['QUERY_STRING'], 3 );\r\n\tif ( count( $a ) &lt; 2 ) die;\r\n\r\n\t$path = $a[0];\r\n\r\n\t$h = explode( ':', $a[1] );\r\n\r\n\t$host = $h[0];\r\n\t$port = isset( $h[1] ) ? $h[1] : 80;\r\n\r\n\tif ( count( $a ) == 2 ) \/\/ Si pas de param\u00e8tres : redirection simple\r\n\t{\r\n\t\theader( \"Location: http:\/\/$host:$port$path\" );\r\n\t}\r\n\telse \/\/ Sinon convertion du GET en POST...\r\n\t{\r\n\t\t$params = $a[2];\r\n\t\t$length = strlen( $params );\r\n\r\n\t\techo \"&lt;pre&gt;\";\r\n\t\techo \"$host:$port$path -&gt; $params\\n\";\r\n\r\n\t\tif ( $fd = fsockopen( $host, $port, $errno, $errmsg ) )\r\n\t\t{\r\n\t\t\techo \"Connect\u00e9 \u00e0 $host:$port\\n\";\r\n\r\n\t\t\t$data = \"POST $path HTTP\/1.1\\r\\n\".\r\n\t\t\t\t\"TE: deflate,gzip;q=0.3\\r\\n\".\r\n\t\t\t\t\"Connection: TE, close\\r\\n\".\r\n\t\t\t\t\"Host: $host\\r\\n\".\r\n\t\t\t\t\"User-Agent: libwww-perl\/5.834\\r\\n\".\r\n\t\t\t\t\"Content-length: $length\\r\\n\".\r\n\t\t\t\t\"Content-Type: application\/x-www-form-urlencoded\\r\\n\".\r\n\t\t\t\t\"\\r\\n\".\r\n\t\t\t\t\"$params\";\r\n\r\n\t\t\tfputs( $fd, $data );\r\n\r\n\t\t\t$ret = '';\r\n\t\t\twhile( !feof( $fd ) ) $ret .= fgets( $fd, 4096 );\r\n\t\t\tfclose( $fd );\r\n\t\t\techo $ret;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\techo \"Connection impossible \u00e0 $host:$port\\n$errno : $errmsg\";\r\n\t\t}\r\n\t\techo \"&lt;\/pre&gt;\";\r\n\t}\r\n?&gt;\r\n<\/pre>\n<p>Placez ce fichier sur votre site web.<\/p>\n<p>L&rsquo;id\u00e9e est simple, <strong>cameraip.php<\/strong> prends trois param\u00e8tres :<\/p>\n<ol>\n<li>Le chemin et fichier qui permet, soit de r\u00e9cup\u00e9rer le flux vid\u00e9o (Ex : \/MJPEG.CGI), soit de commander la cam\u00e9ra (Ex: \/PANTILTCONTROL.CGI).<\/li>\n<li>L&rsquo;adresse et le port de la cam\u00e9ra (cameraip.php ne la connait pas).<\/li>\n<li>Optionnel, les param\u00e8tres de contr\u00f4les (Mouvement, zoom, etc).<\/li>\n<\/ol>\n<h3>Utilisation<\/h3>\n<h4>Prenons un exemple<\/h4>\n<ul>\n<li>Votre site web est \u00e0 l&rsquo;adresse <strong>www.hebergeur.fr\/monsite.<\/strong><\/li>\n<li>Vous stockez <strong>cameraip.php<\/strong> \u00e0 la racine de votre site.<\/li>\n<li>Vos cam\u00e9ras ip sont \u00e0 l&rsquo;adresse : <strong>chezmoi.dyndns.org<\/strong> avec comme port le <strong>9001<\/strong> pour la premi\u00e8re, <strong>9002<\/strong> pour la deuxi\u00e8me&#8230; (Vous avez \u00e9videment fait les redirections de port ad\u00e9quats).<\/li>\n<li>Le flux vid\u00e9o de vos cam\u00e9ras s&rsquo;obtient par <strong>\/MJPEG.CGI.<\/strong><\/li>\n<li>Le pilotage de vos cam\u00e9ras se fait par l&rsquo;interm\u00e9diaire de <strong>\/PANTILTCONTROL.CGI<\/strong> suivi des diverses commandes.<\/li>\n<\/ul>\n<h4>Dans votre logiciel favori<\/h4>\n<ul>\n<li>Adresse de la cam\u00e9ra IP :<\/li>\n<\/ul>\n<pre>www.hebergeur.fr<\/pre>\n<ul>\n<li>Flux vid\u00e9o cam\u00e9ra 1 :<\/li>\n<\/ul>\n<pre>\/monsite\/cameraip.php?\/MJPEG.CGI&amp;chezmoi.dyndns.org:9001<\/pre>\n<ul>\n<li>Commande 1 cam\u00e9ra 1 :<\/li>\n<\/ul>\n<pre>\/monsite\/cameraip.php?\/PANTILTCONTROL.CGI&amp;chezmoi.dyndns.org:9001&amp;Commande=1<\/pre>\n<p>Commande=1 n&rsquo;est qu&rsquo;un exemple, adaptez en fonction de vos cam\u00e9ras.<\/p>\n<h3>Conclusion<\/h3>\n<p>En attendant que les cam\u00e9ras et les logiciels parlent tous la m\u00eame langue, cette solution permet de patienter&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La plupart des cam\u00e9ras IP se commandent gr\u00e2ce \u00e0 des requ\u00eates GET. Mais il y a des rebelles qui n&rsquo;acceptent que les requ\u00eates POST&#8230;\u00a0<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[8,10,13],"class_list":["post-700","post","type-post","status-publish","format-standard","hentry","category-linux","tag-configuration","tag-materiel","tag-programmation"],"_links":{"self":[{"href":"http:\/\/www.sbskl.com\/index.php?rest_route=\/wp\/v2\/posts\/700","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.sbskl.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.sbskl.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.sbskl.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.sbskl.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=700"}],"version-history":[{"count":15,"href":"http:\/\/www.sbskl.com\/index.php?rest_route=\/wp\/v2\/posts\/700\/revisions"}],"predecessor-version":[{"id":879,"href":"http:\/\/www.sbskl.com\/index.php?rest_route=\/wp\/v2\/posts\/700\/revisions\/879"}],"wp:attachment":[{"href":"http:\/\/www.sbskl.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=700"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.sbskl.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=700"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.sbskl.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=700"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}