Имейте в виду, что все это основано на моем опыте работы с ZoneMinder. Многое из этого можно рассматривать как просто мнение. Хороший он или нет, решать вам.

Во-первых, почему мне важен ZoneMinder?

Я хочу создать платформу видеонаблюдения мирового класса. Тот, который может использовать каждый. Я месяцами рыскал по Интернету в поисках места для начала и снова и снова находил ZoneMinder в качестве ответа. Даже мой собственный брат предлагал это. После его использования и изучения кода в течение 2+ лет я был разочарован. Высокомерие разработчиков в сочетании с плохо написанным кодом.

Короче говоря, я потратил много времени и энергии на то, что не сработало, и это меня расстроило.

Потоки MJPEG устарели

С MJPEG вы открываете новый поток каждый раз, когда создаете изображение с URL-адресом MJPEG. Даже если вы удалите этот элемент, он продолжит потреблять ресурсы сервера и клиента. Единственный способ справиться с этим в настоящее время — через iframe, всплывающее окно или жесткое обновление.

Shinobi решает эту проблему с помощью потоков Websocket. Когда кадры захватываются FFMPEG, они кодируются в base64 и отправляются клиенту. Shinobi также может выводить HLS (m3u8), MJPEG (в iframe) и JPEG (по таймеру).

Потоки MJPEG ограничены во многих браузерах. Около 6–8 потоков максимум. Если вы не отключите это ограничение в настройках браузера, но, конечно, на мобильных устройствах эта опция обычно недоступна для пользователей.

В Shinobi вам не нужно беспокоиться о том, что с потоками Bas64 или JPEG вы можете обмануть браузер, просто позволив вам сделать это в любом случае. Base64 технически использует 1 канал для клиента, Websocket. В то время как JPEG просто обновляет изображение по таймеру.

Хранение JPEG ужасно

Сохранение каждого кадра в виде отдельного файла в формате JPEG может серьезно сказаться на объеме памяти и самом оборудовании.

Shinobi сохраняет в файлы WebM и MP4. Хотя MP4 занимает довольно много места... его уровень использования ЦП во время кодирования для потоков H.264 просто потрясающий.

Использование слишком большого количества языков

Платформа использует Perl, PHP, JavaScript, C++, HTML, CSS, MySQL и, возможно, многое другое. Это затрудняет модификацию кода для других целей.

Shinobi использует JavaScript, HTML, CSS и MySQL. Простой не так ли? Так и должно быть.

Устаревшие методы

При подключении к информационной панели он будет запрашивать в базе данных события каждые несколько минут, постоянно получая/подсчитывая одни и те же события снова и снова.

Shinobi использует веб-сокеты для получения данных о видео и событиях в режиме реального времени.

Для каждой камеры создается новый процесс каждый раз, когда зритель открывает поток. 1 поток = 1 процесс. Таким образом, если бы у вас была открыта 1 камера с 3 потоками, у вас было бы 3 активных процесса для каждого зрителя.

Shinobi использует 1 процесс на камеру для всех зрителей.

Несколько окон и страниц для простых вещей. Например окно настроек монитора. Он имеет несколько страниц. Несмотря на то, что каждая страница имеет фиксированный набор параметров, все входные данные присутствуют на странице. Они просто скрыты. Если бы они собирались это сделать, они могли бы использовать JavaScript для надлежащего отображения и скрытия полей. Вместо того, чтобы отправлять запрос на сервер при каждом изменении страницы.

В Shinobi есть все в одном окне, которое загружается при загрузке панели управления. Поля заполняются в зависимости от выбора камеры. Даже в этом случае данные камеры сохраняются в памяти клиентского браузера, чтобы легко загружать данные без дополнительного запроса к серверу.

Как упоминалось ранее, ZoneMinder использует Perl, PHP и C++. Эти языки сильны, без сомнения. Вопрос в их использовании. C++ потребует создания компонентов, что делает обновление болезненным. PHP полностью синхронен, что делает клиентские операции болезненными для вас и для системы, в которой он работает.

Shinobi использует JavaScript, что позволяет пользователям просто перезаписывать старые файлы Shinobi новыми, перезапускать процессы, и вы обновляетесь. Поскольку JavaScript является асинхронным и может передавать данные по конвейеру, у нас остаются небольшие накладные расходы, когда дело доходит до самого приложения узла.

Телеметрия (удаленное отслеживание пользователей)

Цитата из исходного кода: Этот скрипт собирает информацию об использовании локальной системы и отправляет ее команде разработчиков ZoneMinder. Эти данные будут использоваться для определения таких вещей, как кто и где находятся наши клиенты, насколько велики их системы, базовое оборудование и операционная система и т. д.. — ZoneMinder/scripts/zmtelemetry.pl.in

Эту функцию можно отключить. Хотя это никогда не должно было быть сделано в первую очередь или, по крайней мере, отключено по умолчанию. С точки зрения разработчика это отличная идея, но некоторым людям может не понравиться, что их информация где-то регистрируется, чтобы ее можно было украсть, а затем использовать злонамеренно. Параноик? возможно. Все, что имеет значение, это то, что есть несколько человек, которые этого не хотят и могут не осознавать, что они есть. Мы не знаем, отправляют ли другие части кода другие виды данных. Даже удивляться - это хлопотно. У Shinobi такой интеграции нет и никогда не будет.

Дополнительная проблема заключается в том, что третья сторона контролирует эти данные. Первоначальный автор не тот, кто его хранит. Буквально каждый может стать основным участником платформы завтра и слить всю информацию через 10 минут после этого.

Обновление: 22/06/2018 по умолчанию отключено.
Коммит: https://github.com/ZoneMinder/zoneminder/commit/422d2d6dbac0b985dbf01f30251329719379599f

Вывод

Менее чем за год Shinobi обладает более чем половиной возможностей ZoneMinder. Я не спец и не обучен программированию, учился дома — в мамином подвале. Когда кто-то заботится о чем-то, он посвятит этому свое время и усилия. Я забочусь о шиноби, поэтому он так быстро развивается.

Защитите то, что вам дорого, пока вы живете долго и процветаете.

Узнайте больше о шиноби на странице Почему.

См. сравнение функций ZoneMinder to Shinobi.