ВИДЕОНАБЛЮДЕНИЕ: «смотреть могут не только лишь все» (c)
Известно, что видеокамеры бывают аналоговые и цифровые. Но раз руководство взяло твердый курс на «цифровизацию», мы тоже выберем для опытов IP-камеру.
Поверхностное изучение широчайшего ассортимента, представленного нашими китайскими товарищами, привело к формированию у меня устойчивого впечатления, что все они «разлиты из одной бочки». Может впечатление и ошибочное, но, похоже, что все многообразие камер производится с использованием не только ограниченного набора одних и тех же видеочипов (что, в общем-то, понятно), но и одинаковых корпусов, различаясь лишь торговым знаком на боковине. Так что, не долго думая, я остановил свой выбор на такой камере (
https://ru.aliexpress.com/item/MISECU-2 ... 33edUy23zR).
Для того, чтобы посмотреть видео с камеры, надо запустить браузер Enternet Explorer, набрать IP-адрес камеры (по умолчанию, 192.168.1.10), по появившейся ссылке скачать файл NewActive.exe и выполнить установку скачанных драйверов. Затем надо разрешить использование браузером надстройки ActiveX, ввести логин/пароль (по умолчанию admin/без пароля) и после этого можно любоваться видеоизображением в интерфейсе от производителя. В других браузерах все это, по всей видимости, работать не будет.
Однако нам требуется увидеть изображение с камеры в системе УД. Посмотрим, чем для этого располагает Мажордомо.
FFmpeg (
https://majordomo.smartliving.ru/forum/ ... 06&start=5)
Как нам сообщает Википедия, FFmpeg – набор свободных библиотек с открытым исходным кодом, которые позволяют записывать, конвертировать и передавать цифровые аудио- и видеозаписи в различных форматах.
У меня на домашней странице заработала ссылка
Код: Выделить всё
[#module name="thumb" url="rtsp://192.168.1.10:554/user=admin&password=&channel=1&stream=1" live="1" width="320" enlarge="1"#]
При этом картинка с камеры обновляется с периодичностью в 3-4 секунды. То есть у нас получается слайдшоу.
Вот что пишет по этому поводу автор Мажордомо. Процитирую.
«
Модуль thumb предназначен для вытягивания картинок из потока, но не для трансляции потока. Чтобы в интерфейсе видеть поток, надо что б он был в формате MJPEG -- некоторые камеры предоставляют ссылку на такой поток (далеко не все), для других надо использовать транскодер, который "на лету" сможет перекодировать поток в формат MJPEG.»
Или вот еще цитата.
«
В вебе H.264 нельзя посмотреть стандартными средствами. Нужны либо какие-то плагины (java/activex и т.п.), встроенные в браузер кодеки его не покажут. Ищите отдельный софт для перекодировки потока на лету и используйте уже выходной поток для встраивания в интерфейс.»
Ладно, идем дальше.
Оказывается, очень многие камеры делают фото по команде
Код: Выделить всё
http://192.168.1.10/webcapture.jpg?command=snap&channel=0
Картинка приходит в разрешении 704х576.
Ну или после уборки.
В Мажордомо ее можно вставить в нужные места (на сцены, домашние страницы, в меню).
Если вставить такой код в домашнюю страницу (тип HTML), то картинка будет обновляться каждые 2 секунды.
Код: Выделить всё
<div id="img_reload">
<img src="img.jpg" />
</div>
<script>
setInterval(function(){
var img_tag = '<img src="http://192.168.1.10/webcapture.jpg?command=snap&channel=0?img' +Math.random(0,100)+ '" />';
document.getElementById('img_reload').innerHTML = img_tag
}
,
2000);
</script>
Правда, перед появлением новой картинки старая на какое-то время пропадает и получается что-то вроде «моргания» изображения. Наверняка, если потратить несколько больше времени, в Интернете найдется правильный код для «подгрузки» картинок без такого неприятного эффекта. Может и тут возможно что-то подправить и «моргание» исчезнет, но, к сожалению, «чукча не писатель».
И вот под эти благостные разговоры чуть было не упустил из виду один важный вопрос. На глазах изумленной публики мы только что получили фотографии с камеры без авторизации! Достаточно было знать IP-адрес, на котором «висит» камера. Установил пароль для доступа к камере. Но ничего не поменялось, всякий «встречный-поперечный» может сделать снапшот, не заморачиваясь этими формальностями. Для себя делаю вывод: хочешь – не хочешь, а овладевать навыками по настройке сети придется. Вывод, в общем-то естественный, для тех, кто решился открыть доступ к своей системе УД извне. Однако с такой «осязаемой» очевидностью это умозаключение не посещало меня раньше никогда.
Картинка – это, конечно, хорошо, но от видеокамеры мы ожидаем большего.
Наверное, большинство современных IP-камер поддерживают спецификации
ONVIF. И моя камера не стала исключением. Для облегчения подключения к Мажордомо оборудования, поддерживающего протокол ONVIF, создан одноименный модуль (
https://majordomo.smartliving.ru/forum/ ... f=5&t=3777). Установим его и посмотрим, что это даст.
Модуль задумывался для следующего (цитирую):
«
* Автоматический поиск камер в локальной сети (Discovery)
* Чтение параметров найденных камер (в том числе доступных медиа-потоков с примером кода для использования в системе)
* Подписка и опрос событий с камеры (очень экспериментально)».
Моя камера нашлась автоматически (кнопка Discovery).
Присвоим ей удобоваримое название. На вкладке общие, сгенерировались ссылки, которые можно сразу использовать в коде. Красота!
Stream URL:
Код: Выделить всё
rtsp://192.168.1.10:554/user=admin_password=tlJwpbo6_channel=1_stream=0.sdp?real_stream
Snapshot code:
Код: Выделить всё
[#module name="thumb" url="rtsp://192.168.1.10:554/user=admin_password=tlJwpbo6_channel=1_stream=0.sdp?real_stream"#]
Video code:
Код: Выделить всё
[#module name="thumb" url="rtsp://192.168.1.10:554/user=admin_password=tlJwpbo6_channel=1_stream=0.sdp?real_stream" live="1"#]
Вставляем код для видеопотока на домашнюю страницу и видим… Картинка из потока 1 не уместилась на экран целиком и нижняя часть кадра как-то смазана (видимо не успевает подгружаться или какие-то «глюки»). Добавим масшатбирование.
Код: Выделить всё
[#module name="thumb" url="rtsp://192.168.1.10:554/user=admin_password=tlJwpbo6_channel=1_stream=0.sdp?real_stream" live="1" width="960" username="admin" password=""#]
Теперь изображение уместилось на экране, однако «брак» нижней части картинки сохранился. И картинка отображается в виде слайдшоу, подгружаясь раз в 10 секунд.
Интересно, если вставить вот такой код, то артефакты исчезают, и картинка начинает подгружаться с частотой раз в 3-4 секунды.
Код: Выделить всё
[#module name="thumb" url="rtsp://admin:@192.168.1.10/user=admin&password=&channel=1&stream=1.sdp" live="1" width="960" username="admin" password=""#]
Складывается ощущение, что в этом случае подхватывается второй поток. Мы видим, что изображение приходит в виде слайдшоу. Видимо, потому что для извлечения кадров с камеры используется тот же самый FFmpeg (судя по названию модуля в коде).
Попробуем использовать ссылку на второй поток, сгенерированную модулем ONVIF.
Код: Выделить всё
[#module name="thumb" url="rtsp://192.168.1.10:554/user=admin_password=tlJwpbo6_channel=1_stream=1.sdp?real_stream" live="1"#]
Картинка приходит с частотой раз в 3-4 секунды без артефактов. Однако иногда самый низ изображения не подгружается.
Еще, как признается автор модуля, задумку с модулем ONVIF не получилось реализовать до конца. Не удалось реализовать подписку и опрос событий с камеры (например, обнаружение движения). Ну да ладно, определенная польза от модуля все равно есть.
Переходим к следующему пункту программы.
Кому-то удается получить ссылку вывода потока с камеры на html-страницу (
https://majordomo.smartliving.ru/forum/ ... 19&start=6). Я тоже попробовал. Увы, не получилось. Наверное, «я просто не умею их [видеокамеры] готовить».
И как всегда, когда все остальные способы испробованы, нашего человека посещает светлая мысль почитать инструкцию (
https://kb.smartliving.ru/подключение-ip-камер/), чтобы найти способ правильный. Читать надо с «
Для тех кто по какой то причине не может получить видеопоток со своей камеры, предлагаю». Да-да, наконец-то, это то, что нужно (для «валенков» вроде меня).
Итак, перед нами отечественная система видеонаблюдения «
Линия». Демоверсия отличается от полнофункциональной отсутствием возможности записи архива. Хотя среди тысяч поддерживаемых камер, которые перечислил производитель ПО на своем сайте, моей модели не оказалось, Линия «подцепила» ее секунд за 10-15. Не буду повторять написанное в инструкции. Остановлюсь лишь на настройках, которые помогут вывести видеоизображение в Мажордомо. Нам достаточно знать адрес нашего сервера и порт, на котором «висит» веб-сервер Линии.
Тогда на на Домашней странице (тип «Url») нужно просто вставить ссылку (адрес_сервера:порт_веб-сервера_Линии):
В интерфейсе это может выглядеть вот так [под спойлером] (
https://majordomo.smartliving.ru/forum/ ... 69&start=9).
На сцене заработает код в HTML-элементе:
Код: Выделить всё
<iframe width="480" height="270" src="http://192.168.0.103:9786" frameborder="0" allowfullscreen></iframe>
Аналогичный код можно вставить и в меню (HTML-элемент) с поправкой на меньшую ширину и высоту картинки. У меня неплохо вписалось при width="240" height="140". Правда, разглядеть что-нибудь при таком небольшом разрешении непросто.
Ну что ж, дело пошло. Фактическая скорость смены кадров с моей камеры оказалась около 15/сек. Линия умеет детектировать движение, анализируя видеопоток с камеры, и располагает очень широким функционалом реакций на различные события. Посмотрим, как инициировать какое-нибудь действие в Мажордомо при обнаружении движения. Оказалось, все элементарно. Например, можно в тестовых целях в Сценариях создать скрипт «Test» с простейшим кодом.
Внизу видим ссылку на запуск скрипта из командной строки: «C:\_majordomo\htdocs\obj.bat script:Test».
В «Линии» в разделе «Реакции» вставим эту ссылку в «Действия».
В результате при обнаружении движения Алиса будет, как минимум, писать о том, что обнаружено движение. Разумеется, содержание скрипта может быть любым, от включения света в помещении, где Линия детектировала движение, до запуска циклограммы на старт ракеты для высадки на Луну.
Разбираясь в «Реакциях» с запуском внешних программ, поначалу в тестовых целях пытался открыть стандартный Блокнот Windows (C:\WINDOWS\System32\notepad.exe). И ничего не происходило, хотя детекция движения Линией явно осуществлялась. Написал в службу поддержки Линии по этому поводу, и вот что они ответили.
«
Процесс запускается как дочерний кернела, поэтому у него системный приоритет и запускается он в сессии служб, т.е. не виден пользователю (в диспетчере задач вы можете увидеть, что Notepad запущен).»
И точно, в диспетчере задач оказалась целая куча Блокнотов.
А как все это великолепие смотрится со смартфона/планшета (в данном случае говорю про устройства под управлением Андроид)? А никак. Потому что Линия для отображения в браузере использует Adobe Flash, а браузеры под современные версии Андроид Adobe Flash не поддерживают. По крайней мере, мне не удалось запустить это дополнение на десятке испробованных браузеров.
У линии есть бесплатные мобильные клиенты для устройств на Android и iOS (
https://devline.ru/sistema_videonabljud ... e-clients/). Установил – работает. Видеопоток льется на экран мобильного устройства непрерывной «струйкой». А нам-то надо в браузере! Ну, вы уже догадались, куда я написал.
«
Для просмотра через браузер мобильных устройств вы можете воспользоваться нашим сервисом (https://devline.ru/translation/)».
Это, конечно, здорово. Только поди догадайся, нужен ли тебе белый IP, есть ли он у тебя, нужно ли делать проброс портов, ну и вообще, как все это узнать и сделать? Так что нужны вполне определенные навыки сетевого администрирования, которые «с ходу» не выработаешь.
Мне бы на данном этапе добиться показа видеоизображения с камеры в браузере смартфона/планшета (без доп.плагинов) без использования сторонних интернет-сервисов, из собственной локальной сети.
Размышляя об этом, пока перечислю умные слова (названия программ), которые я повстречал, читая форум по теме видеонаблюдения:
Avreg
Axxon Next
ContaCam
iSpy
Motion
Webcam XP
Zoneminder
Что-то работает только из-под Windows, что-то – из-под Linux. Возможно, есть и кроссплатформенные, не изучал. Используя это ПО, народ тоже добивался нужных результатов. Может быть, для кого-то окажется полезным.
Попытаем «счастья» наблюдать видео в УД из локальной сети на смартфоне/планшете из другой программы, например,
ContaCam.
Вот так видео с ContaCam выглядит в интерфейсе Мажордомо (
https://majordomo.smartliving.ru/forum/ ... =23&t=4874).
Самым сложным было найти полный адрес ссылки на поток с камеры. Ведь в отличии от Линии в ContaCam надо указать полный адрес ссылки, а не просто IP-адрес камеры. Помогла подсказка из справки по ContaCam (
http://www.ispyconnect.com/sources.aspx), где заветную ссылку удалось раздобыть.
Код: Выделить всё
rtsp://192.168.1.10/user=admin_password=tlJwpbo6_channel=1_stream=0.sdp
Ссылка в УД на видеопоток с ContaCam будет иметь вид http://IP_Адрес_Сервера:Порт_HTTP_ContaCam. Порт узнаем в общих настройках программы. У меня это 8800.
На домашней странице или на сцене можно разместить видеоизображение так (тип HTML Code)
Код: Выделить всё
<iframe src="http://192.168.0.103:8800/index.php" width="100%" height="100%" frameborder="no" allowtransparency></iframe>
или так (тип URL)
В меню, поскольку картинка маленькая, желательно предотвратить появление полос прокрутки (тип HTML Code)
Код: Выделить всё
<iframe src="http://192.168.0.103:8800/index.php" width="100%" height="100%" frameborder="no" scrolling="no" allowtransparency></iframe>
В результате видеопоток будет отображаться в УД с частотой смены картинки примерно 1 раз в секунду. И преспокойно отображаться в интерфейсе УД на смартфоне/планшете. Если нажать на картинку, то откроется страница с сервера ContaCam, где изображение будет показываться в полноформатном варианте. Будем считать, что задача решена.
PS. Некоторые изображения для повышения художественной ценности и эстетического уровня модифицированы с помощью графического редактора.
ДОПОЛНЕНИЕ
Очень понравилась мне программа Линия. Простотой подключения камер, удобством настройки, понятным интерфейсом, широким функционалом. Сервер не особенно «нагружает», в сравнении, например, с ContaCam. Но в эту бочку меда примешивается ложка дегтя в виде Adobe Flash и, как следствие, невозможность просматривать изображение с камер в браузере на мобильных устройствах под управлением Андроид. Идея использовать одновременно сразу две программы видеонаблюдения (одну -- для основного интерфейса УД, другую -- для интерфеса под мобильные устройства) вызывает вполне понятные возражения. Системные ресурсы сервера «не резиновые». Но от безвыходности был готов допустить и такое расточительство. Однако выход нашелся.
Благодаря уважаемому
xsash (за что ему отдельное спасибо!), удалось узнать, что у Линии, оказывается, есть API (
https://devline.ru/aboutweb/).
Если на домашнюю страницу или сцену Мажордомо (элемент типа HTML) вставить такой код,
Код: Выделить всё
<img src="http://192.168.0.103:9786/cameras/0/video?resolution=480x270&fps=15&keep_aspect_ratio=0&authorization=Basic%20YWRtaW46">
то можно получить видеопоток с конкретной камеры, транслируемый веб-сервером Линии.
Разберем этот код подробнее.
192.168.0.103:9786 -- IP-адрес_сервера:Порт_веб-сервера_Линии. Данную информацию можно узнать в настройках Линии в разделе «Сеть» (скриншот, где это указано, я выкладывал выше).
cameras/0/ -- ссылка на номер камеры в Линии, с которой транслируется поток. Если видеопоток заведен на «camera1», то указывать надо «0».
resolution=480x270 -- разрешение изображения. Если не задано, используется текущее разрешение камеры.
fps=15 -- максимальное количество кадров в секунду. Если параметр не задан явно, используются текущие настройки камеры.
keep_aspect_ratio=0 -- сохранять оригинальное соотношение сторон: 0 - нет, 1 - да. По умолчанию 0 (нет).
authorization=Basic%20YWRtaW46 -- параметры авторизации (логин/пароль) для доступа к потоку от камеры.
%20 -- это пробел,
YWRtaW46 -- логин:пароль в кодировке BASE64 (в моем случае -- это «admin:»). Причем надо уточнить, что это логин и пароль для авторизации пользователя в ПО Линия, а не логин/пароль от "админки" камеры.
Для меню у меня неплохо подошло разрешение 240x135.
ДОПОЛНЕНИЕ 2
Появилась у меня камера с функцией PTZ (поворота объектива вокруг вертикальной и горизонтальной осей). Ранее для себя "краем глаза" отмечал, что в ПО Линия эта функция поддерживается. Но настраивал и так и эдак, ничего не выходило. Не "подхватывала" Линия поворот камеры, хоть ты тресни.
И тут я вспомнил, что у них (разработчиков ПО Линия) есть замечательная служба поддержки. Написал им, попытался выполнить написанные рекомендации, однако, видимо, что-то не так сделал и положительного результата не добился. Но служба поддержки то замечательная. Подключились, настроили, и все заработало. За что выражаю им большую благодарность.
Теперь про правильные настройки. Ну, понятное дело, что в Линии поворотную камеру надо отметить как устройство PTZ. А нюансы настройки лучше показать на картинках.
В админке камеры:
В ПО Линия:
Примечание: данная версия API существовала, как минимум до версии ПО Линии
7.5.0 (возможно, до v.7.7.0). Для более старших версий программы
API было изменено, и мне пока не удалось оттуда запустить видеопоток в браузер, поэтому пользуюсь версией 7.5.0.