Adding snapshot and readme contents
This commit is contained in:
parent
3a1bcfc65d
commit
8dfeab971c
13
README.md
13
README.md
|
@ -1,4 +1,15 @@
|
|||
ip-camera-proxy
|
||||
===============
|
||||
|
||||
PHP frontend to interface with cheap password-protected webcams and pull images for public display on a website.
|
||||
PHP frontend to interface with cheap password-protected webcams and pull images for public display on a website.
|
||||
|
||||
Copyright Will Bradley, 2012 (www.zyphon.com)
|
||||
Distributed under a Creative Commons Attribution 3.0 license
|
||||
http://creativecommons.org/licenses/by/3.0/
|
||||
|
||||
To use, change EXAMPLE.COM, the port number, EXAMPLEUSER, & EXAMPLEPASSWORD
|
||||
to their correct values for your setup. I use cheap Hootoo-brand cameras
|
||||
for my setup, yours may be different regarding snapshot urls and auth
|
||||
mechanisms. Then, host this on a PHP site and access it at
|
||||
/snapshot.php?camera=1
|
||||
|
||||
|
|
160
snapshot.php
Executable file
160
snapshot.php
Executable file
|
@ -0,0 +1,160 @@
|
|||
<?php
|
||||
/* IP Camera Proxy
|
||||
* PHP frontend to interface with cheap password-protected webcams and
|
||||
* pull images for public display on a website
|
||||
*
|
||||
* Copyright Will Bradley, 2012 (www.zyphon.com)
|
||||
* Distributed under a Creative Commons Attribution 3.0 license
|
||||
* http://creativecommons.org/licenses/by/3.0/
|
||||
*
|
||||
* To use, change EXAMPLE.COM, the port number, EXAMPLEUSER, & EXAMPLEPASSWORD
|
||||
* to their correct values for your setup. I use cheap Hootoo-brand cameras
|
||||
* for my setup, yours may be different regarding snapshot urls and auth
|
||||
* mechanisms. Then, host this on a PHP site and access it at
|
||||
* /snapshot.php?camera=1
|
||||
*
|
||||
*/
|
||||
|
||||
if($_GET['camera'] == 1)
|
||||
{
|
||||
$rand = rand(1000,9999);
|
||||
$url = 'http://EXAMPLE.COM:80/snapshot.cgi?'.$rand;
|
||||
|
||||
$curl_handle=curl_init();
|
||||
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);
|
||||
curl_setopt($curl_handle,CURLOPT_URL,$url);
|
||||
curl_setopt($curl_handle, CURLOPT_USERPWD, "EXAMPLEUSER:EXAMPLEPASSWORD");
|
||||
$buffer = curl_exec($curl_handle);
|
||||
curl_close($curl_handle);
|
||||
|
||||
if (empty($buffer))
|
||||
{
|
||||
print "";
|
||||
}
|
||||
elseif($buffer == "Can not get image.")
|
||||
{
|
||||
print "Can not get image.";
|
||||
}
|
||||
else
|
||||
{
|
||||
header("Content-Type: image/jpeg");
|
||||
print $buffer;
|
||||
}
|
||||
}
|
||||
elseif($_GET['camera'] == 2)
|
||||
{
|
||||
$rand = rand(1000,9999);
|
||||
$url = 'http://EXAMPLE.COM:81/snapshot.cgi?'.$rand;
|
||||
|
||||
$curl_handle=curl_init();
|
||||
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);
|
||||
curl_setopt($curl_handle,CURLOPT_URL,$url);
|
||||
curl_setopt($curl_handle, CURLOPT_USERPWD, "EXAMPLEUSER:EXAMPLEPASSWORD");
|
||||
$buffer = curl_exec($curl_handle);
|
||||
curl_close($curl_handle);
|
||||
|
||||
if (empty($buffer))
|
||||
{
|
||||
print "";
|
||||
}
|
||||
elseif($buffer == "Can not get image.")
|
||||
{
|
||||
print "Can not get image.";
|
||||
}
|
||||
else
|
||||
{
|
||||
header("Content-Type: image/jpeg");
|
||||
print $buffer;
|
||||
}
|
||||
}
|
||||
elseif($_GET['camera'] == 3)
|
||||
{
|
||||
$rand = rand(1000,9999);
|
||||
$url = 'http://EXAMPLE.COM:82/snapshot.cgi?'.$rand;
|
||||
|
||||
$curl_handle=curl_init();
|
||||
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);
|
||||
curl_setopt($curl_handle,CURLOPT_URL,$url);
|
||||
curl_setopt($curl_handle, CURLOPT_USERPWD, "EXAMPLEUSER:EXAMPLEPASSWORD");
|
||||
$buffer = curl_exec($curl_handle);
|
||||
curl_close($curl_handle);
|
||||
|
||||
if (empty($buffer))
|
||||
{
|
||||
print "";
|
||||
}
|
||||
elseif($buffer == "Can not get image.")
|
||||
{
|
||||
print "Can not get image.";
|
||||
}
|
||||
else
|
||||
{
|
||||
header("Content-Type: image/jpeg");
|
||||
print $buffer;
|
||||
}
|
||||
}
|
||||
elseif($_GET['camera'] == 9)
|
||||
{
|
||||
# Used to separate multipart
|
||||
$boundary = "IPCamBoundary";
|
||||
|
||||
# We start with the standard headers. PHP allows us this much
|
||||
header("Cache-Control: no-cache");
|
||||
header("Cache-Control: private");
|
||||
header("Pragma: no-cache");
|
||||
header("Content-type: image/jpeg");
|
||||
|
||||
# From here out, we no longer expect to be able to use the header() function
|
||||
print "--$boundary\n";
|
||||
|
||||
# Set this so PHP doesn't timeout during a long stream
|
||||
set_time_limit(0);
|
||||
|
||||
# Disable Apache and PHP's compression of output to the client
|
||||
@apache_setenv('no-gzip', 1);
|
||||
@ini_set('zlib.output_compression', 0);
|
||||
|
||||
# Set implicit flush, and flush all current buffers
|
||||
@ini_set('implicit_flush', 1);
|
||||
for ($i = 0; $i < ob_get_level(); $i++)
|
||||
ob_end_flush();
|
||||
ob_implicit_flush(1);
|
||||
|
||||
# The loop, producing one jpeg frame per iteration
|
||||
// while (true) {
|
||||
|
||||
|
||||
# Your function to get one jpeg image
|
||||
$rand = rand(1000,9999);
|
||||
$url = 'http://EXAMPLE.COM:81/GetData.cgi?'.$rand;
|
||||
|
||||
$curl_handle=curl_init();
|
||||
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);
|
||||
curl_setopt($curl_handle,CURLOPT_URL,$url);
|
||||
$buffer = curl_exec($curl_handle);
|
||||
curl_close($curl_handle);
|
||||
|
||||
if (!empty($buffer))
|
||||
{
|
||||
# Per-image header, note the two new-lines
|
||||
print "Content-type: image/jpeg\n\n";
|
||||
print $buffer;
|
||||
}
|
||||
else {
|
||||
print "Content-type: text/html\n\n";
|
||||
print "No image.";
|
||||
}
|
||||
|
||||
# The separator
|
||||
print "--$boundary\n";
|
||||
// }
|
||||
|
||||
|
||||
|
||||
}
|
||||
else {
|
||||
print "Error: No camera requested.";
|
||||
}
|
||||
|
||||
|
||||
?>
|
Loading…
Reference in New Issue
Block a user