Исходные данные:
0. Удаленная дача ))
1. IP-Камера Hikvision 2CD-2032i
2. 3G канал интернет Мегафон (скорость обратного канала оооочень низкая не более 0.2 мбит/c
3. Связь между устройствами мегафон-мегафон невозможна! только для корпоративных клиентов (
4. Испробованы: Ivideon, Axxon, Vlc - они работают, но у каждого есть свои приколы. Кроме того, самое так сказать главное - на всех страницах идет ссылка на IP сервера (комп на даче), т.е. если я хочу увидеть что-то на телефоне подключенном к Мегафону, то упс!( - ничего не получится..
5. Мобильные браузеры не все отображают flash.
Натолкнул на мысль Netcam Studio - можно же передавать картинку JPEG - это могут показывать все браузеры.
Т.е. процесс такой
1. Получаем снимок с камеры.
2. Уменьшаем полученный снимок до приемлемых размеров, чтобы не сильно грузить канал.
3. Сохраняем картинку на сервере MDM.
4. возврат в п.1
Параллельно создаем домашнюю страницу, на которой с заданной периодичностью обновляем картинку из указанного каталога.
как реализовано
1. Создали свой цикл:
Код: Выделить всё
<?php
chdir(dirname(__FILE__).'/../');
include_once("./config.php");
include_once("./lib/loader.php");
include_once("./lib/threads.php");
set_time_limit(0);
// connecting to database
$db = new mysql(DB_HOST, '', DB_USER, DB_PASSWORD, DB_NAME);
include_once("./load_settings.php");
include_once(DIR_MODULES."control_modules/control_modules.class.php");
$ctl=new control_modules();
include_once(DIR_MODULES.'pinghosts/pinghosts.class.php');
$pinghosts = new pinghosts();
$checked_time=0;
echo date("H:i:s") . " running " . basename(__FILE__) . "\n";
while(1)
{
# путь и имя файла оригинальной картинки
$source_src ="http://путь_к_скриншоту_камеры"; //'path_2_source_image/source_image_file.gif';
# считываем параметры (высота/ширина, тип и т.п.)
# оригинальной картинки
$params = getimagesize($source_src);
# в зависимости от типа оригинальной картинки
# применяем соответствующую функцию для считывания
# и создания изображения с которым будем работать
switch ( $params[2] )
{
case 1: $source = imagecreatefromgif($source_src); break;
case 2: $source = imagecreatefromjpeg($source_src); break;
case 3: $source = imagecreatefrompng($source_src); break;
}
# максимально допустимый размер
# (по ширине/высоте) уменьшенной картинки
$max_size = 320;
# если ширина или высота оригинальной картинки
# больше ограничения производим вычисления
if ( $params[0]>$max_size || $params[1]>$max_size )
{
# выбираем большее: ширины или высота
# оригинальной картинки
if ( $params[0]>$params[1] ) $size = $params[0]; # ширина
else $size = $params[1]; # высота
# используя нехитрую пропорцию вычислям
# ширину и высоту уменьшенной картинки
$resource_width = floor($params[0] * $max_size / $size);
$resource_height = floor($params[1] * $max_size / $size);
$resource = imagecreatetruecolor($resource_width, $resource_height); // создание «подкладки»
# изменение размера и копирование полученного на «подкладку»
imagecopyresampled($resource, $source, 0, 0, 0, 0,$resource_width, $resource_height, $params[0], $params[1]);
}
# если изменять размер не надо просто присваиваем переменной
# $resource идентификатор оригинальной картинки
else $resource = $source;
# путь и имя файла уменьшенной картинки
$resource_src = 'cms/test2.jpg';
# выводит уменьшенную картинку
imagejpeg($resource, $resource_src);
//********************************************************************
if (file_exists('./reboot') || $_GET['onetime'])
{
$db->Disconnect();
exit;
}
sleep(1);
}
DebMes("Unexpected close of cycle: " . basename(__FILE__));
?>
Код: Выделить всё
<script>
var i = 1, int, cont, img;
cont = document.body;
int = setInterval(function () {
img = document.createElement('img');
img.src = '/cms/test2.jpg?' + Math.random() + '';
img.style.zIndex = i++;
img.style.position = 'absolute';
cont.appendChild(img);
if (document.getElementsByTagName('img').length >= 3) {
cont.removeChild(document.getElementsByTagName('img')[0]);
}
}, 1000);
</script>
<div id="img">
</div>
p.s. Насчет "обхода" проблемы с Мегафоном - это отдельная история.