Возможности
Всё, что ниже, уже есть в продукте.
Видеостены
Мониторы один раз настраивает администратор, а открывают операторы. Доступные раскладки:
1x1, 1x2, 2x2, 1+5, 1+7, 3x3, 4x3, 4x4.
Каждая ячейка живёт своей жизнью: переключается между живым видео и архивом, перебирает потоки
камеры (main, sub, …), разворачивается на весь экран, показывает пульт PTZ и управление реле —
не выходя со стены.
Ячейка ещё и сама выбирает подходящий поток. Маленькая плитка на стене 4x4 открывает дополнительный поток вместо основного в полном разрешении и бесшовно переключается, когда плитку увеличивают: решение принимается по параметрам кадра, которые рекордер реально видит, а не по записанной в конфигурации подписи. Именно это держит стену из шестнадцати камер плавной.
Операторам доступны и доски расследования: собственные временные стены, всегда в режиме воспроизведения, с любыми камерами, к которым у оператора есть доступ. Готовую доску можно передать копией другому пользователю.
Синхронное воспроизведение
Вся стена живёт на одном курсоре времени. Воспроизведение, пауза, шаг ±30 секунд, переход на точную дату и время, прыжок на предыдущий или следующий день, где запись действительно есть, — все ячейки двигаются вместе.
Совпадение кадров между камерами не приблизительное: архив отдаётся по HLS с якорями реального
времени EXT-X-PROGRAM-DATE-TIME, поэтому ячейки стоят на одном и том же мгновении.
Шкала под картинкой показывает полосы покрытия — что действительно записано — и скобки событий, и масштабируется вплоть до секунды.

Запись
Профили — три режима:
| Режим | Поведение |
|---|---|
| Непрерывный | пишет всё время, пока камера на охране |
| Предтревожный | держит кольцевой буфер и сохраняет его, когда сработала тревога |
| Выключено | не пишет |

Предзапись, послезапись и длина сегмента задаются в секундах. Предтревожный режим — это то, что сохраняет кадры до срабатывания: кольцевой буфер постоянно подчищается, и остаются только клипы, привязанные к тревоге.
Расписания — именованные, с учётом часового пояса, рисуются на недельной сетке шагом 15 минут, уточняются вписанными вручную диапазонами с точностью до секунды, плюс отдельные конкретные даты. Настройка опережения запускает запись раньше начала окна.

Хранилища — заведите сколько угодно томов и назначьте камере несколько по приоритету. Если путь основного тома недоступен, рекордер сам переходит на следующий. Том можно и вручную вывести из эксплуатации — рекордер будет его пропускать.
Запись, которая не может состояться, больше не выглядит как идущая запись. Перед включением записи у файловой службы спрашивают, возможна ли она: камера без назначенного хранилища, недоступный путь или том, отказавшийся принять пробный файл, называются прямо в момент нажатия, с причиной, а не обнаруживаются потом по отсутствующим файлам. В списке камер красная рамка означает, что запись идёт прямо сейчас; материал, который просто хранится, помечен отдельно.
Видеоаналитика
Распознавание работает на OpenVINO, на CPU или GPU. В образе две модели: детектор YOLO11 для людей и транспорта и отдельный детектор лиц. Ничего скачивать и монтировать не нужно.
Аналитика включается на поток, а не на камеру: направьте её на дополнительный поток, и основной останется нетронутым для записи. У каждого наблюдения задаются:
| Настройка | Что делает |
|---|---|
| Классы | человек, лицо, транспорт — в любом сочетании |
| Минимальная уверенность | детекции ниже порога отбрасываются |
| Частота выборки | сколько кадров в секунду реально смотрятся; для большинства сцен хватает 1–2 |
| Таймаут события | сколько ждать без детекций, прежде чем закрыть событие |
| Отладочные вырезки | сохранять вырезанные картинки для разбора или сэкономить место |
Охрана — про запись, а не про наблюдение: камера, которая просто пишет круглосуточно, всё равно размечается детекциями и событиями, поэтому в её архиве есть рамки, а её клипы можно пересжимать. Стоимость аналитики задаётся самим наблюдением: частотой выборки или тем, что оно выключено.
Рекордер публикует детектору отдельный поток, вместо того чтобы тот читал ту же дорожку, которую смотрит оператор. Поэтому включённая аналитика больше не конкурирует с живым просмотром.

Переопознание между камерами. Каждому найденному телу считается признак внешнего вида, и появления сопоставляются со скользящей галереей. Человек, переходящий с камеры на камеру, остаётся одним объектом и группируется в одно событие вместо отдельного события на каждую камеру — то же самое, когда он вышел из кадра и вернулся.
Что видит оператор:
- события, сгруппированные по источнику (аналитика или ONVIF), с длительностью и покрывающими их клипами;
- галерею вырезанных миниатюр по событию, увеличиваются щелчком;
- рамки поверх живого видео — одно server-sent-events соединение на всю стену, отфильтрованное по правам смотрящего;
- один щелчок из события — и вы в синхронном воспроизведении, ровно на этом моменте.
Детекции, вырезки и события подчищаются по сроку хранения и по лимиту размера, так что аналитика не съедает том незаметно.
Поиск по внешности
Каждая детекция может хранить признак внешнего вида, и архив превращается в то, что запрашивают по объекту, а не по времени. Отправная точка — рамка, по которой щёлкнули на живом видео, детекция из события, трек в архиве или загруженный JPEG; система ранжирует похожие появления по всем камерам.
| Типы объектов | человек, лицо, транспорт, автомобильный номер |
| Где искать | любое подмножество камер, доступных пользователю |
| Когда | произвольный интервал времени |
| Насколько строго | порог сходства; лицам между камерами обычно нужен порог ниже, чем телам |
Результаты сгруппированы по появлениям, а не выданы списком сырых совпадений: один трек на одной камере — одна строка, с лучшей вырезкой, первым и последним появлением и переходом прямо в синхронное воспроизведение на этот момент. Если детекция попала в пробел записи — аналитика работала, а запись нет, — предлагается ближайший имеющийся материал, а не ошибка.
Это зацепка, а не опознание. Система ранжирует, кто похож; решает оператор.
Автонаведение PTZ
Поворотной камере можно передать движущийся объект, и она сама удержит его в кадре.
Оператор щёлкает по рамке на живом видео — дальше камера ведёт сама. Либо не щёлкает никто: камере задают упорядоченный список предпочтений — человек, лицо, транспорт — и она выбирает цель сама, круглосуточно, смотрит на неё кто-нибудь или нет. Рамки могут приходить от встроенного детектора, из ONVIF-метаданных самой камеры или от обоих сразу.
Закон управления держит объект в кадре, а не по центру: неподвижный и полностью видимый объект уже закадрирован правильно, и любая команда «улучшить» — это дёрганье картинки, купленное ни за что. Движение идёт короткими импульсами, по одному на появление, поэтому замолчавший источник детекций оставляет камеру стоять, а не уезжать. Потерянная за препятствием цель восстанавливается сначала по внешнему виду и только потом по близости, так что камера удерживает тот же объект, а не хватается за следующее, что шевельнулось.
Калибровка. Куда поедет картинка при повороте мотора, зависит от того, как камера повешена, поэтому каждую калибруют один раз: автоматически — система подталкивает оси и измеряет смещение фона — или мастером, в котором оператор сам выполняет движения и говорит, куда поехала картинка. Камера, висящая боком или вверх ногами, после этого ведёт правильно.
Какими камерами вообще можно управлять — это явный признак у камеры, а не ONVIF-возможность: прошивка объявляет службу PTZ независимо от того, стоял ли там когда-нибудь мотор.
Пересжатие архива
Обычное сжатие видео не знает, что в кадре важно: пустая стена и номер подъехавшей машины хранятся одинаково подробно. Система же знает, где были люди и машины, — она сама их там нашла, — поэтому завершённые клипы позже перекодируются так: эти области защищены, а всё остальное ужимается сильнее.
- Живое не трогается. Камера пишет как писала; пересжатие идёт потом, с настраиваемой задержкой, чтобы свежий материал, который как раз смотрят, остался в покое.
- Только те клипы, которые этого стоят. Клип без детекций пропускается: защищать нечего, а перекодировать просто так — терять качество. Остальное решает полоса покрытия: ниже неё детектор увидел слишком мало, выше — объекты занимают столько кадра, что платить за защиту уже нечем.
- При ничьей побеждает оригинал. Если перекодирование не дало выигрыша в размере, запись остаётся такой, какой её записали, и помечается соответственно.
- Железо, если оно есть. Intel Quick Sync, VA-API или CPU — выбирается автоматически, GPU не обязателен.
- Видно в интерфейсе. У записей показано, пережаты они или оставлены как есть, — оператор всегда понимает, что именно смотрит.
Замер на тестовой сцене 1280×720: HEVC 8,38 → 4,82 МБ (−42%), H.264 7,05 → 4,50 МБ (−36%). На клипе 2688×1520 из реального архива, с людьми крупным планом, — 39,55 → 31,23 МБ. Экономия тем больше, чем меньшую часть кадра нужно оставить чёткой, а качество внутри защищённых областей не падает.
Камеры и ONVIF
Камеры добавляются либо поиском — WS-Discovery сканирует сеть, показывает найденные устройства и их ONVIF-профили до того, как вы что-то подтвердите, — либо вводом RTSP-адреса вручную.
Камерой может быть и файл вместо устройства: направьте поток на видеофайл, и остальная система будет обращаться с ним ровно как с камерой. Удобно для демонстраций, для разбора уже записанного происшествия и для проверки развёртывания до того, как приедет железо.

Настройка самого устройства
Веб-интерфейс камеры не нужен. Вкладки появляются по тому, что устройство реально объявляет, — вы видите только то, что эта камера поддерживает:
- Видео — разрешение, частота кадров, битрейт, длина GOP, профиль H.264, кодирование
- Звук — битрейт, частота дискретизации
- Изображение — яркость, контраст, насыщенность, резкость
- PTZ — непрерывные, абсолютные и относительные перемещения; сохранение, вызов и удаление предустановок
- Входы-выходы — релейные выходы (моно/бистабильные, состояние покоя, задержка возврата) и цифровые входы
- Система — сведения об устройстве, время устройства, синхронизация часов с сервером, перезагрузка

Изменения пишутся прямо в камеру по ONVIF. Часы важнее, чем кажется: поиск по архиву и многокамерное воспроизведение выравниваются по реальному времени, поэтому камера, ушедшая на минуты, положит свой материал не на то место шкалы.
События от камеры
Подпишите камеру на её ONVIF-события и отфильтруйте их в тревоги по теме и тексту полезной нагрузки, с длительностью записи на каждый фильтр. Готовые заготовки закрывают обычные случаи — движение, детекция лица, пересечение линии, вторжение в зону, тревожные входы-выходы и детекция объектов, — а журнал событий показывает, что камера присылает на самом деле; это самый быстрый способ выяснить, как конкретная модель называет вещи.
Управление доступом
Вход через Keycloak необязателен. Включите его — получите роли и матрицу прав «пользователь × камера» по пяти отдельным действиям:
Живое · Архив · PTZ · Управление · Выгрузка
Права проверяются на сервере на каждом запросе — включая отдельные сегменты HLS и поток живых детекций, — а не просто прячутся в интерфейсе. Скачать клип целиком — отдельное право, не то же самое, что смотреть архив.
Архитектура
Система — набор небольших сервисов, общающихся по gRPC; изменения конфигурации разъезжаются публикацией событий, а не опросом. Благодаря этому она масштабируется вширь:
- несколько медиароутеров MediaMTX с распределёнными по ним камерами;
- несколько пар «рекордер + файловая служба», запросы к архиву расходятся по всем;
- воркеры аналитики, шардированные по хэшу, добавляются по мере роста нагрузки.
Технические характеристики
| Вход с камер | RTSP |
| Живое видео в браузер | WebRTC / WHEP через шлюз — браузер не обращается к медиасерверу напрямую и не видит его учётных данных |
| Живое перекодирование | H.265 отдаётся браузерам, которые умеют его декодировать; перекодирование в H.264 — настройка медиароутера, работает на VA-API с откатом на CPU |
| Воспроизведение архива | HLS с фрагментированным MP4 |
| Формат архива | фрагментированный MP4; H.264 и H.265 пишутся как пришли, без перекодирования |
| Звук | Opus без перекодирования, транскодируется, если источник другой |
| Стоп-кадры | извлечение JPEG из архива на любой момент времени |
| Безопасность медиасервера | без анонимного доступа; отдельные учётные записи на публикацию и чтение, хранятся на самом медиароутере |
| Пересжатие архива | Intel Quick Sync (VPL, mfxExtEncoderROI), VA-API или CPU (x265 / x264), выбирается автоматически |
| Автонаведение PTZ | один контур управления на камеру; цели от детектора или из ONVIF-метаданных; калибровка монтажа, автоматическая или с мастером |
| Поиск по сходству | Re-ID-признаки для человека, лица, транспорта и номера; поиск по набору камер и интервалу времени |
Про браузеры: H.264 играет везде. H.265 требует Firefox с libavcodec-extra, либо Chrome на
системе со свежим VA-API, либо аппаратного декодирования на macOS и Windows 11 — и для архива, и
для живого видео там, где медиароутер отдаёт H.265 как есть. Включённое на этом роутере
перекодирование в H.264 закрывает клиентов, которые так не умеют.
📩 Вопросы? Напишите нам