Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungNächste ÜberarbeitungBeide Seiten der Revision | ||
webcam:mjpeg [2008/10/28 12:13] – gerald | webcam:mjpeg [2008/10/28 12:54] – gerald | ||
---|---|---|---|
Zeile 49: | Zeile 49: | ||
Das Plugin ist von der Firma ' | Das Plugin ist von der Firma ' | ||
+ | |||
+ | Ruby-Skript, | ||
+ | <code ruby> | ||
+ | # | ||
+ | |||
+ | # Script to extract images from the Hawking HNC230G | ||
+ | # | ||
+ | # Copyright (C) Tim Haynes | ||
+ | # HNC230G{at}stirfried.vegetable.org.uk | ||
+ | # | ||
+ | # Redistributable under the terms of the GNU Public License: see | ||
+ | # < | ||
+ | # | ||
+ | # Requires ruby, imagemagick | ||
+ | # | ||
+ | |||
+ | nopics=ARGV[1] || " | ||
+ | nopics=nopics.to_i | ||
+ | |||
+ | require ' | ||
+ | require ' | ||
+ | |||
+ | xsize, | ||
+ | |||
+ | puts " | ||
+ | |||
+ | s=TCPSocket.new(' | ||
+ | |||
+ | nopics.times { |n| | ||
+ | |||
+ | puts " | ||
+ | s.puts(" | ||
+ | |||
+ | len=s.read(2).reverse.unpack(" | ||
+ | 2.times {s.getc } | ||
+ | |||
+ | puts "Len: # | ||
+ | jpeg=s.read(len) | ||
+ | |||
+ | puts " | ||
+ | |||
+ | img=Magick:: | ||
+ | |||
+ | puts " | ||
+ | img.write(" | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | You can get images from your camera with my PHP script and a web server in the following form: | ||
+ | | ||
+ | |||
+ | <code php> | ||
+ | <? | ||
+ | |||
+ | | ||
+ | $pass = " | ||
+ | $ip = " | ||
+ | $port = " | ||
+ | |||
+ | // 120 byte | ||
+ | // 3x 0x00, | ||
+ | // 1x 0x01, | ||
+ | // user name | ||
+ | // 1x 0x00, | ||
+ | // password, | ||
+ | // Nx 0x00, | ||
+ | | ||
+ | " | ||
+ | (120 - 3 - 1 - strlen($login) - 1 - strlen($pass)), | ||
+ | " | ||
+ | // 120 byte | ||
+ | // 3x 0x00, | ||
+ | // 1x 0x0e, | ||
+ | // Nx 0x00, | ||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | | ||
+ | global $sock; | ||
+ | |||
+ | if ($sock) { | ||
+ | fclose($sock); | ||
+ | } | ||
+ | die($msg); | ||
+ | | ||
+ | |||
+ | | ||
+ | | ||
+ | $ret = fwrite($sock, | ||
+ | if (!$ret) { | ||
+ | error(" | ||
+ | } | ||
+ | if ($ret != $len) { | ||
+ | error(" | ||
+ | } | ||
+ | fflush($sock); | ||
+ | | ||
+ | |||
+ | / | ||
+ | | ||
+ | | ||
+ | $f = fopen($file, | ||
+ | if (!$f) { | ||
+ | error(" | ||
+ | } | ||
+ | $ret = fwrite($f, $data); | ||
+ | if (!$ret) { | ||
+ | error(" | ||
+ | } | ||
+ | fclose($f); | ||
+ | | ||
+ | | ||
+ | |||
+ | $sock = fsockopen(" | ||
+ | if (!$sock) { | ||
+ | error(" | ||
+ | | ||
+ | // 350ms | ||
+ | | ||
+ | |||
+ | | ||
+ | // | ||
+ | |||
+ | $ret = stream_get_contents($sock, | ||
+ | // | ||
+ | if (strlen($ret) != 120) { | ||
+ | error(" | ||
+ | | ||
+ | // | ||
+ | | ||
+ | if ($reply[1] != $login_ok_reply) { | ||
+ | error(" | ||
+ | | ||
+ | // | ||
+ | |||
+ | | ||
+ | // | ||
+ | |||
+ | // 6 fix byte | ||
+ | $ret = fread($sock, | ||
+ | if (!$ret) { | ||
+ | error(" | ||
+ | | ||
+ | // | ||
+ | $sig = unpack(" | ||
+ | if ($sig[1] != " | ||
+ | error(" | ||
+ | | ||
+ | // | ||
+ | |||
+ | // 2 byte: jpeg size. | ||
+ | $ret = fread($sock, | ||
+ | if (!$ret) { | ||
+ | error(" | ||
+ | | ||
+ | // | ||
+ | | ||
+ | | ||
+ | // | ||
+ | |||
+ | // 20 byte ???. | ||
+ | $ret = fread($sock, | ||
+ | if (!$ret) { | ||
+ | error(" | ||
+ | | ||
+ | |||
+ | // JPEG: $frame_size byte. | ||
+ | $ret = stream_get_contents($sock, | ||
+ | if (!$ret) { | ||
+ | error(" | ||
+ | | ||
+ | if (strlen($ret) != $frame_size) { | ||
+ | error(" | ||
+ | " | ||
+ | | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | ?></ | ||
+ | |||
+ | |||
+ | Uff! Finally, habs ichs rausgefunden: | ||
+ | < | ||
+ | // Bild: | ||
+ | http:// | ||
+ | // stream: | ||
+ | http:// | ||
+ | </ | ||
+ | |||
+ | Vom Hersteller EdiMax gibt es auch die Software als OpenSource ((http:// | ||
+ | |||
+ | Mit einer URL alle Parameter verstellen: | ||
+ | [[http:// | ||
+ | |||
+ | |||