Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > CyberWrt

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.05.2014, 18:10   #1
shveps
Junior Member
 
Регистрация: 03.05.2014
Сообщений: 22
Вес репутации: 0
shveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond repute
По умолчанию Видеонаблюдение MR3020 + C270 + Вебсервер

Прошло несколько недель и я решил отказаться от идеи построить видеонаблюдение на основе сервиса yandex-диск и Yandex-камеры.
"Пришла пора сделать свой контролируемый сервис, с автоматической записью кадров безо всяких сторонних сервисов" - подумал я, - листая способы установки WebDAV на вебсервер Апач...

Ну что же начнем.

Для начала нужен роутер MR3020 с прошивкой CyberWRT, вебкамера C270 (или другая поддерживаемая), а также хостинг сайтов с поддержкой PHP с поддержкой способа PUT для приема файлов.
У вас все это есть? тогда поехали дальше.

Устанавливаем драйвер вебкамеры на CyberWRT
Устанавливаем модуль пакеты
Устанавливаем пакет curl
Устанавливаем модуль Планировщик
Устанавливаем до кучи модуль Файловый менеджер
Устанавливаем модуль Терминал

Этого должно хватить.

Далее берем блокнот и создаем cam.php в котором должен быть этот код:
PHP код:
<?php
//Copyright Eurowebcart.ru
//under MIT License

$autorec=1;

$log_errors=1;
$log_auth=1;
$max_log_size=1048576//bytes

$max_photos=3000;

//cam init
$cams=Array (
"Моя комната|no url|rotate180|rec|",
"Парковка|http://online.yandexcamera.ru/yandex/show/3/image?|||",
);

//here is passwords for access cam view
$passwords=Array (
"Pasha"        =>"pass1",
"Andrey"    =>"pass2",
"Igor"        =>"pass3",
"Sasha"        =>"pass4",
);

$upload_pass="pass12345";

$salt="abcde12345"//your secret salt

$refresh_time=50//sec

$cam=doubleval(@$_GET['cam']);
$auth=0;
if(isset(
$_GET['pass'])) {$pass=$_GET['pass']; }elseif(isset($_POST['pass'])){ $pass=$_POST['pass']; }else {$pass="";}
if (!
preg_match('/^[a-zA-Z0-9-]+$/i',$pass)) { if ($pass!="") { $auth=2; } $pass="";}
if(isset(
$_GET['rec'])) {$rec=$_GET['rec']; }elseif(isset($_POST['rec'])){ $rec=$_POST['rec']; } else {$rec=0;}
if (!
preg_match('/^[0-9]+$/i',$rec)) { $rec=0;}
if(isset(
$_GET['up'])) {$up=$_GET['up']; }elseif(isset($_POST['up'])){ $up=$_POST['up']; } else {$up=0;}
if (!
preg_match('/^[0-9a-zA-Z_\.-]+$/i',$up)) { $up=0;}

function 
rotatelog() {
@
unlink("./cams/log3.txt");
@
rename("./cams/log2.txt""./cams/log3.txt");
@
rename("./cams/log1.txt""./cams/log2.txt");
@
rename("./cams/log.txt""./cams/log1.txt");
}
function 
camlog($error) {
global 
$log_errors;
global 
$max_log_size;
if(
is_dir("./cams")!=true) { mkdir("./cams",0755); }
if ( 
$log_errors==1) {
if (
filesize("./cams/log.txt")>$max_log_size) {
rotatelog();
}
$fp=fopen("./cams/log.txt","a");
fputs($fp,date("d.m.Y H:i:s",time()).$error\n");
fclose($fp);
}
echo 
$error;
}
function 
authlog($mes) {
global 
$log_auth;
global 
$ip;
global 
$max_log_size;
if(
is_dir("./cams")!=true) { mkdir("./cams",0755); }
if ( 
$log_auth==1) {
if (
filesize("./cams/log.txt")>$max_log_size) {
rotatelog();
}
$fp=fopen("./cams/log.txt","a");
fputs($fp,date("d.m.Y H:i:s",time()).$mes [IP: $ip]\n");
fclose($fp);
}
}
unset(
$t);
$t=explode("_",$up);
$up=doubleval(@$t[0]);
$u_pass=trim(@$t[1]);
unset(
$t);
if (
$up>0) {
if (
$u_pass==$upload_pass) {
reset ($cams);
$c=1;
$found_cam=0;
$enable_rec=0;
while (list(
$k,$v)=each($cams)) {
$o=explode("|",$v);
if (
$c==$up) {
$found_cam=1;
if (
$o[3]!="") { $enable_rec=1; }
}
$c++;
}
unset (
$k,$v,$o,$c);
reset ($cams);
if ( 
$found_cam==1) {
if (
$_SERVER['REQUEST_METHOD']=="PUT"){
if (
$enable_rec==1) {
$putdata fopen("php://input""r");
$f=0;
$dir="./cams/cam".$up;
if(
is_dir($dir)!=true) { mkdir($dir,0755); }
while (
$data fread($putdata1024)) {
if (
$f==0) {
@
unlink("$dir/image.tmp");
$p fopen("$dir/image.tmp""a");
}
@
fputs($p$data);
$f=1;
}
@
fclose($p);
fclose($putdata);
if (
file_exists("$dir/image.tmp")) {
$t=@file($dir."/count.txt");
$count=doubleval(trim(@$t[0]));
$count++;
if (
$count>=$max_photos) { $count=0; }
$fp=fopen($dir."/count.txt","w");
fputs($fp,"$count");
fclose($fp);
@
unlink($dir."/$count".".jpg");
@
rename ($dir."/image.jpeg"$dir."/$count".".jpg");
rename ($dir."/image.tmp"$dir."/image.jpeg");
}
echo 
"Success REC on CAM".$up."!";
exit;
} else {
camlog("Record on CAM".$up." is Disabled!");
exit;
}
} else {
camlog("Record Disable! Method do not PUT!");
exit;
}
} else {
camlog("This CAM is not found!");
exit;
}
} else {
camlog("Upload Password do not match!");
exit;
}
}

$hache=md5($_SERVER['HTTP_HOST'].$salt);
session_cache_limiter ('nocache');
session_name($hache);
session_start();
$sid=session_id();
$ids="s".md5($hache);
if (!isset(
$_SESSION[$ids])){$_SESSION[$ids]=0; }
$divst="";
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Cams by eurowebcart.ru</title>
<link href="http://getbootstrap.com/2.3.2/assets/css/bootstrap.css" rel="stylesheet">
<link href="http://getbootstrap.com/2.3.2/assets/css/bootstrap-responsive.css" rel="stylesheet">
<link href="http://getbootstrap.com/2.3.2/assets/css/docs.css" rel="stylesheet">
<link href="http://getbootstrap.com/2.3.2/assets/js/google-code-prettify/prettify.css" rel="stylesheet">
<!--[if lt IE 9]>
<script src="http://getbootstrap.com/2.3.2/assets/js/html5shiv.js"></script>
<![endif]-->
<script src="http://getbootstrap.com/2.3.2/assets/js/jquery.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-transition.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-alert.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-modal.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-dropdown.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-tooltip.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-popover.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-button.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-carousel.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/google-code-prettify/prettify.js"></script>
<?
if ($pass!="") {
if (
$pass=="exit") {
$_SESSION[$ids]=0;
} else {
$auth=2;
while (list(
$k,$v)=each($passwords)) {
if (
$v==$pass) {
$_SESSION[$ids]=1;
$auth=1;
$ip="udefined";
if (!empty(
$_SERVER['HTTP_CLIENT_IP'])) {
    
$ip $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty(
$_SERVER['HTTP_X_FORWARDED_FOR'])) {
    
$ip $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    
$ip $_SERVER['REMOTE_ADDR'];
}
authlog("User '$k' enter cam view");


}
}
}
}
if (
$auth==2) { $divst=" error"; }
unset (
$k,$v,$passwords);

if (
$_SESSION[$ids]==1) {


function 
savefoto ($camnum$data$rotate) {
if(
is_dir("./cams")!=true) { mkdir("./cams",0755); }
$dir="./cams/cam".$camnum;
if(
is_dir($dir)!=true) { mkdir($dir,0755); }
global 
$max_photos;
$dir="./cams/cam".$camnum;
$t=@file($dir."/count.txt");
$count=doubleval(trim(@$t[0]));
$count++;
if (
$count>=$max_photos) { $count=0; }
$fp=fopen($dir."/count.txt","w");
fputs($fp,"$count");
fclose($fp);
@
unlink($dir."/$count".".jpg");
rename ($dir."/image.jpeg"$dir."/$count".".jpg");
}

function 
img2data ($camnum$title=string,$req=string$rotate=string$rec=string$link=string) {
global 
$autorec;

if(
is_dir("./cams")!=true) { mkdir("./cams",0755); }
$dir="./cams/cam".$camnum;
if(
is_dir($dir)!=true) { mkdir($dir,0755); }
$o=@fopen($dir."/image.jpeg","r");
$cur=@fread($o,@filesize($dir."/image.jpeg"));
@
fclose($o);

$img="";
if (
$autorec==0) {
if (
$req) {
$req.=time();
if (
function_exists('curl_init')) {
$ch curl_init($req);
@
curl_setopt($chCURLOPT_HEADERFALSE);
@
curl_setopt($chCURLOPT_FOLLOWLOCATIONTRUE);
@
curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
$img curl_exec($ch);
curl_close($ch);
} else {
$img=file_get_contents($req);
}
}
} else {
$img=$cur;
}
if (
$img=="") {
return 
"<div style=\"padding: 5px;\"><i class=\"icon-facetime-video icon-white\"></i> <strong>$title</strong></div><div style=\"padding: 5px;\">No Signal</div>";
} else {

if (
$cur!=$img) {
if (
$rec!="") { savefoto($camnum,$img,$rotate);  }
$o=fopen($dir."/image.jpeg","w");
fputs($o,$img);
fclose($o);
$cur=$img;
}
}
$rclass="";
$rico="";
$rscr="parent.document.getElementById('modalimg').className='';";
$l1="";
$l2="";
if (
$link!="") { $l1="<a href=\"$link\" target=\"blank\">"$l2="</a>"; }
if (
$rotate!="") { $rclass="class=$rotate"$rscr="parent.document.getElementById('modalimg').className='$rotate';"$rico="<i class=\"icon-repeat icon-white\" title=\"$rotate\"></i>";}
if (
$rec!="") { $rico.="<div class=pull-right>$l1<img border=0 src=\"data:image/gif;base64,R0lGODlhEAAQAIABAP8AAP///yH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0i".
"VzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj".
"4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv".
"IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG".
"9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Rjk0NjFCQUZFMDQwMTFFMzgzRkVBREZDRkI5NTA0NEQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Rjk0NjFCQjBFMDQwMTFFMzgzRkVBREZDRkI5NTA0".
"NEQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGOTQ2MUJBREUwNDAxMUUzODNGRUFERkNGQjk1MDQ0RCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGOTQ2MUJBRUUwNDAxMUUzODNGRUFERkNGQj".
"k1MDQ0RCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHA".
"v769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5OD".
"c2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAkyAAEALAAAAAAQABAAAAIhjI+pAQ17nHxqzmQtytdwzXySJzpkSYXiVmLfwkFnKtcFACH5BAUyAAEALAAAAAAQABAAAAIOjI+py+0P".
"o5y02ouzPgUAOw==\"><font color=white>REC</font>$l2</div>";}

$data=base64_encode($cur);


$r="<div style=\"padding: 5px;\">$rico<i class=\"icon-facetime-video icon-white\"></i> <strong>$title</strong> ".date("H:i:s",time())."</div><a href=\"#fullscreen\" title=\"Fullscreen\">";
if (
$link=="") {
$r.="<img onclick=\"parent.document.getElementById('modalframe').innerHTML='';
parent.document.getElementById('modalimg').className='';
parent.document.getElementById('modalimg').src=this.src;
parent.document.getElementById('myModalLabel').innerHTML='"
.str_replace("'""",str_replace("\""""strip_tags($title)))."';
parent.document.getElementById('modalframeTx').className='hidden';
"
.$rscr."parent.$('#myModal').modal('show');\"";
} else {
$r.="<img onclick=\"parent.document.getElementById('modalframe').innerHTML='<iframe class=preview src=".$link."></iframe>';
parent.document.getElementById('modalimg').className='hidden';
parent.document.getElementById('myModalLabel').innerHTML='"
.str_replace("'""",str_replace("\""""strip_tags($title)))."';
parent.document.getElementById('modalframeTx').className='hidden';
parent.$('#myModal').modal('show');\""
;
}
$r.=" id=cam".$camnum." src=\"data:image/jpeg;base64,".$data."\" style=\"cursor: zoom-in;\"".$rclass." /></a>";
return 
$r;
}



if (
$cam==0) {
if (
count($cams)>0) {
$camnum=1;
echo 
"<style>
.ml {
margin-left: 10px;
}
.mr {
margin-right: 10px;
}
.hidden {
display: none;
visibility: hidden;
}
.frame {
margin-right: 5px;
margin-bottom: 5px;
width: 320px;
height: 270px;
overflow: hidden;
}
.preview {
position: absolute;
width: 100%;
height: 100%;
overflow: hidden;
border: none;
}
.rotate180 {
     -moz-transform:    rotate(180deg)
                         scale(1);
     -o-transform:      rotate(180deg)
                         scale(1);
     -webkit-transform: rotate(180deg)
                         scale(1);
     transform:         rotate(180deg)
                         scale(1);
}
.modal {
    position: fixed;
    top: 1%;
    left: 25%;
    z-index: 1050;
    min-width: 50%;
    max-width: 100%;
    height: 90%;
    margin-left: 0px;
    background-color: #FFF;
    border: 1px solid rgba(0, 0, 0, 0.3);
    border-radius: 6px;
    outline: medium none;
    box-shadow: 0px 3px 7px rgba(0, 0, 0, 0.3);
    background-clip: padding-box;
}
.modal-body {
    height: 100%;
    padding: 0px;
    overflow-y: auto;
}
</style></head><body style=\"padding:10px; margin:0; color:#000; background-color:#fff;\"><div class=well>
<a href=\""
.$_SERVER['PHP_SELF']."?pass=exit\" class=\"btn btn-info pull-right mr\" style=\"margin-left: 10px;\"><i class=\"icon-off icon-white\"></i> Exit</a>
"
;
echo 
"<script>
var timerId;
function update() {
  var date = new Date();
  var seconds = date.getSeconds();
  if ((seconds/5)==Math.floor(seconds/5)) { $('#modalframeAr').load('cams/log.txt?'+microtime()); }
}

function clockStart() {
  if (timerId) return;
  timerId=self.setInterval(function(){update()},500);
}

function clockStop() {
  clearInterval(timerId);
  timerId = null;
}


clockStart();
var now = new Date().getTime();
now=parseInt(now);
function microtime() {
    var s = new Date().getTime();
    return Math.round("
.time()."+s-now);
}
function showcamlog() {
document.getElementById('modalframe').innerHTML='';
document.getElementById('modalimg').className='hidden';
document.getElementById('myModalLabel').innerHTML='Log';
$('#myModal').modal('show');
document.getElementById('modalframeTx').className='mr ml';
$('#modalframeAr').load('cams/log.txt?'+microtime());
}
</script>
<a href=\"#\" class=\"btn pull-right mr\" style=\"margin-left: 10px;\" onclick=showcamlog();><i class=\"icon-user\"></i> Auth Log</a>"
;

while (list(
$k,$v)=each($cams)) {
echo 
"<iframe class=\"thumbnail pull-left frame\" src=\"".$_SERVER['PHP_SELF']."?".SID."&cam=$camnum\"></iframe>";
$camnum++;
}
echo 
"<div style=\"clear: both;\"></div></div>";
echo 
" <!-- Modal -->
    <div id=\"myModal\" class=\"modal hide\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\">
    <div class=\"modal-header\">
    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\">&times;</button>
    <h3 id=\"myModalLabel\" style=\"color: #000;\"></h3>
    </div>
    <div class=\"modal-body\">
    <p><img id=modalimg /><span id=modalframe></span><span id=modalframeTx class=hidden><textarea cols=10 rows=10 id=modalframeAr style=\"width: 90%;\"></textarea></span></p>
    </div>
    </div>"
;
} else {
echo 
"No cams detected!";
}
} else {
if (
$rec==0) {
echo 
"<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"".($refresh_time+$cam).";URL=".$_SERVER['PHP_SELF']."?".SID."&cam=$cam\">";
}
echo 
"<style>
.hidden {
display: none;
visibility: hidden;
}
.ml {
margin-left: 10px;
}
.mr {
margin-right: 10px;
}
.rotate180 {
     -moz-transform:    rotate(180deg)
                         scale(1);
     -o-transform:      rotate(180deg)
                         scale(1);
     -webkit-transform: rotate(180deg)
                         scale(1);
     transform:         rotate(180deg)
                         scale(1);
}
"
;
if (
$rec!=0) {
echo 
".carousel-fade .carousel-inner .item {
  opacity: 0;
  -webkit-transition-property: opacity;
  -moz-transition-property: opacity;
  -o-transition-property: opacity;
  transition-property: opacity;
}
.carousel-fade .carousel-inner .active {
  opacity: 1;
}
.carousel-fade .carousel-inner .active.left,
.carousel-fade .carousel-inner .active.right {
  left: 0;
  opacity: 0;
  z-index: 1;
}
.carousel-fade .carousel-inner .next.left,
.carousel-fade .carousel-inner .prev.right {
  opacity: 1;
}
.carousel-fade .carousel-control {
  z-index: 2;
  background: none;
  border: none;
}
html,
body,
.carousel,
.carousel-inner,
.carousel-inner .item {
  height: 100%;
  width: 100%;
  overflow-y: hidden;
}
.carousel-caption {  background: none; text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.8); }
"
;
}
echo 
"
</style>
</head><body style=\"padding:0; margin:0; color:#fff; background-color:#000;\">"
;

$camnum=1;
while (list(
$k,$v)=each($cams)) {
if (
$camnum==$cam) {
$t=explode("|"$v);

if (
$rec==0) {
echo 
img2data($cam,$t[0],$t[1],$t[2],$t[3],$_SERVER['PHP_SELF']."?".SID."&cam=$cam&rec=1");
} else {
$recs=Array();
$ff=0;
$rdir="./cams/cam".$cam;
$rst="";
if (
$t[2]!="") { $rst=" class=".$t[2];}
if (
$handle opendir($rdir)) {
    while (
false !== ($fn readdir($handle))) {
    if (
substr($fn,-4)==".jpg") {
        
$recs[filemtime($rdir."/".$fn)]=$fn;
        
$ff++;
        }
    }
}
closedir($handle);
echo 
"<div id=\"myCarousel\" class=\"carousel carousel-fade\" data-interval=\"100\" data-pause=\"hover\">
<div class=\"carousel-inner\">"
;
$z=0;
if (
$ff>0) {
ksort($recs);
$a="";
array_reverse($recs);
reset($recs);
$c=count($recs);
while (list(
$k1,$v1)=each($recs)) {
echo 
"<div class=\"item\">
<img"
.$rst." src=\"cams/cam".$cam."/".$v1."\">
<div class=\"carousel-caption\">Frame <b>"
.($z+1)."/".($c+1)."</b> ".date("d.m.Y H:i:s"doubleval($k1))."<a class=\"pull-right\" href=\"".$_SERVER['PHP_SELF']."?".SID."&cam=$cam&rec=1\" title=\"Refresh scene\"><font color=white><i class=\"icon-refresh icon-white icon-large\"></i></font></a>
</div>
</div>"
;
$z++;
}
}
echo 
"<div class=\"item active\">
<img"
.$rst." src=\"cams/cam".$cam."/image.jpeg?".time()."\">
<div class=\"carousel-caption\"><b>NOW</b> "
.date("d.m.Y H:i:s"time())."<a class=\"pull-right\" href=\"".$_SERVER['PHP_SELF']."?".SID."&cam=$cam&rec=1\" title=\"Refresh scene\"><font color=white><i class=\"icon-refresh icon-white icon-large\"></i></font></a>
</div>
</div>
</div>
    <a class=\"carousel-control left\" href=\"#myCarousel\" data-slide=\"prev\">&lsaquo;</a>
    <a class=\"carousel-control right\" href=\"#myCarousel\" data-slide=\"next\">&rsaquo;</a>
    </div>"
;
}
}
$camnum++;
}
}



} else {
echo 
"</head><body style=\"padding:10px; margin:0; color:#000; background-color:#fff;\">
<div class=\"well\" align=center>
<script type=\"text/javascript\">
function submit_auth(e)
{
    if (e.keyCode == 13)
    {
        document.getElementById('form').submit();
        return false;
    }
}

</script>
<form action=\""
.$_SERVER['PHP_SELF']."\" id=form method=POST>
<input type=hidden name=cam value=
$cam>
<div class=\"control-group"
.$divst."\">
<br>
<h3>Enter Password:</h3>
<br><input type=password name=pass value=\"\" placeholder=\"password\" onkeyup=\"submit_auth(event);\" autocomplete=\"off\">
<br><br></div>
</form>

</div>"
;
}
?>
</body></html>
Главное - указать настройки, $upload_pass="XXXXXXXX"; а также соль $salt="YYYYYY";
Указывать надо применяя только англ буквы и цифры

в списке камер надо указать название камеры, URL на yandexcamera (если есть), надо ли переворачивать на 180 градусов и флаг записи. Советую с Яндекс камер не ставить флаг записи, а с других, без URL которые - поставить.

Соответственно если у вас одна камера - то ставьте что то вроде этого:

PHP код:
$cams=Array (
"Моя комната||rotate180|rec|",
); 
после чего сохраняем и закачиваем к себе на сайт в корневую www папку и проверям что работает, для чего набираем в браузере http://ВАШСАЙТ/cam.php

Ели вы видите окошко ввода пароля, то поздравляю полдела сделано!

Далее заходим в модуль файл_менеджер на роутере MR3020 и переходим в папку www/cgi-bin/modules/video_driver/ и рядом со stop.cgi нажимаем иконку РЕДАКТИРОВАТЬ.

после чего копируем туда

Цитата:
#!/bin/sh
curl -T "$1" ВАШ_САЙТ.ru/cam.php?up=XXX_YYYY
rm -f "$1"
killall mjpg_streamer
Где ВАШ_САЙТ - это URL Вашего сайта, к примеру microsoft.com
XXX - Номер камеры по порядку, в вашем случае 1
потом знак подчеркивания
и YYYY - ваш пароль на аплоад указанный в cam.php ($upload_pass="YYYY"

у меня к примеру это выглядит так:

Цитата:
#!/bin/sh
curl -T "$1" mysite.ru/cam.php?up=1_pass12345
rm -f "$1"
killall mjpg_streamer
сохраняем. перезапускаем роутер.

После перезагрузки надо проверить аплоад.

для этого заходим в модуль Терминал на роутере MR3020 и вбиваем команду:
Цитата:
mjpg_streamer -i "input_uvc.so -y -d /dev/video0 -r 640x480" -o "output_file.so -f /tmp/ -d 1000 -c /www/cgi-bin/modules/video_driver/stop.cgi"
Она должна завершится надписью
Цитата:
Success REC on CAM1! Terminated
Это означает что запись прошла успешно!

Далее забиваем в планировщик следующее задание :
Цитата:
mjpg_streamer -i "input_uvc.so -y -d /dev/video0 -r 640x480" -o "output_file.so -f /tmp/ -d 1000 -c /www/cgi-bin/modules/video_driver/stop.cgi"
кто хочет почаще чем раз в 1 минуту может забить такое задание:

Цитата:
mjpg_streamer -i "input_uvc.so -y -d /dev/video0 -r 640x480" -o "output_file.so -f /tmp/ -d 1000 -c /www/cgi-bin/modules/video_driver/stop.cgi; sleep(10); mjpg_streamer -i "input_uvc.so -y -d /dev/video0 -r 640x480" -o "output_file.so -f /tmp/ -d 1000 -c /www/cgi-bin/modules/video_driver/stop.cgi; sleep(10); mjpg_streamer -i "input_uvc.so -y -d /dev/video0 -r 640x480" -o "output_file.so -f /tmp/ -d 1000 -c /www/cgi-bin/modules/video_driver/stop.cgi;
Это 3 раза в минуту! но смотрите чтобы место было под файлы!!!

И стартуйте задание в планировщике.

ВСЕ!!! Никаких Яндекс-дисков и Яндекс-камер!

После чего будет производится автоматическая запись кадров на ваш сервер и у вас есть система просмотра ваших камер, логов заходов и ошибок, просмотр покадрово и таймлапс видео.


Для просмотра таймлапса из 3000 кадров - нужен толстый канал, но потом я доработаю cam.php чтобы рубить кусочками таймлапсы.

Последний раз редактировалось shveps; 29.05.2014 в 19:00.
shveps вне форума   Ответить с цитированием
Старый 25.05.2014, 20:40   #2
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Видеонаблюдение MR3020 + C270 + Вебсервер

Спасибо!
Интересное решение
Admin вне форума   Ответить с цитированием
Старый 28.05.2014, 11:23   #3
shveps
Junior Member
 
Регистрация: 03.05.2014
Сообщений: 22
Вес репутации: 0
shveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond repute
По умолчанию Re: Видеонаблюдение MR3020 + C270 + Вебсервер

Появилась функция просмотра по дням!
теперь броузер не умирает, так как идет разделение на дни.
код поменялся соответственно:

PHP код:
<?php
//Copyright Eurowebcart.ru
//under MIT License

$autorec=1;

$log_errors=1;
$log_auth=1;
$max_log_size=1048576//bytes

$max_photos=5000;

//cam init
$cams=Array (
"Моя комната|no url|rotate180|rec|",
"Парковка|http://online.yandexcamera.ru/yandex/show/3/image?|||",
);

//here is passwords for access cam view
$passwords=Array (
"Pasha"        =>"pass1",
"Andrey"    =>"pass2",
"Igor"        =>"pass3",
"Sasha"        =>"pass4",
);

$upload_pass="pass12345";

$salt="abcde12345"//your secret salt

$refresh_time=50//sec

$cam=doubleval(@$_GET['cam']);
$auth=0;
if(isset(
$_GET['pass'])) {$pass=$_GET['pass']; }elseif(isset($_POST['pass'])){ $pass=$_POST['pass']; }else {$pass="";}
if (!
preg_match('/^[a-zA-Z0-9-]+$/i',$pass)) { if ($pass!="") { $auth=2; } $pass="";}
if(isset(
$_GET['rec'])) {$rec=$_GET['rec']; }elseif(isset($_POST['rec'])){ $rec=$_POST['rec']; } else {$rec=0;}
if (!
preg_match('/^[0-9]+$/i',$rec)) { $rec=0;}
if(isset(
$_GET['up'])) {$up=$_GET['up']; }elseif(isset($_POST['up'])){ $up=$_POST['up']; } else {$up=0;}
if (!
preg_match('/^[0-9a-zA-Z_\.-]+$/i',$up)) { $up=0;}
if(isset(
$_GET['day'])) {$day=$_GET['day']; }elseif(isset($_POST['day'])){ $day=$_POST['day']; } else {$day="";}
if (!
preg_match('/^[0-9\.-]+$/i',$day)) { $day="";}

function 
rotatelog() {
@
unlink("./cams/log3.txt");
@
rename("./cams/log2.txt""./cams/log3.txt");
@
rename("./cams/log1.txt""./cams/log2.txt");
@
rename("./cams/log.txt""./cams/log1.txt");
}
function 
camlog($error) {
global 
$log_errors;
global 
$max_log_size;
if(
is_dir("./cams")!=true) { mkdir("./cams",0755); }
if ( 
$log_errors==1) {
if (
filesize("./cams/log.txt")>$max_log_size) {
rotatelog();
}
$fp=fopen("./cams/log.txt","a");
fputs($fp,date("d.m.Y H:i:s",time()).$error\n");
fclose($fp);
}
echo 
$error;
}
function 
authlog($mes) {
global 
$log_auth;
global 
$ip;
global 
$max_log_size;
if(
is_dir("./cams")!=true) { mkdir("./cams",0755); }
if ( 
$log_auth==1) {
if (
filesize("./cams/log.txt")>$max_log_size) {
rotatelog();
}
$fp=fopen("./cams/log.txt","a");
fputs($fp,date("d.m.Y H:i:s",time()).$mes [IP: $ip]\n");
fclose($fp);
}
}
unset(
$t);
$t=explode("_",$up);
$up=doubleval(@$t[0]);
$u_pass=trim(@$t[1]);
unset(
$t);
if (
$up>0) {
if (
$u_pass==$upload_pass) {
reset ($cams);
$c=1;
$found_cam=0;
$enable_rec=0;
while (list(
$k,$v)=each($cams)) {
$o=explode("|",$v);
if (
$c==$up) {
$found_cam=1;
if (
$o[3]!="") { $enable_rec=1; }
}
$c++;
}
unset (
$k,$v,$o,$c);
reset ($cams);
if ( 
$found_cam==1) {
if (
$_SERVER['REQUEST_METHOD']=="PUT"){
if (
$enable_rec==1) {
$putdata fopen("php://input""r");
$f=0;
$dir="./cams/cam".$up;
if(
is_dir($dir)!=true) { mkdir($dir,0755); }
while (
$data fread($putdata1024)) {
if (
$f==0) {
@
unlink("$dir/image.tmp");
$p fopen("$dir/image.tmp""a");
}
@
fputs($p$data);
$f=1;
}
@
fclose($p);
fclose($putdata);
if (
file_exists("$dir/image.tmp")) {
$t=@file($dir."/count.txt");
$count=doubleval(trim(@$t[0]));
$count++;
if (
$count>=$max_photos) { $count=0; }
$fp=fopen($dir."/count.txt","w");
fputs($fp,"$count");
fclose($fp);
@
unlink($dir."/$count".".jpg");
@
rename ($dir."/image.jpeg"$dir."/$count".".jpg");
rename ($dir."/image.tmp"$dir."/image.jpeg");
}
echo 
"Success REC on CAM".$up."!";
exit;
} else {
camlog("Record on CAM".$up." is Disabled!");
exit;
}
} else {
camlog("Record Disable! Method do not PUT!");
exit;
}
} else {
camlog("This CAM is not found!");
exit;
}
} else {
camlog("Upload Password do not match!");
exit;
}
}

$hache=md5($_SERVER['HTTP_HOST'].$salt);
session_cache_limiter ('nocache');
session_name($hache);
session_start();
$sid=session_id();
$ids="s".md5($hache);
if (!isset(
$_SESSION[$ids])){$_SESSION[$ids]=0; }
$divst="";
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Cams by eurowebcart.ru</title>
<link href="http://getbootstrap.com/2.3.2/assets/css/bootstrap.css" rel="stylesheet">
<link href="http://getbootstrap.com/2.3.2/assets/css/bootstrap-responsive.css" rel="stylesheet">
<link href="http://getbootstrap.com/2.3.2/assets/css/docs.css" rel="stylesheet">
<link href="http://getbootstrap.com/2.3.2/assets/js/google-code-prettify/prettify.css" rel="stylesheet">
<!--[if lt IE 9]>
<script src="http://getbootstrap.com/2.3.2/assets/js/html5shiv.js"></script>
<![endif]-->
<script src="http://getbootstrap.com/2.3.2/assets/js/jquery.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-transition.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-alert.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-modal.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-dropdown.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-tooltip.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-popover.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-button.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-carousel.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/google-code-prettify/prettify.js"></script>
<?
if ($pass!="") {
if (
$pass=="exit") {
$_SESSION[$ids]=0;
} else {
$auth=2;
while (list(
$k,$v)=each($passwords)) {
if (
$v==$pass) {
$_SESSION[$ids]=1;
$auth=1;
$ip="udefined";
if (!empty(
$_SERVER['HTTP_CLIENT_IP'])) {
    
$ip $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty(
$_SERVER['HTTP_X_FORWARDED_FOR'])) {
    
$ip $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    
$ip $_SERVER['REMOTE_ADDR'];
}
authlog("User '$k' enter cam view");


}
}
}
}
if (
$auth==2) { $divst=" error"; }
unset (
$k,$v,$passwords);

if (
$_SESSION[$ids]==1) {


function 
savefoto ($camnum$data$rotate) {
if(
is_dir("./cams")!=true) { mkdir("./cams",0755); }
$dir="./cams/cam".$camnum;
if(
is_dir($dir)!=true) { mkdir($dir,0755); }
global 
$max_photos;
$dir="./cams/cam".$camnum;
$t=@file($dir."/count.txt");
$count=doubleval(trim(@$t[0]));
$count++;
if (
$count>=$max_photos) { $count=0; }
$fp=fopen($dir."/count.txt","w");
fputs($fp,"$count");
fclose($fp);
@
unlink($dir."/$count".".jpg");
rename ($dir."/image.jpeg"$dir."/$count".".jpg");
}

function 
img2data ($camnum$title=string,$req=string$rotate=string$rec=string$link=string) {
global 
$autorec;

if(
is_dir("./cams")!=true) { mkdir("./cams",0755); }
$dir="./cams/cam".$camnum;
if(
is_dir($dir)!=true) { mkdir($dir,0755); }
$o=@fopen($dir."/image.jpeg","r");
$cur=@fread($o,@filesize($dir."/image.jpeg"));
@
fclose($o);

$img="";
if (
$autorec==0) {
if (
$req) {
$req.=time();
if (
function_exists('curl_init')) {
$ch curl_init($req);
@
curl_setopt($chCURLOPT_HEADERFALSE);
@
curl_setopt($chCURLOPT_FOLLOWLOCATIONTRUE);
@
curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
$img curl_exec($ch);
curl_close($ch);
} else {
$img=file_get_contents($req);
}
}
} else {
$img=$cur;
}
if (
$img=="") {
return 
"<div style=\"padding: 5px;\"><i class=\"icon-facetime-video icon-white\"></i> <strong>$title</strong></div><div style=\"padding: 5px;\">No Signal</div>";
} else {

if (
$cur!=$img) {
if (
$rec!="") { savefoto($camnum,$img,$rotate);  }
$o=fopen($dir."/image.jpeg","w");
fputs($o,$img);
fclose($o);
$cur=$img;
}
}
$rclass="";
$rico="";
$rscr="parent.document.getElementById('modalimg').className='';";
$l1="";
$l2="";
if (
$link!="") { $l1="<a href=\"$link\" target=\"blank\">"$l2="</a>"; }
if (
$rotate!="") { $rclass="class=$rotate"$rscr="parent.document.getElementById('modalimg').className='$rotate';"$rico="<i class=\"icon-repeat icon-white\" title=\"$rotate\"></i>";}
if (
$rec!="") { $rico.="<div class=pull-right>$l1<img border=0 src=\"data:image/gif;base64,R0lGODlhEAAQAIABAP8AAP///yH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0i".
"VzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj".
"4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv".
"IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG".
"9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Rjk0NjFCQUZFMDQwMTFFMzgzRkVBREZDRkI5NTA0NEQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Rjk0NjFCQjBFMDQwMTFFMzgzRkVBREZDRkI5NTA0".
"NEQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGOTQ2MUJBREUwNDAxMUUzODNGRUFERkNGQjk1MDQ0RCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGOTQ2MUJBRUUwNDAxMUUzODNGRUFERkNGQj".
"k1MDQ0RCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHA".
"v769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5OD".
"c2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAkyAAEALAAAAAAQABAAAAIhjI+pAQ17nHxqzmQtytdwzXySJzpkSYXiVmLfwkFnKtcFACH5BAUyAAEALAAAAAAQABAAAAIOjI+py+0P".
"o5y02ouzPgUAOw==\"><font color=white>REC</font>$l2</div>";}

$data=base64_encode($cur);


$r="<div style=\"padding: 5px;\">$rico<i class=\"icon-facetime-video icon-white\"></i> <strong>$title</strong> ".date("H:i:s",time())."</div><a href=\"#fullscreen\" title=\"Fullscreen\">";
if (
$link=="") {
$r.="<img onclick=\"parent.document.getElementById('modalframe').innerHTML='';
parent.document.getElementById('modalimg').className='';
parent.document.getElementById('modalimg').src=this.src;
parent.document.getElementById('myModalLabel').innerHTML='"
.str_replace("'""",str_replace("\""""strip_tags($title)))."';
parent.document.getElementById('modalframeTx').className='hidden';
"
.$rscr."parent.$('#myModal').modal('show');\"";
} else {
$r.="<img onclick=\"parent.document.getElementById('modalframe').innerHTML='<iframe class=preview src=".$link."></iframe>';
parent.document.getElementById('modalimg').className='hidden';
parent.document.getElementById('myModalLabel').innerHTML='"
.str_replace("'""",str_replace("\""""strip_tags($title)))."';
parent.document.getElementById('modalframeTx').className='hidden';
parent.$('#myModal').modal('show');\""
;
}
$r.=" id=cam".$camnum." src=\"data:image/jpeg;base64,".$data."\" style=\"cursor: zoom-in;\"".$rclass." /></a>";
return 
$r;
}



if (
$cam==0) {
if (
count($cams)>0) {
$camnum=1;
echo 
"<style>
.ml {
margin-left: 10px;
}
.mr {
margin-right: 10px;
}
.hidden {
display: none;
visibility: hidden;
}
.frame {
margin-right: 5px;
margin-bottom: 5px;
width: 320px;
height: 270px;
overflow: hidden;
}
.preview {
position: absolute;
width: 100%;
height: 100%;
overflow: hidden;
border: none;
}
.rotate180 {
     -moz-transform:    rotate(180deg)
                         scale(1);
     -o-transform:      rotate(180deg)
                         scale(1);
     -webkit-transform: rotate(180deg)
                         scale(1);
     transform:         rotate(180deg)
                         scale(1);
}
.modal {
    position: fixed;
    top: 1%;
    left: 25%;
    z-index: 1050;
    min-width: 50%;
    max-width: 100%;
    height: 90%;
    margin-left: 0px;
    background-color: #FFF;
    border: 1px solid rgba(0, 0, 0, 0.3);
    border-radius: 6px;
    outline: medium none;
    box-shadow: 0px 3px 7px rgba(0, 0, 0, 0.3);
    background-clip: padding-box;
}
.modal-body {
    height: 100%;
    padding: 0px;
    overflow-y: auto;
}
</style></head><body style=\"padding:10px; margin:0; color:#000; background-color:#fff;\"><div class=well>
<a href=\""
.$_SERVER['PHP_SELF']."?pass=exit\" class=\"btn btn-info pull-right mr\" style=\"margin-left: 10px;\"><i class=\"icon-off icon-white\"></i> Exit</a>
"
;
echo 
"<script>
var timerId;
function update() {
  var date = new Date();
  var seconds = date.getSeconds();
  if ((seconds/5)==Math.floor(seconds/5)) { $('#modalframeAr').load('cams/log.txt?'+microtime()); }
}

function clockStart() {
  if (timerId) return;
  timerId=self.setInterval(function(){update()},500);
}

function clockStop() {
  clearInterval(timerId);
  timerId = null;
}


clockStart();
var now = new Date().getTime();
now=parseInt(now);
function microtime() {
    var s = new Date().getTime();
    return Math.round("
.time()."+s-now);
}
function showcamlog() {
document.getElementById('modalframe').innerHTML='';
document.getElementById('modalimg').className='hidden';
document.getElementById('myModalLabel').innerHTML='Log';
$('#myModal').modal('show');
document.getElementById('modalframeTx').className='mr ml';
$('#modalframeAr').load('cams/log.txt?'+microtime());
}
</script>
<a href=\"#\" class=\"btn pull-right mr\" style=\"margin-left: 10px;\" onclick=showcamlog();><i class=\"icon-user\"></i> Auth Log</a>"
;

while (list(
$k,$v)=each($cams)) {
echo 
"<iframe class=\"thumbnail pull-left frame\" src=\"".$_SERVER['PHP_SELF']."?".SID."&cam=$camnum\"></iframe>";
$camnum++;
}
echo 
"<div style=\"clear: both;\"></div></div>";
echo 
" <!-- Modal -->
    <div id=\"myModal\" class=\"modal hide\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\">
    <div class=\"modal-header\">
    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\">&times;</button>
    <h3 id=\"myModalLabel\" style=\"color: #000;\"></h3>
    </div>
    <div class=\"modal-body\">
    <p><img id=modalimg /><span id=modalframe></span><span id=modalframeTx class=hidden><textarea cols=10 rows=10 id=modalframeAr style=\"width: 90%;\"></textarea></span></p>
    </div>
    </div>"
;
} else {
echo 
"No cams detected!";
}
} else {
if (
$rec==0) {
echo 
"<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"".($refresh_time+$cam).";URL=".$_SERVER['PHP_SELF']."?".SID."&cam=$cam\">";
}
echo 
"<style>
.hidden {
display: none;
visibility: hidden;
}
.ml {
margin-left: 10px;
}
.mr {
margin-right: 10px;
}
.rotate180 {
     -moz-transform:    rotate(180deg)
                         scale(1);
     -o-transform:      rotate(180deg)
                         scale(1);
     -webkit-transform: rotate(180deg)
                         scale(1);
     transform:         rotate(180deg)
                         scale(1);
}
"
;
if (
$rec!=0) {
echo 
".carousel-fade .carousel-inner .item {
  opacity: 0;
  -webkit-transition-property: opacity;
  -moz-transition-property: opacity;
  -o-transition-property: opacity;
  transition-property: opacity;
}
.carousel-fade .carousel-inner .active {
  opacity: 1;
}
.carousel-fade .carousel-inner .active.left,
.carousel-fade .carousel-inner .active.right {
  left: 0;
  opacity: 0;
  z-index: 1;
}
.carousel-fade .carousel-inner .next.left,
.carousel-fade .carousel-inner .prev.right {
  opacity: 1;
}
.carousel-fade .carousel-control {
  z-index: 2;
  background: none;
  border: none;
}
html,
body,
.carousel,
.carousel-inner,
.carousel-inner .item {
  height: 100%;
  width: 100%;
  overflow-y: hidden;
}
.carousel-caption {  background: none; text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.8); }
"
;
}
echo 
"
</style>
</head><body style=\"padding:0; margin:0; color:#fff; background-color:#000;\">"
;

$camnum=1;
while (list(
$k,$v)=each($cams)) {
if (
$camnum==$cam) {
$t=explode("|"$v);

if (
$rec==0) {
echo 
img2data($cam,$t[0],$t[1],$t[2],$t[3],$_SERVER['PHP_SELF']."?".SID."&cam=$cam&rec=1");
} else {
$recs=Array();
$ff=0;
$rdir="./cams/cam".$cam;
$rst="";
if (
$t[2]!="") { $rst=" class=".$t[2];}
if (
$day=="") { 
$day=date("d.m.Y"time());
}
$days=Array();
if (
$handle opendir($rdir)) {
    while (
false !== ($fn readdir($handle))) {
    if (
substr($fn,-4)==".jpg") {
    
$idx=filemtime($rdir."/".$fn);
    
$curd=date("d.m.Y",$idx);
    if (!isset(
$days[$curd])) { $days[$curd]="<li><a href=\"".$_SERVER['PHP_SELF']."?".SID."&cam=$cam&rec=1&day=$curd\">$curd</li>";}
    if (
$day==$curd) {
        
$recs[$idx]=$fn;
        
$ff++;
        }
        }
    }
}
closedir($handle);
echo 
"<div id=\"myCarousel\" class=\"carousel carousel-fade\" data-interval=\"100\" data-pause=\"hover\">
<div class=\"carousel-inner\">
"
;
$z=0;
if (
$ff>0) {
ksort($recs);
$a="";
array_reverse($recs);
reset($recs);
$c=count($recs);
while (list(
$k1,$v1)=each($recs)) {
echo 
"<div class=\"item\">
<img"
.$rst." src=\"cams/cam".$cam."/".$v1."\">
<div class=\"carousel-caption\">Frame <b>"
.($z+1)."/".($c+1)."</b> $day ".date("H:i:s"doubleval($k1))."<a class=\"pull-right\" href=\"".$_SERVER['PHP_SELF']."?".SID."&cam=$cam&rec=1\" title=\"Refresh scene\"><font color=white><i class=\"icon-refresh icon-white icon-large\"></i></font></a>
</div>
</div>"
;
$z++;
}
}
echo 
"<div class=\"item active\">
<img"
.$rst." src=\"cams/cam".$cam."/image.jpeg?".time()."\">
<div class=\"carousel-caption\"><b>NOW</b> "
.date("d.m.Y H:i:s"time())."<a class=\"pull-right\" href=\"".$_SERVER['PHP_SELF']."?".SID."&cam=$cam&rec=1\" title=\"Refresh scene\"><font color=white><i class=\"icon-refresh icon-white icon-large\"></i></font></a>
</div>
</div>
</div>
    <a class=\"carousel-control left\" href=\"#myCarousel\" data-slide=\"prev\">&lsaquo;</a>
    <a class=\"carousel-control right\" href=\"#myCarousel\" data-slide=\"next\">&rsaquo;</a>
    </div>
    <div class=\"btn-group\" style=\"position: absolute; top: 10px; right: 10px; z-index: 1000;\">
    <a class=\"btn dropdown-toggle\" data-toggle=\"dropdown\" href=\"#\">
    
$day <span class=\"caret\"></span>
    </a>
    <ul class=\"dropdown-menu\">
    "
.implode("\n"$days)."
    </ul>
    </div>
    "
;
}
}
$camnum++;
}
}



} else {
echo 
"</head><body style=\"padding:10px; margin:0; color:#000; background-color:#fff;\">
<div class=\"well\" align=center>
<script type=\"text/javascript\">
function submit_auth(e)
{
    if (e.keyCode == 13)
    {
        document.getElementById('form').submit();
        return false;
    }
}

</script>
<form action=\""
.$_SERVER['PHP_SELF']."\" id=form method=POST>
<input type=hidden name=cam value=
$cam>
<div class=\"control-group"
.$divst."\">
<br>
<h3>Enter Password:</h3>
<br><input type=password name=pass value=\"\" placeholder=\"password\" onkeyup=\"submit_auth(event);\" autocomplete=\"off\">
<br><br></div>
</form>

</div>"
;
}
?>
</body></html>

Последний раз редактировалось shveps; 29.05.2014 в 19:01. Причина: вкралась маленькая ошибка
shveps вне форума   Ответить с цитированием
Старый 28.05.2014, 11:33   #4
shveps
Junior Member
 
Регистрация: 03.05.2014
Сообщений: 22
Вес репутации: 0
shveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond repute
По умолчанию Re: Видеонаблюдение MR3020 + C270 + Вебсервер

Модуль бесплатен для личного не коммерческого использования. Для организаций - небольшой % автору должен быть дотирован.
shveps вне форума   Ответить с цитированием
Старый 28.05.2014, 12:13   #5
shveps
Junior Member
 
Регистрация: 03.05.2014
Сообщений: 22
Вес репутации: 0
shveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond repute
По умолчанию Re: Видеонаблюдение MR3020 + C270 + Вебсервер

В работе последнюю версию можно глянуть на http://24ok.ru/cam.php
пароль pass1
shveps вне форума   Ответить с цитированием
Старый 29.05.2014, 19:01   #6
shveps
Junior Member
 
Регистрация: 03.05.2014
Сообщений: 22
Вес репутации: 0
shveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond repute
По умолчанию Re: Видеонаблюдение MR3020 + C270 + Вебсервер

В PHP скрипт вкралась маленькая ошибка приводившая к нециклической записи.
исправлено.
shveps вне форума   Ответить с цитированием
Старый 02.06.2014, 23:48   #7
shveps
Junior Member
 
Регистрация: 03.05.2014
Сообщений: 22
Вес репутации: 0
shveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond reputeshveps has a reputation beyond repute
По умолчанию Re: Видеонаблюдение MR3020 + C270 + Вебсервер

Апдейт. День разделен на 2 части до полудня и после полудня
записи стало просматривать удобнее на слабых устройствах.
PHP код:
<?php
//Copyright Eurowebcart.ru
//under MIT License

$autorec=1;

$log_errors=1;
$log_auth=1;
$max_log_size=1048576//bytes

$max_photos=5000;

//cam init
$cams=Array (
"Моя комната|no url|rotate180|rec|",
"Парковка|http://online.yandexcamera.ru/yandex/show/3/image?|||",
);

//here is passwords for access cam view
$passwords=Array (
"Pasha"        =>"pass1",
"Andrey"    =>"pass2",
"Igor"        =>"pass3",
"Sasha"        =>"pass4",
);

$upload_pass="pass12345";

$salt="abcde12345"//your secret salt

$refresh_time=50//sec

$cam=doubleval(@$_GET['cam']);
$auth=0;
if(isset(
$_GET['pass'])) {$pass=$_GET['pass']; }elseif(isset($_POST['pass'])){ $pass=$_POST['pass']; }else {$pass="";}
if (!
preg_match('/^[a-zA-Z0-9-]+$/i',$pass)) { if ($pass!="") { $auth=2; } $pass="";}
if(isset(
$_GET['rec'])) {$rec=$_GET['rec']; }elseif(isset($_POST['rec'])){ $rec=$_POST['rec']; } else {$rec=0;}
if (!
preg_match('/^[0-9]+$/i',$rec)) { $rec=0;}
if(isset(
$_GET['up'])) {$up=$_GET['up']; }elseif(isset($_POST['up'])){ $up=$_POST['up']; } else {$up=0;}
if (!
preg_match('/^[0-9a-zA-Z_\.-]+$/i',$up)) { $up=0;}
if(isset(
$_GET['day'])) {$day=$_GET['day']; }elseif(isset($_POST['day'])){ $day=$_POST['day']; } else {$day="";}
if (!
preg_match('/^[0-9APM\. -]+$/i',$day)) { $day="";}

function 
rotatelog() {
@
unlink("./cams/log3.txt");
@
rename("./cams/log2.txt""./cams/log3.txt");
@
rename("./cams/log1.txt""./cams/log2.txt");
@
rename("./cams/log.txt""./cams/log1.txt");
}
function 
camlog($error) {
global 
$log_errors;
global 
$max_log_size;
if(
is_dir("./cams")!=true) { mkdir("./cams",0755); }
if ( 
$log_errors==1) {
if (
filesize("./cams/log.txt")>$max_log_size) {
rotatelog();
}
$fp=fopen("./cams/log.txt","a");
fputs($fp,date("d.m.Y H:i:s",time()).$error\n");
fclose($fp);
}
echo 
$error;
}
function 
authlog($mes) {
global 
$log_auth;
global 
$ip;
global 
$max_log_size;
if(
is_dir("./cams")!=true) { mkdir("./cams",0755); }
if ( 
$log_auth==1) {
if (
filesize("./cams/log.txt")>$max_log_size) {
rotatelog();
}
$fp=fopen("./cams/log.txt","a");
fputs($fp,date("d.m.Y H:i:s",time()).$mes [IP: $ip]\n");
fclose($fp);
}
}
unset(
$t);
$t=explode("_",$up);
$up=doubleval(@$t[0]);
$u_pass=trim(@$t[1]);
unset(
$t);
if (
$up>0) {
if (
$u_pass==$upload_pass) {
reset ($cams);
$c=1;
$found_cam=0;
$enable_rec=0;
while (list(
$k,$v)=each($cams)) {
$o=explode("|",$v);
if (
$c==$up) {
$found_cam=1;
if (
$o[3]!="") { $enable_rec=1; }
}
$c++;
}
unset (
$k,$v,$o,$c);
reset ($cams);
if ( 
$found_cam==1) {
if (
$_SERVER['REQUEST_METHOD']=="PUT"){
if (
$enable_rec==1) {
$putdata fopen("php://input""r");
$f=0;
$dir="./cams/cam".$up;
if(
is_dir($dir)!=true) { mkdir($dir,0755); }
while (
$data fread($putdata1024)) {
if (
$f==0) {
@
unlink("$dir/image.tmp");
$p fopen("$dir/image.tmp""a");
}
@
fputs($p$data);
$f=1;
}
@
fclose($p);
fclose($putdata);
if (
file_exists("$dir/image.tmp")) {
$t=@file($dir."/count.txt");
$count=doubleval(trim(@$t[0]));
$count++;
if (
$count>=$max_photos) { $count=0; }
$fp=fopen($dir."/count.txt","w");
fputs($fp,"$count");
fclose($fp);
@
unlink($dir."/$count".".jpg");
@
rename ($dir."/image.jpeg"$dir."/$count".".jpg");
rename ($dir."/image.tmp"$dir."/image.jpeg");
}
echo 
"Success REC on CAM".$up."!";
exit;
} else {
camlog("Record on CAM".$up." is Disabled!");
exit;
}
} else {
camlog("Record Disable! Method do not PUT!");
exit;
}
} else {
camlog("This CAM is not found!");
exit;
}
} else {
camlog("Upload Password do not match!");
exit;
}
}

$hache=md5($_SERVER['HTTP_HOST'].$salt);
session_cache_limiter ('nocache');
session_name($hache);
session_start();
$sid=session_id();
$ids="s".md5($hache);
if (!isset(
$_SESSION[$ids])){$_SESSION[$ids]=0; }
$divst="";
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Cams by eurowebcart.ru</title>
<link href="http://getbootstrap.com/2.3.2/assets/css/bootstrap.css" rel="stylesheet">
<link href="http://getbootstrap.com/2.3.2/assets/css/bootstrap-responsive.css" rel="stylesheet">
<link href="http://getbootstrap.com/2.3.2/assets/css/docs.css" rel="stylesheet">
<link href="http://getbootstrap.com/2.3.2/assets/js/google-code-prettify/prettify.css" rel="stylesheet">
<!--[if lt IE 9]>
<script src="http://getbootstrap.com/2.3.2/assets/js/html5shiv.js"></script>
<![endif]-->
<script src="http://getbootstrap.com/2.3.2/assets/js/jquery.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-transition.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-alert.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-modal.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-dropdown.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-tooltip.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-popover.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-button.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-carousel.js"></script>
<script src="http://getbootstrap.com/2.3.2/assets/js/google-code-prettify/prettify.js"></script>
<?
if ($pass!="") {
if (
$pass=="exit") {
$_SESSION[$ids]=0;
} else {
$auth=2;
while (list(
$k,$v)=each($passwords)) {
if (
$v==$pass) {
$_SESSION[$ids]=1;
$auth=1;
$ip="udefined";
if (!empty(
$_SERVER['HTTP_CLIENT_IP'])) {
    
$ip $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty(
$_SERVER['HTTP_X_FORWARDED_FOR'])) {
    
$ip $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    
$ip $_SERVER['REMOTE_ADDR'];
}
authlog("User '$k' enter cam view");


}
}
}
}
if (
$auth==2) { $divst=" error"; }
unset (
$k,$v,$passwords);

if (
$_SESSION[$ids]==1) {


function 
savefoto ($camnum$data$rotate) {
if(
is_dir("./cams")!=true) { mkdir("./cams",0755); }
$dir="./cams/cam".$camnum;
if(
is_dir($dir)!=true) { mkdir($dir,0755); }
global 
$max_photos;
$dir="./cams/cam".$camnum;
$t=@file($dir."/count.txt");
$count=doubleval(trim(@$t[0]));
$count++;
if (
$count>=$max_photos) { $count=0; }
$fp=fopen($dir."/count.txt","w");
fputs($fp,"$count");
fclose($fp);
@
unlink($dir."/$count".".jpg");
rename ($dir."/image.jpeg"$dir."/$count".".jpg");
}

function 
img2data ($camnum$title=string,$req=string$rotate=string$rec=string$link=string) {
global 
$autorec;

if(
is_dir("./cams")!=true) { mkdir("./cams",0755); }
$dir="./cams/cam".$camnum;
if(
is_dir($dir)!=true) { mkdir($dir,0755); }
$o=@fopen($dir."/image.jpeg","r");
$cur=@fread($o,@filesize($dir."/image.jpeg"));
@
fclose($o);

$img="";
if (
$autorec==0) {
if (
$req) {
$req.=time();
if (
function_exists('curl_init')) {
$ch curl_init($req);
@
curl_setopt($chCURLOPT_HEADERFALSE);
@
curl_setopt($chCURLOPT_FOLLOWLOCATIONTRUE);
@
curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
$img curl_exec($ch);
curl_close($ch);
} else {
$img=file_get_contents($req);
}
}
} else {
$img=$cur;
}
if (
$img=="") {
return 
"<div style=\"padding: 5px;\"><i class=\"icon-facetime-video icon-white\"></i> <strong>$title</strong></div><div style=\"padding: 5px;\">No Signal</div>";
} else {

if (
$cur!=$img) {
if (
$rec!="") { savefoto($camnum,$img,$rotate);  }
$o=fopen($dir."/image.jpeg","w");
fputs($o,$img);
fclose($o);
$cur=$img;
}
}
$rclass="";
$rico="";
$rscr="parent.document.getElementById('modalimg').className='';";
$l1="";
$l2="";
if (
$link!="") { $l1="<a href=\"$link\" target=\"blank\">"$l2="</a>"; }
if (
$rotate!="") { $rclass="class=$rotate"$rscr="parent.document.getElementById('modalimg').className='$rotate';"$rico="<i class=\"icon-repeat icon-white\" title=\"$rotate\"></i>";}
if (
$rec!="") { $rico.="<div class=pull-right>$l1<img border=0 src=\"data:image/gif;base64,R0lGODlhEAAQAIABAP8AAP///yH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0i".
"VzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj".
"4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv".
"IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG".
"9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Rjk0NjFCQUZFMDQwMTFFMzgzRkVBREZDRkI5NTA0NEQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Rjk0NjFCQjBFMDQwMTFFMzgzRkVBREZDRkI5NTA0".
"NEQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGOTQ2MUJBREUwNDAxMUUzODNGRUFERkNGQjk1MDQ0RCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGOTQ2MUJBRUUwNDAxMUUzODNGRUFERkNGQj".
"k1MDQ0RCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHA".
"v769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5OD".
"c2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAkyAAEALAAAAAAQABAAAAIhjI+pAQ17nHxqzmQtytdwzXySJzpkSYXiVmLfwkFnKtcFACH5BAUyAAEALAAAAAAQABAAAAIOjI+py+0P".
"o5y02ouzPgUAOw==\"><font color=white>REC</font>$l2</div>";}

$data=base64_encode($cur);


$r="<div style=\"padding: 5px;\">$rico<i class=\"icon-facetime-video icon-white\"></i> <strong>$title</strong> ".date("H:i:s",time())."</div><a href=\"#fullscreen\" title=\"Fullscreen\">";
if (
$link=="") {
$r.="<img onclick=\"parent.document.getElementById('modalframe').innerHTML='';
parent.document.getElementById('modalimg').className='';
parent.document.getElementById('modalimg').src=this.src;
parent.document.getElementById('myModalLabel').innerHTML='"
.str_replace("'""",str_replace("\""""strip_tags($title)))."';
parent.document.getElementById('modalframeTx').className='hidden';
"
.$rscr."parent.$('#myModal').modal('show');\"";
} else {
$r.="<img onclick=\"parent.document.getElementById('modalframe').innerHTML='<iframe class=preview src=".$link."></iframe>';
parent.document.getElementById('modalimg').className='hidden';
parent.document.getElementById('myModalLabel').innerHTML='"
.str_replace("'""",str_replace("\""""strip_tags($title)))."';
parent.document.getElementById('modalframeTx').className='hidden';
parent.$('#myModal').modal('show');\""
;
}
$r.=" id=cam".$camnum." src=\"data:image/jpeg;base64,".$data."\" style=\"cursor: zoom-in;\"".$rclass." /></a>";
return 
$r;
}



if (
$cam==0) {
if (
count($cams)>0) {
$camnum=1;
echo 
"<style>
.ml {
margin-left: 10px;
}
.mr {
margin-right: 10px;
}
.hidden {
display: none;
visibility: hidden;
}
.frame {
margin-right: 5px;
margin-bottom: 5px;
width: 320px;
height: 270px;
overflow: hidden;
}
.preview {
position: absolute;
width: 100%;
height: 100%;
overflow: hidden;
border: none;
}
.rotate180 {
     -moz-transform:    rotate(180deg)
                         scale(1);
     -o-transform:      rotate(180deg)
                         scale(1);
     -webkit-transform: rotate(180deg)
                         scale(1);
     transform:         rotate(180deg)
                         scale(1);
}
.modal {
    position: fixed;
    top: 1%;
    left: 25%;
    z-index: 1050;
    min-width: 50%;
    max-width: 100%;
    height: 90%;
    margin-left: 0px;
    background-color: #FFF;
    border: 1px solid rgba(0, 0, 0, 0.3);
    border-radius: 6px;
    outline: medium none;
    box-shadow: 0px 3px 7px rgba(0, 0, 0, 0.3);
    background-clip: padding-box;
}
.modal-body {
    height: 100%;
    padding: 0px;
    overflow-y: auto;
}
</style></head><body style=\"padding:10px; margin:0; color:#000; background-color:#fff;\"><div class=well>
<a href=\""
.$_SERVER['PHP_SELF']."?pass=exit\" class=\"btn btn-info pull-right mr\" style=\"margin-left: 10px;\"><i class=\"icon-off icon-white\"></i> Exit</a>
"
;
echo 
"<script>
var timerId;
function update() {
  var date = new Date();
  var seconds = date.getSeconds();
  if ((seconds/5)==Math.floor(seconds/5)) { $('#modalframeAr').load('cams/log.txt?'+microtime()); }
}

function clockStart() {
  if (timerId) return;
  timerId=self.setInterval(function(){update()},500);
}

function clockStop() {
  clearInterval(timerId);
  timerId = null;
}


clockStart();
var now = new Date().getTime();
now=parseInt(now);
function microtime() {
    var s = new Date().getTime();
    return Math.round("
.time()."+s-now);
}
function showcamlog() {
document.getElementById('modalframe').innerHTML='';
document.getElementById('modalimg').className='hidden';
document.getElementById('myModalLabel').innerHTML='Log';
$('#myModal').modal('show');
document.getElementById('modalframeTx').className='mr ml';
$('#modalframeAr').load('cams/log.txt?'+microtime());
}
</script>
<a href=\"#\" class=\"btn pull-right mr\" style=\"margin-left: 10px;\" onclick=showcamlog();><i class=\"icon-user\"></i> Auth Log</a>"
;

while (list(
$k,$v)=each($cams)) {
echo 
"<iframe class=\"thumbnail pull-left frame\" src=\"".$_SERVER['PHP_SELF']."?".SID."&cam=$camnum\"></iframe>";
$camnum++;
}
echo 
"<div style=\"clear: both;\"></div></div>";
echo 
" <!-- Modal -->
    <div id=\"myModal\" class=\"modal hide\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\">
    <div class=\"modal-header\">
    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\">&times;</button>
    <h3 id=\"myModalLabel\" style=\"color: #000;\"></h3>
    </div>
    <div class=\"modal-body\">
    <p><img id=modalimg /><span id=modalframe></span><span id=modalframeTx class=hidden><textarea cols=10 rows=10 id=modalframeAr style=\"width: 90%;\"></textarea></span></p>
    </div>
    </div>"
;
} else {
echo 
"No cams detected!";
}
} else {
if (
$rec==0) {
echo 
"<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"".($refresh_time+$cam).";URL=".$_SERVER['PHP_SELF']."?".SID."&cam=$cam\">";
}
echo 
"<style>
.hidden {
display: none;
visibility: hidden;
}
.ml {
margin-left: 10px;
}
.mr {
margin-right: 10px;
}
.rotate180 {
     -moz-transform:    rotate(180deg)
                         scale(1);
     -o-transform:      rotate(180deg)
                         scale(1);
     -webkit-transform: rotate(180deg)
                         scale(1);
     transform:         rotate(180deg)
                         scale(1);
}
"
;
if (
$rec!=0) {
echo 
".carousel-fade .carousel-inner .item {
  opacity: 0;
  -webkit-transition-property: opacity;
  -moz-transition-property: opacity;
  -o-transition-property: opacity;
  transition-property: opacity;
}
.carousel-fade .carousel-inner .active {
  opacity: 1;
}
.carousel-fade .carousel-inner .active.left,
.carousel-fade .carousel-inner .active.right {
  left: 0;
  opacity: 0;
  z-index: 1;
}
.carousel-fade .carousel-inner .next.left,
.carousel-fade .carousel-inner .prev.right {
  opacity: 1;
}
.carousel-fade .carousel-control {
  z-index: 2;
  background: none;
  border: none;
}
html,
body,
.carousel,
.carousel-inner,
.carousel-inner .item {
  height: 100%;
  width: 100%;
  overflow-y: hidden;
}
.carousel-caption {  background: none; text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.8); }
"
;
}
echo 
"
</style>
</head><body style=\"padding:0; margin:0; color:#fff; background-color:#000;\">"
;

$camnum=1;
while (list(
$k,$v)=each($cams)) {
if (
$camnum==$cam) {
$t=explode("|"$v);

if (
$rec==0) {
echo 
img2data($cam,$t[0],$t[1],$t[2],$t[3],$_SERVER['PHP_SELF']."?".SID."&cam=$cam&rec=1");
} else {
$recs=Array();
$ff=0;
$rdir="./cams/cam".$cam;
$rst="";
if (
$t[2]!="") { $rst=" class=".$t[2];}
if (
$day=="") { 
$day=date("d.m.Y A"time());
}
$days=Array();
if (
$handle opendir($rdir)) {
    while (
false !== ($fn readdir($handle))) {
    if (
substr($fn,-4)==".jpg") {
    
$idx=filemtime($rdir."/".$fn);
    
$curd=date("d.m.Y A",$idx);
    if (!isset(
$days[$curd])) { $days[$curd]="<!-- $idx --><li><a href=\"".$_SERVER['PHP_SELF']."?".SID."&cam=$cam&rec=1&day=$curd\"><small>"str_replace(" AM"" 0:00-12:00",str_replace(" PM"" 12:00-24:00"$curd)). "</small></li>";}
    if (
$day==$curd) {
        
$recs[$idx]=$fn;
        
$ff++;
        }
        }
    }
}
closedir($handle);
echo 
"<div id=\"myCarousel\" class=\"carousel carousel-fade\" data-interval=\"100\" data-pause=\"hover\">
<div class=\"carousel-inner\">
"
;
$z=0;
if (
$ff>0) {
ksort($recs);
$a="";
array_reverse($recs);
reset($recs);
$c=count($recs);
while (list(
$k1,$v1)=each($recs)) {
echo 
"<div class=\"item\">
<img"
.$rst." src=\"cams/cam".$cam."/".$v1."\">
<div class=\"carousel-caption\">Frame <b>"
.($z+1)."/".($c+1)."</b> $day ".date("H:i:s"doubleval($k1))."<a class=\"pull-right\" href=\"".$_SERVER['PHP_SELF']."?".SID."&cam=$cam&rec=1\" title=\"Refresh scene\"><font color=white><i class=\"icon-refresh icon-white icon-large\"></i></font></a>
</div>
</div>"
;
$z++;
}
}
natcasesort($days);
$days=array_reverse($days);
echo 
"<div class=\"item active\">
<img"
.$rst." src=\"cams/cam".$cam."/image.jpeg?".time()."\">
<div class=\"carousel-caption\"><b>NOW</b> "
.date("d.m.Y H:i:s"time())."<a class=\"pull-right\" href=\"".$_SERVER['PHP_SELF']."?".SID."&cam=$cam&rec=1\" title=\"Refresh scene\"><font color=white><i class=\"icon-refresh icon-white icon-large\"></i></font></a>
</div>
</div>
</div>
    <a class=\"carousel-control left\" href=\"#myCarousel\" data-slide=\"prev\">&lsaquo;</a>
    <a class=\"carousel-control right\" href=\"#myCarousel\" data-slide=\"next\">&rsaquo;</a>
    </div>
    <div class=\"btn-group\" style=\"position: absolute; top: 10px; right: 15px; z-index: 1000;\">
    <a class=\"btn dropdown-toggle\" data-toggle=\"dropdown\" href=\"#\"><small>
    "
.str_replace(" AM"" 0:00-12:00",str_replace(" PM"" 12:00-24:00",$day))."</small> <span class=\"caret\"></span>
    </a>
    <ul class=\"dropdown-menu mr\">
    "
.implode("\n"$days)."
    </ul>
    </div>
    "
;
}
}
$camnum++;
}
}



} else {
echo 
"</head><body style=\"padding:10px; margin:0; color:#000; background-color:#fff;\">
<div class=\"well\" align=center>
<script type=\"text/javascript\">
function submit_auth(e)
{
    if (e.keyCode == 13)
    {
        document.getElementById('form').submit();
        return false;
    }
}

</script>
<form action=\""
.$_SERVER['PHP_SELF']."\" id=form method=POST>
<input type=hidden name=cam value=
$cam>
<div class=\"control-group"
.$divst."\">
<br>
<h3>Enter Password:</h3>
<br><input type=password name=pass value=\"\" placeholder=\"password\" onkeyup=\"submit_auth(event);\" autocomplete=\"off\">
<br><br></div>
</form>

</div>"
;
}
?>
</body></html>
shveps вне форума   Ответить с цитированием
Старый 16.10.2014, 23:46   #8
avp8853
Junior Member
 
Регистрация: 16.10.2014
Сообщений: 3
Вес репутации: 0
avp8853 is an unknown quantity at this point
По умолчанию Re: Видеонаблюдение MR3020 + C270 + Вебсервер

У меня не получается запустить. Может у меня не все пакеты установлены?
Миниатюры
Нажмите на изображение для увеличения
Название: Без имени-1.jpg
Просмотров: 401
Размер:	285.7 Кб
ID:	1953  
avp8853 вне форума   Ответить с цитированием
Старый 17.10.2014, 08:43   #9
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Видеонаблюдение MR3020 + C270 + Вебсервер

Похоже на то что PHP нужно установить
Admin вне форума   Ответить с цитированием
Старый 19.10.2014, 10:11   #10
avp8853
Junior Member
 
Регистрация: 16.10.2014
Сообщений: 3
Вес репутации: 0
avp8853 is an unknown quantity at this point
По умолчанию Re: Видеонаблюдение MR3020 + C270 + Вебсервер

Разобрался надо было поставить <?php if ($pass!=""){ было <? if ($pass!=""){ без php. Но все равно пока не работает, не отображается видео с IP камер
Миниатюры
Нажмите на изображение для увеличения
Название: Без имени-1.jpg
Просмотров: 407
Размер:	294.7 Кб
ID:	1954  
avp8853 вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 11:29. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика