Initial documentation site for cuframes:
- Landing page (src/pages/index.mdx) — hero, quick example (publisher +
subscriber), comparison table vs naive/DeepStream, honest "early but
production-tested" status
- /docs/intro — full overview
- /docs/getting-started/{install,first-publisher,first-subscriber}
- /docs/concepts/{frame-vs-packet-ring,ownership-modes,sync-vmm-stream}
with mermaid diagrams
- /docs/integration/{ffmpeg-demuxer,ffmpeg-filter,python}
- /docs/reference/{api-c,api-cpp,protocol} — full v4 wire protocol spec
incl. VMM_FDS message, magic 0xCC7C1DCE bump diff
- /docs/faq — comparison vs DeepStream/GStreamer, license, multi-host
limitations
- i18n/ru/ — parallel RU translation (tech terms latin, склонение апостроф)
Build:
- Docusaurus 3.10.1 + theme-mermaid + search-local
- Follows dagstack-* docs convention (canonical: dagstack-plugin-system-docs)
- Apache-2.0 license; cuframes lib itself remains LGPL-2.1+
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
4.1 KiB
title, sidebar_position
| title | sidebar_position |
|---|---|
| Установка | 1 |
Установка
cuframes работает только на Linux. IPC-механизм опирается на POSIX shared memory и передачу file descriptors через SCM_RIGHTS поверх Unix sockets. Windows, macOS и WSL2 не поддерживаются.
Также нужен NVIDIA GPU с compute capability ≥ 7.5 (Turing или новее) и CUDA 12+ driver. Точнее: 64-bit Linux, glibc 2.31+, ядро 5.4+ (для cuMemMap + SCM_RIGHTS).
Вариант 1 — готовый Docker-образ (рекомендуется для первого знакомства)
Runtime-образ поставляет libcuframes.so и bridge-утилиту cuframes-rtsp-source поверх nvidia/cuda:12.4.1-runtime.
docker pull gx/cuframes:0.4
Smoke-check:
docker run --rm --runtime=nvidia gx/cuframes:0.4 \
/usr/local/bin/cuframes-rtsp-source --help
Чтобы запустить publisher и subscriber в двух контейнерах, контейнер publisher должен стартовать с --ipc=shareable, а subscriber — шарить его IPC namespace через --ipc=container:<publisher>. Шарить PID namespace не нужно начиная с v0.4 — handle'ы передаются как POSIX file descriptors через Unix socket.
# Publisher
docker run -d --name cuframes-pub --runtime=nvidia --ipc=shareable \
-v /run/cuframes:/run/cuframes \
gx/cuframes:0.4 \
/usr/local/bin/cuframes-rtsp-source --rtsp 'rtsp://...' --key cam1
# Subscriber
docker run --rm --runtime=nvidia \
--ipc=container:cuframes-pub \
-v /run/cuframes:/run/cuframes:ro \
gx/cuframes:0.4 \
/usr/local/bin/sub_count --key cam1 --max-frames 100
Правила namespace: subscriber должен share IPC namespace с publisher (POSIX /dev/shm живёт в IPC ns). PID sharing не нужен (это свойство v0.4 — до v0.4 нужны были оба).
Вариант 2 — сборка из исходников
Требования к сборке
| Минимум | |
|---|---|
| CUDA Toolkit | 12.0 |
| NVIDIA driver | 525 |
| CMake | 3.20 |
| GCC / Clang | 11 / 14 |
| FFmpeg dev libs | libavcodec, libavformat, libavutil (только для cuframes-rtsp-source) |
На Ubuntu 22.04 / 24.04:
sudo apt-get install -y \
build-essential cmake ninja-build pkg-config \
libavcodec-dev libavformat-dev libavutil-dev
Конфигурация и сборка
git clone https://git.goldix.org/gx/cuframes.git
cd cuframes
cmake -B build -S . -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build --parallel
На выходе:
build/libcuframes/libcuframes.so— shared librarybuild/tools/cuframes-rtsp-source/cuframes-rtsp-source— RTSP-bridgebuild/examples/sub_count/sub_count— референсный subscriber
Установка system-wide
sudo cmake --install build --prefix /usr/local
sudo ldconfig
Заголовки кладутся в /usr/local/include/cuframes/, library — в /usr/local/lib/.
Опции сборки
| Опция | По умолчанию | Примечания |
|---|---|---|
BUILD_TOOLS |
ON |
cuframes-rtsp-source (нужны FFmpeg dev libs) |
BUILD_EXAMPLES |
ON |
референсный subscriber sub_count |
BUILD_TESTING |
ON |
unit- и stress-тесты |
BUILD_FFMPEG_FILTER |
OFF |
out-of-tree, требует пропатченное FFmpeg-дерево |
BUILD_PYTHON_BINDINGS |
OFF |
в планах |
Вариант 3 — apt / dpkg пакеты
Появятся к релизу v1.0. До этого — Docker-образ или сборка из исходников.
Проверить установку
cuframes-rtsp-source --help
Если бинарь лежит в PATH и печатает свой usage-баннер, runtime подключён. Чтобы убедиться, что сама library загружается из твоего кода, переходи к Первому publisher.