Подключение IP-камер

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

denis
Сообщения: 284
Зарегистрирован: Сб ноя 24, 2012 11:47 am
Благодарил (а): 29 раз
Поблагодарили: 28 раз

Re: Подключение IP-камер

Сообщение denis » Пт май 15, 2015 3:00 pm

Поделюсь своим опытом, вывода картинки с IP-камеры, для просмотра удаленно. Для локального просмотра все гораздо проще.

Исходные данные:
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__));

?>
2. Создали домашнюю страницу со следующим кодом (обновление 1 раз в секунду):

Код: Выделить всё

<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. Насчет "обхода" проблемы с Мегафоном - это отдельная история.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Подключение IP-камер

Сообщение sergejey » Пт май 15, 2015 3:45 pm

Возможно, имеет смысл картинку стягивать с камеры по запросу ибо немного накладно её в цикле обновлять, когда на неё никто не смотрит.

P.S. подскажу ещё один вариант выводить картинку с любой камеры из домашней сети. В меню, например, можно создать html-блок и туда прописать такой код:
[#module name="thumb" url="http://192.168.0.11:8080/photoaf.jpg" width="290" enlarge="1"#]
вместо http://192.168.0.11:8080/photoaf.jpg -- путь к картинке с вашей камеры.
динамически оно не обновляется, но картинку выводит без проброса портов непосредственно к камере

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 140 раз
Контактная информация:

Re: Подключение IP-камер

Сообщение ErmolenkoM » Пт май 15, 2015 3:50 pm

Со своей китайской камеры проблему показа картинки в любой сети решал так:
В настройках камеры на событие АЛАРМ сохранять картинку на ФТП, МЖД показывала эту картинку на домашней странице.
aka msh555
Cubian на Cubietruck, Connect
denis
Сообщения: 284
Зарегистрирован: Сб ноя 24, 2012 11:47 am
Благодарил (а): 29 раз
Поблагодарили: 28 раз

Re: Подключение IP-камер

Сообщение denis » Пт май 15, 2015 4:38 pm

Возможно, имеет смысл картинку стягивать с камеры по запросу ибо немного накладно её в цикле обновлять, когда на неё никто не смотрит.
Можно и по запросу, только не знаю как определить - смотрят сейчас на страницу (открыта она) или нет?
У меня то основная проблема в скорости канала + невозможность смотреть на телефоне с Мегафоном - ни один онлайн сервис нормально не коннектится(, видеоролики и фото по расписанию заливаю на домашний архив по FTP, чтобы можно было качать хоть со скоростью 1 кБайт/сек - иногда доходит и до такого)) но зато надежно, все докачается.
Может кто и поможет с запросом на моем примере.
А пример Ваш сейчас попробую, чтобы если нужно можно было получить изображение на все 5 Мп камеры.
Последний раз редактировалось denis Пт май 15, 2015 4:41 pm, всего редактировалось 1 раз.
denis
Сообщения: 284
Зарегистрирован: Сб ноя 24, 2012 11:47 am
Благодарил (а): 29 раз
Поблагодарили: 28 раз

Re: Подключение IP-камер

Сообщение denis » Пт май 15, 2015 4:41 pm

msh555 писал(а):Со своей китайской камеры проблему показа картинки в любой сети решал так:
В настройках камеры на событие АЛАРМ сохранять картинку на ФТП, МЖД показывала эту картинку на домашней странице.
Ну а если без событий? и хочется в онлайн?) вот сейчас наблюдаю за строителями.
Аларм по движению на изображении особенно прикольно, когда идет дождь, снег, шевелится трава... по уму для улицы конечно надо нормальные датчики иметь, без всякой "улучшенной видеоаналитики" - это только для помещений.
denis
Сообщения: 284
Зарегистрирован: Сб ноя 24, 2012 11:47 am
Благодарил (а): 29 раз
Поблагодарили: 28 раз

Re: Подключение IP-камер

Сообщение denis » Пт май 15, 2015 4:46 pm

sergejey писал(а):Возможно, имеет смысл картинку стягивать с камеры по запросу ибо немного накладно её в цикле обновлять, когда на неё никто не смотрит.

P.S. подскажу ещё один вариант выводить картинку с любой камеры из домашней сети. В меню, например, можно создать html-блок и туда прописать такой код:
[#module name="thumb" url="http://192.168.0.11:8080/photoaf.jpg" width="290" enlarge="1"#]
вместо http://192.168.0.11:8080/photoaf.jpg -- путь к картинке с вашей камеры.
динамически оно не обновляется, но картинку выводит без проброса портов непосредственно к камере
Что-то видимо делаю не так, но у меня просто значок "пустой картинки" - при нажатии всплывающее окно со ссылкой.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Подключение IP-камер

Сообщение sergejey » Пт май 15, 2015 4:52 pm

denis писал(а):Что-то видимо делаю не так, но у меня просто значок "пустой картинки" - при нажатии всплывающее окно со ссылкой.
М... может быть у вас не установлено того обновления, в котором эта функция появилась? Месяца два назад было, если не ошибаюсь.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
denis
Сообщения: 284
Зарегистрирован: Сб ноя 24, 2012 11:47 am
Благодарил (а): 29 раз
Поблагодарили: 28 раз

Re: Подключение IP-камер

Сообщение denis » Пт май 15, 2015 5:14 pm

sergejey писал(а):
denis писал(а):Что-то видимо делаю не так, но у меня просто значок "пустой картинки" - при нажатии всплывающее окно со ссылкой.
М... может быть у вас не установлено того обновления, в котором эта функция появилась? Месяца два назад было, если не ошибаюсь.
Обновление от 26.04.2015.
UPD: обновил только что.

вот моя строка в меню

[#module name="thumb" url="http://login:pass@xxx.xxx.xxx.xxx:xxxx/Streaming/channels/1/picture?snapShotImageType=JPEG" width="100" enlarge="1"#]
ignat99
Сообщения: 206
Зарегистрирован: Сб дек 21, 2013 9:21 pm
Откуда: Spain
Благодарил (а): 1 раз
Поблагодарили: 22 раза

Re: Подключение IP-камер

Сообщение ignat99 » Сб май 16, 2015 11:06 am

crtmpserver

http://wiki.rtmpd.com/tutorial_live_stream_file

http://taqlim.blogspot.de/2014/11/video ... 20som.html

Вот это самое современное и верное решение проблемы с видеостримингом. crtmpserver - написан на C++, работает под A20, RPi и других платах с аппаратной обработкой видео потока. Настраивается скриптами на LUA.

Основной скрипт запускает отдельные процессы по приёме и выдаче потоков. Настройки отдельных процессов в /etc/crtmpserver/application/*

Особо не чего настраивать не надо, только указать порты или взять готовые скрипты. Могу опубликовать скрипты от Olimex A20 или их можно найти в репозитарии Olimex.

Как будет работать с урезанным Мегафон 3G не знаю. С нормальным VIP 3G ( который без лимита) будет работать очень хорошо.
denis
Сообщения: 284
Зарегистрирован: Сб ноя 24, 2012 11:47 am
Благодарил (а): 29 раз
Поблагодарили: 28 раз

Re: Подключение IP-камер

Сообщение denis » Сб май 16, 2015 11:13 pm

Касаемо моей ситуации, дело в том, что у мегафона аплинк (обратный канал) медленный, как и у всех сетей 3g. А так он не урезанный, безлимитный, со статическим ip-адресом, что редкость для мобильного оператора. За наводку спасибо, посмотрю.
Ответить