ce7aa6cb8ddc289c5a7aa125969a29c9350d78ed
Параллельный MQTT subscriber на отдельный topic (default yoloworld/events)
от yolo-world-detector сервиса. Использует те же --detection-cell что
Frigate, но рендерит bbox magenta цветом (Y=105 U=212 V=234) вместо
зелёного (Y=210 U=50 V=100).
На одной картинке композитор может одновременно показать:
- зелёный bbox от Frigate (person/car/...)
- magenta bbox от yolo-world (fox/dog/drone/...)
Backward compat 100% — без --yw-mqtt никаких изменений в поведении.
Архитектурно:
- Второй cfc_frigate_mqtt_t (тот же envelope schema через
cfc_frigate_mqtt parser — yolo-world-detector публикует
Frigate-compat events)
- Параллельный yw_detbox_overlays[] с magenta colors
- yolo-world subscriber не управляет motion-layout (composer=NULL),
только Frigate шлёт motion-pulse'ы
Verify build:
cmake --build build # все 4 target'а (grid_record, simple_record,
# grid_record_cpp, cuframes_composer_static)
Live test пока через docker recreate в Phase 5 deploy, после того
как yolo-world publish'ит в реальный MQTT.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
cuframes-composer
CUDA-композитор multi-source видео в один H.264 RTSP-поток с авто-раскладкой по motion и runtime-управлением через ONVIF/ZMQ.
Заменяет монолитный ffmpeg-конвейер (ffmpeg + vf_cuda_grid фильтр) для
случаев, когда нужно:
- Поток продолжает работать при потере любого числа источников (graceful degradation, blank cells вместо crash'а)
- Композитор сам управляет частотой кадров без зависимости от ffmpeg-демухера
- Минимум перемещений данных: zero-copy CUDA от cuframes-publisher до NVENC
- Auto-layout по движению (Frigate-driven), без оператора
- Управление с TV через ONVIF PTZ
Что внутри
- CUDA-композитор (C++ ООП-ядро + extern "C" ABI, Phase 11b)
- Auto-layout с asymmetric hysteresis + best-fit selection
- PTZ-override через ONVIF (с auto-возвратом в motion-mode)
- MQTT-driven text overlays (температура, статусы, etc.)
- Detection box overlay от Frigate, следует за камерой при смене layout
- ZMQ control plane для runtime-управления (set_layout, set_text, ...)
- NVENC через
dlopen(LGPL-совместимая интеграция)
Документация
| Русский | English | |
|---|---|---|
| Для пользователя | docs/ru/user.md | docs/en/user.md |
| Для разработчика | docs/ru/developer.md | docs/en/developer.md |
| Operations / deploy | docs/ru/operations.md | docs/en/operations.md |
Статус
Phase 11b — production. Развёрнут на R9-88.23 в составе CCTV-стека.
См. STATE.md для текущего состояния
infra и git-history main для эволюции по фазам.
Зависимости
- cuframes — zero-copy frame delivery от RTSP-publisher'а к composer'у. Подключена как git submodule.
- nv-codec-headers —
MIT-licensed заголовки NVENC API (submodule).
libnvidia-encode.soгрузится черезdlopenв runtime для LGPL-совместимости. - CUDA Toolkit 12.x+ (cudart, nvcc, driver API)
- NVIDIA driver 525+ (NVENC, cuMemCreate POSIX FD)
- FreeType, libpng, libzmq, libjson-c, libmosquitto, libavformat/avcodec/avutil
- Linux 64-bit (POSIX shm, SCM_RIGHTS, named pipes)
Quick start (host build)
git submodule update --init --recursive
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)
Артефакты:
build/src/libcuframes_composer.so— shared librarybuild/examples/grid_record— main CLI entry (C)build/examples/grid_record_cpp— C++ smoke test
Запуск (1 камера, motion-mode, JSON-templates):
build/examples/grid_record \
--out=/tmp/grid.h264 --fps=25 --bitrate=6000 \
--width=1920 --height=1080 \
--source=cam-parking,frigate=parking_overview,priority=100 \
--motion-mode --motion-ttl=45000 \
--templates=docker/templates.json \
--mqtt-overlays=docker/mqtt_overlays.json
Production deploy и jammy-build — см. docs/ru/operations.md.
Архитектура одной картинкой
Frigate ──MQTT events──→ frigate_mqtt subscriber
│
↓ motion_pulse
cuframes-pub-* ──VMM──→ Composer (C++ Cell/Layout/Decoration)
│
↓ best-fit + hysteresis
Layout::apply()
│
↓ NV12 zero-copy
NVENC ──→ H.264 pipe
↓
cfc-grid-ffmpeg
↓ RTSP push
mediamtx ──→ TV/VLC/HLS/WebRTC
↑
cctv-onvif (PTZ → ZMQ set_layout)
Подробности — docs/ru/developer.md §1.
Лицензия
LGPL-2.1+
Languages
C
62.1%
C++
29.7%
Cuda
3.5%
CMake
3.2%
Dockerfile
1.5%