27. 3. 2014

Webkamera za NAT / proxy serverom

Internetové pripojenie býva často limitované firemným proxy serverom, alebo NATom v domácich routeroch. Ak je navyše problém použiť ftp pripojenie pre upload obrázkov, jedným z riešení ako rozbehať webkameru je použiť webovú stránku s formulárom (funguje tak posielanie príloh vo webmailoch).



Štruktúru na vnútornej sieti možno rozdeliť na 2 rôzne stroje (nieje nutnosť):
  1. PC s webkamerou (blízo miesta umiestnenia kamery)
  2. server s php a prístupom na web
Vonkajšiu štruktúru tvorí webhosting, na ktorom bude umiestnená stránka webkamery dostupná z internetu.



PC s kamerou

Na PC s pripojenou kamerou je vhodné použiť windows, ak je kamera lepšie podporovaná (driver) pod týmto OS. Ako software pre pravidelné fotenie možno použiť rôzne voľne dostupné alternatívy, napr YAWCAM. Dôležité je ukladanie fotiek do zdieľaného adresára zo servera s php.

YawCam pridá timestamp priamo do jpg



Server s PHP


Na serveri sa spúšťa v minútových intervaloch (cron / scheduler) php so skriptom, ktorý prehliada zdieľaný adresár. Ak nájde novú fotku, nahrá ju http post príkazom na stránku webkamery umiestnenú na hostingu.

uploadovací php skript (neobsahuje kontroly na novú fotku):

<?php

// POZRI SUBOR
$files = scandir('D:\Parkovisko',1);
print($files[1]);

// UPLOAD
$ch = curl_init();
$header = array('Content-Type: multipart/form-data');
$data = array('MAX_FILE_SIZE' => '150000', 'userfile' => '@D:\Parkovisko\\'.$files[1]);

curl_setopt($ch, CURLOPT_URL, 'http://webkamera.ic.cz/upload/index.php');
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0);
curl_setopt($ch, CURLOPT_PROXY, 'proxy:8080');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'POST');
// curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;)");
curl_setopt($ch, CURLOPT_HTTPHEADER,array("Expect: "));

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

$premenna=curl_exec($ch);
// print_r($premenna);
?> 





Hosting


Na webovom hostingu sú dve komponenty:
  1. skript pre upload
  2. stránka zobrazujúca webcam

Skript pre upload by mohol byť kvôli bezpečnosti v inom adresári ako stránka s webcam. Zároveň by mal obsahovať základnú ochranu proti spamu (uploadu iných vecí ako JPG obrázkov).

skript pre upload:

<html>
<head>
</head>
<body>
<?php

// KONTROLA NA TYP ABY SEM NEPCHALI SPAM
if ($_FILES['userfile']['type'] == "image/jpeg") {

// KONTROLA NA VELKOST
if ($_FILES['userfile']['size'] > 0) {
$uploaddir = '/home/free/ic.cz/w/webkamera/root/www/webka/';
$uploadfile = $uploaddir . 'foto.jpg';

// KONTROLA NA USPESNY UPLOAD A MOVE
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "Success.\n";
// echo 'Ciel je <a href="http://webkamera.ic.cz/webka/foto.jpg">tu</a>'."\n";
   } else {
echo "Error in upload!\n";
if ($_FILES['userfile']['error'] == 2) {
echo "File too big.\n";
}
}

} else {
// ZLA VELKOST SUBORU
echo "Sorry, zero size.\n";
}
} else {
// ZLY TYP SUBORU
echo "Sorry, not allowed.\n";
}

// echo "\n\nHere is some more debugging info:";
// print_r($_FILES);
?>

</body>
</html>



Stránka zobrazujúca webcam môže byť jednoduchá statická html stránka s obrázkom. Dynamická verzia (php) prináša výhody v štatistike prístupov, dynamickom preformátovaní na mobilnú platformu. V prípade problémov s agresívnou cache je možné dynamicky meniť názov obrázka, aby sa pri každom zobrazení načítal určite znova.


Nastavenie cache 


Dobrým nápadom je zníženie cache (mod_expires) pre obrázky v danom adresári. Toto je možné pridaním kódu do súboru .htaccess (apache).


súbor .htaccess v adresári s fotkou (webhosting):
# zakazeme zobrazenie obsahu adresara
Options -indexes

# cacheovanie
<IfModule mod_expires.c>
ExpiresActive On

# expirovanie podla typu suboru, pocet sekund po accesse
ExpiresByType image/gif A600
ExpiresByType image/png A600
ExpiresByType image/jpg A20
ExpiresByType image/jpeg A20
ExpiresByType text/html A864000
ExpiresByType text/javascript A864000
ExpiresByType text/plain A864000
</IfModule>



Pri požiadavke na zobrazenie cez celú obrazovku napr. mobilného telefónu je možné použiť dynamické resizovanie obrázkov podporované štandardom HTML 4.01:

<img src='webka/foto.jpg' alt='webkam' width="100%">


Ako dosť dôležité sa javí nájsť vhodný pomer medzi kvalitou obrázku, časom refreshu a ich vplyvom na mesačný prenos dát. Podľa toho je vhodné nájsť si hosting, ktorý nebude mať problém s GB trafficom.


Žiadne komentáre:

Zverejnenie komentára