8c3c43709d
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>
111 lines
4.1 KiB
Markdown
111 lines
4.1 KiB
Markdown
---
|
||
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`.
|
||
|
||
```bash
|
||
docker pull gx/cuframes:0.4
|
||
```
|
||
|
||
Smoke-check:
|
||
|
||
```bash
|
||
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.
|
||
|
||
```bash
|
||
# 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:
|
||
|
||
```bash
|
||
sudo apt-get install -y \
|
||
build-essential cmake ninja-build pkg-config \
|
||
libavcodec-dev libavformat-dev libavutil-dev
|
||
```
|
||
|
||
### Конфигурация и сборка
|
||
|
||
```bash
|
||
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 library
|
||
- `build/tools/cuframes-rtsp-source/cuframes-rtsp-source` — RTSP-bridge
|
||
- `build/examples/sub_count/sub_count` — референсный subscriber
|
||
|
||
### Установка system-wide
|
||
|
||
```bash
|
||
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-образ или сборка из исходников.
|
||
|
||
## Проверить установку
|
||
|
||
```bash
|
||
cuframes-rtsp-source --help
|
||
```
|
||
|
||
Если бинарь лежит в `PATH` и печатает свой usage-баннер, runtime подключён. Чтобы убедиться, что сама library загружается из твоего кода, переходи к [Первому publisher](./first-publisher.md).
|