a3ba3a95b2
- ROADMAP.md: structured v0.1✅ / v0.2📋 (encoded packet sharing + FFmpeg upstream PR + scale-cuda alt) / v0.3 (Python bindings, Jetson, multi-GPU) / v1.0 (stable ABI) - CHANGELOG.md: full v0.1.0 release notes — features, tested config, production deployment, known limitations - BENCHMARKS.md: measurements (stress 1×pub×4×sub, E2E real camera, prod multi-consumer 24h, VRAM cost per resolution, cuframes vs N×NVDEC) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
4.6 KiB
4.6 KiB
Roadmap
cuframes — zero-copy sharing декодированных видеокадров между процессами через CUDA IPC. Текущая публичная версия: v0.1.0 (см. CHANGELOG.md).
Принцип релизов
Семвер: MAJOR.MINOR.PATCH.
0.x.y— pre-1.0: API может меняться между minor-релизами. Patch только для bugfixes без ABI-breaking.1.0+— стабильный ABI в пределах major. Минорные релизы добавляют функции без ломки существующего кода.
Проверять текущий протокол: cuframes_protocol_version() (см. C API). Subscriber
с несовместимым protocol отказывается подключаться (CUFRAMES_ERR_PROTOCOL).
v0.1 — Foundation ✅ (released 2026-05-17)
| Компонент | Статус |
|---|---|
libcuframes.so — producer/consumer ring + CUDA IPC handshake |
✅ |
C++ RAII wrapper cuframes.hpp |
✅ |
cuframes-rtsp-source standalone publisher (RTSP → NVDEC → IPC) |
✅ |
FFmpeg input demuxer cuframes:// (out-of-tree patch для n7.1) |
✅ |
| Docker runtime image | ✅ |
| CMake install rules | ✅ |
| Integration guide для cctv-processor (C++) | ✅ |
| Stress test 1×pub × 4×sub × 2000 frames @ 120 fps (0 torn) | ✅ |
| Production deployment на multi-camera CCTV-стeке (Frigate + custom processor) | ✅ |
v0.2 — Encoded packet sharing 📋 (planned)
Главное расширение: publisher отдаёт не только decoded NV12 frames, но и
encoded packets (H.264/H.265 NAL units) через отдельный shared ring.
Use case: Frigate record role (mux в mp4 без re-encode), AI-pipeline которому
не нужен decode — фильтруют по metadata + сохраняют encoded clip.
| Feature | Зачем |
|---|---|
cuframes_publisher_publish_packet() C API |
Publisher шлёт AVPacket-эквивалент в shared ring |
cuframes_subscriber_next_packet() C API |
Consumer читает encoded packets |
| Variable-length ring buffer для packets | Encoded size variable (≠ fixed NV12) |
FFmpeg cuframes_packets:// demuxer |
Тhe complement to existing cuframes:// |
| Sub-stream selection (для multi-resolution streams) | Один camera RTSP даёт 2-3 substreams |
| Scale-cuda alternative: software bilinear resize фильтр для FFmpeg сборок без cuda-llvm | Patched ffmpeg на glibc-2.36 платформах (Debian 12 Frigate base) не имеет cuda-llvm → scale_cuda недоступен. Workaround = CPU scale, регресс. Alt: cuframes-side resize в publisher'е (publish pre-scaled frames). |
FFmpeg upstream PR: submit cuframesdec.c в FFmpeg mainline |
Снижает trеnding overhead для adoption; патчить FFmpeg не надо будет. |
ETA: 1-2 недели focused работы.
v0.3 — Bindings & Platforms 📋 (planned)
| Feature | Зачем |
|---|---|
| Python bindings (pybind11) | AI/ML-скрипты сейчас вынуждены ctypes-обёртку писать |
| Jetson (Tegra arm64) support | Edge-deployment — Frigate тоже популярен на Jetson |
| Multi-GPU producer/consumer | NVIDIA IPC поддерживает только same-GPU; нужен fallback через encoded path |
pkg-config .pc файл |
Downstream cmake/meson — drop --extra-cflags/-ldflags ad-hoc |
| Frigate plugin POC (Python side, не FFmpeg) | Альтернативный путь для users которые не хотят патчить FFmpeg |
| Docker images в public registry | Snapshot CI-built tarballs + multi-arch |
v1.0 — Stable ABI 📋
- Стабильный wire-protocol (minor versions add fields в reserved space)
- Multi-GPU официально supported
- Credentials/config через env / Docker secrets (не в config.json)
- Comprehensive test suite (unit + integration + soak)
- FFmpeg upstream merge accomplished
- 2+ независимых production deployments документированы
Связанные документы
- docs/architecture.md — внутренности cuframes IPC
- docs/integration.md — guide для downstream проектов
- BENCHMARKS.md — измерения латентности и throughput
- CHANGELOG.md — release notes
- filter/README.md — FFmpeg demuxer