Files
cuframes-composer/README.md
T
gx ba68550f4c Phase 1: NVENC через dlopen + источник через cuframes_subscriber
Скелет проекта cuframes-composer (LGPL-2.1+) и MVP кодирования
одного источника в файл H.264.

Что включает Phase 1:

- LICENSE (LGPL-2.1+), README с поэтапным планом, корневой CMake
- Подмодули: cuframes v0.4 (pinned), nv-codec-headers (n12.2.72.0)
- include/cuframes_composer/source.h — публичный API источника
  с явной машиной состояний (DISCONNECTED → CONNECTING → ACTIVE →
  STALE → DEAD) и snapshot-паттерном для чтения без блокировки
- include/cuframes_composer/nvenc.h — публичный API кодировщика
  на CUdeviceptr-вход (zero-copy через VMM-mapped указатели)
- src/nvenc_loader.{h,c} — dlopen libnvidia-encode.so.1 и инициализация
  таблицы функций NVENC через NvEncodeAPICreateInstance. Идёт через
  pthread_once. Сделано отдельно чтобы держать LGPL-совместимость:
  проприетарный SDK не статически линкуется
- src/nvenc.c — обвязка над NVENC: open session, init encoder, кеш
  registered resources, encode/lock/unlock, flush с EOS, поддержка
  H.264 CBR low-latency, preset GUID p1/p4/p7
- src/source.c — обвязка над cuframes_subscriber c фоновым потоком,
  exponential backoff reconnect (1с → 30с), и переходами по таймаутам
  для stale/dead-детекта
- examples/simple_record — smoke-test программа: подписка на cuframes,
  кодирование, запись в .h264 файл, корректное завершение по SIGINT
2026-06-03 04:28:33 +01:00

56 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# cuframes-composer
Стандалонный композитор-демон для multi-source видео grid через CUDA + NVENC + RTSP.
Заменяет монолитный ffmpeg-конвейер (`ffmpeg + vf_cuda_grid` фильтр) для случаев, когда нужно:
- Поток продолжает работать при потере любого числа источников (graceful degradation)
- Композитор сам управляет частотой кадров и обработкой ошибок без зависимости от семантики ffmpeg-демухера
- Минимум перемещений данных: zero-copy CUDA от источника `cuframes` напрямую в NVENC
## Статус
**Phase 1 — MVP.** В разработке. Не для боевой эксплуатации.
См. [дизайн-документ](https://git.goldix.org/gx/cuframes/raw/branch/main/docs/DESIGN-composer-daemon.md) для архитектурных решений и поэтапного плана.
## Зависимости
- [cuframes](https://git.goldix.org/gx/cuframes) — библиотека zero-copy передачи кадров. Подключена как git submodule.
- [nv-codec-headers](https://github.com/FFmpeg/nv-codec-headers) — MIT-licensed заголовки NVENC API. Подключена как git submodule. Сама библиотека `libnvidia-encode.so` грузится через `dlopen` при старте (это даёт LGPL-совместимость — см. дизайн-документ часть 1.6).
- CUDA Toolkit 12.x+ (для cuda runtime и компиляции)
- NVIDIA драйвер 525+ (для NVENC и `cuMemCreate` POSIX FD)
- Linux 64-bit (POSIX shm, SCM_RIGHTS)
Дополнительно по фазам:
- Phase 3: `libfreetype` (текст), `lodepng` через submodule (PNG-декодирование)
- Phase 4: `libzmq` (управление)
## Сборка
```bash
git clone --recursive git@git.goldix.org:gx/cuframes-composer.git
cd cuframes-composer
cmake -B build -G Ninja
ninja -C build
```
## Поэтапный план
| фаза | срок | результат |
|---|---|---|
| 1 | 1 неделя | один источник → NVENC → файл .h264 (доказательство zero-copy) |
| 2 | 2 недели | четыре источника + композиция через `libcugrid` |
| 3 | 2 недели | оверлеи + RTSP push к mediamtx + AAC passthrough из `/live-audio` |
| 4 | 1 неделя | паритет ZMQ-управления с фильтром `vf_cuda_grid` |
| 5 | 1 неделя | боевое развёртывание + MQTT health + watchdog |
| 6 | 2 недели | тесты + бенчмарки + документация |
Итого ~9 недель для одного разработчика.
## Лицензия
LGPL-2.1-or-later. См. файл [LICENSE](LICENSE).
NVENC SDK headers (`third_party/nv-codec-headers`) — MIT license, совместима с LGPL.