doc: add base documentation to olcrtc

This commit is contained in:
zarazaex69
2026-05-03 11:50:41 +03:00
parent 3f559e61f7
commit 96c5716dcc
3 changed files with 646 additions and 0 deletions

229
docs/fast.md Normal file
View File

@@ -0,0 +1,229 @@
# Быстрый старт (через скрипты)
Этот способ самый простой. Тебе не нужен Go, не нужно ничего компилировать.
Скрипт всё сделает сам: скачает исходники, соберёт в контейнере, запустит.
Проект в бете. По проблемам: t.me/openlibrecommunity
---
## Что нужно установить
### git
```sh
apt install git # Debian / Ubuntu
pacman -S git # Arch
dnf install git # Fedora / RHEL / CentOS
```
### podman
Скрипт попробует установить podman сам, но лучше поставить заранее.
```sh
apt install podman # Debian / Ubuntu
pacman -S podman # Arch
dnf install podman # Fedora / RHEL / CentOS
```
### curl (опционально, только для проверки)
```sh
apt install curl # Debian/Ubuntu
pacman -S curl # Arch
dnf install curl # Fedora
```
---
## Шаг 1: Скачать репозиторий
```sh
git clone https://github.com/openlibrecommunity/olcrtc --recurse-submodules
cd olcrtc
```
---
## Шаг 2: Запустить сервер
На машине, через которую должен идти трафик (VPS, сервер за рубежом, домашний ПК):
```sh
./script/srv.sh
```
Скрипт задаст несколько вопросов. Отвечай Enter если устраивает значение по умолчанию.
### Carrier (на каком сервисе передавать трафик)
```
Select carrier:
1) telemost
2) jazz
3) wbstream
Enter choice [1-3, default: 1]:
```
Выбери сервис. Смотри матрицу в [settings.md](settings.md) какой транспорт с каким carrier работает.
### Transport (как именно передавать данные)
```
Select transport:
1) datachannel
2) videochannel
3) seichannel
4) vp8channel
Enter choice [1-4, default: 1]:
```
Рекомендации:
- **datachannel** - самый быстрый (~6 МБ/с), работает везде кроме telemost
- **vp8channel** - работает везде включая telemost, вводи FPS=60, batch=64
- **seichannel** - для wbstream/sber, всё по умолчанию
- **videochannel** - медленный (~200 КБ/с), только в крайнем случае
### Room ID
```
Enter Room ID:
```
Для **telemost** - создай руму через сайт [телемоста](https://telemost.yandex.ru/) и вставь его.
Для **jazz** и **wbstream** можно нажать Enter - ID сгенерируется автоматически,
скрипт сам его вытащит из логов и покажет.
### DNS
```
DNS server [default: 1.1.1.1:53]:
```
Нажми Enter. Менять не нужно если нет причин, на всякий можно поставить 77.88.8.8.
### SOCKS5 прокси для исходящего трафика
```
Use SOCKS5 proxy for egress? (y/N):
```
Если нет - просто Enter. Если хочешь чтобы сервер сам ходил через прокси - введи `y`.
### Параметры транспорта (только для vp8channel)
```
VP8 FPS [default: 25]: 60
VP8 batch size (frames per tick) [default: 1]: 64
```
Введи `60` и `64` - это оптимальные значения.
### Результат
После запуска скрипт выведет:
```
[+] Server started successfully!
Container name: olcrtc-server
Carrier: telemost
Transport: vp8channel
Room ID: 75587919855134
Encryption key: 4fc9ab159c0268a12766be00c0a85138df5905f72c5eb5780c380507ebe0174d
```
**Сохрани Room ID и Encryption key** - они нужны для клиента.
---
## Шаг 3: Запустить клиент
На своей машине (домашний ПК, ноутбук):
```sh
git clone https://github.com/openlibrecommunity/olcrtc --recurse-submodules
cd olcrtc
./script/cnc.sh
```
Отвечай на те же вопросы что на сервере - **carrier, transport, room ID должны совпадать**.
Когда спросит ключ:
```
Enter Encryption Key (hex): 4fc9ab159c0268a12766be00c0a85138df5905f72c5eb5780c380507ebe0174d
```
Вставь ключ с сервера.
### SOCKS5 адрес и порт
```
SOCKS5 ip [default: 127.0.0.1]:
SOCKS5 port [default: 8808]:
```
Нажми Enter оба раза. Прокси поднимется на `127.0.0.1:8808`.
### Результат
```
[+] Client started successfully!
Container name: olcrtc-client
SOCKS5 proxy: 127.0.0.1:8808
```
---
## Шаг 4: Проверить
```sh
curl --socks5-hostname 127.0.0.1:8808 https://icanhazip.com
```
Должен вернуть IP твоего сервера, а не домашний IP.
Или выставить переменную окружения чтобы всё шло через прокси:
```sh
export all_proxy=socks5h://127.0.0.1:8808
curl https://icanhazip.com
```
---
## Управление
### Логи
```sh
podman logs -f olcrtc-server # на сервере
podman logs -f olcrtc-client # на клиенте
```
### Остановить
```sh
podman stop olcrtc-server
podman stop olcrtc-client
```
### Перезапустить (просто запусти скрипт снова)
Скрипт сам останавливает старый контейнер перед стартом нового.
---
## Частые проблемы
**`podman: command not found`** - установи podman (см. начало документа).
**`git: command not found`** - установи git.
**Контейнер запустился но curl возвращает домашний IP** - подожди 10-15 секунд после старта, соединение устанавливается не мгновенно.
**Ключ уже есть в `~/.olcrtc_key`** - скрипт не генерирует новый, использует старый. Если хочешь новый - удали файл: `rm ~/.olcrtc_key`.

275
docs/manual.md Normal file
View File

@@ -0,0 +1,275 @@
# Мануальная сборка
Этот способ для тех кто хочет собрать бинарник руками без Docker/Podman.
Нужен Go 1.26+, mage, git.
Проект в бете. По проблемам: t.me/openlibrecommunity
---
## Шаг 1: Установить git
```sh
apt install git # Debian / Ubuntu
pacman -S git # Arch
dnf install git # Fedora / RHEL / CentOS
```
---
## Шаг 2: Установить Go 1.26+
### Arch / Fedora (всё просто)
```sh
pacman -S go # Arch
dnf install go # Fedora
```
### Debian / Ubuntu (системный пакет устаревший)
На Debian/Ubuntu в репозитории обычно Go 1.19. Нужно поставить нужную версию через SDK:
```sh
apt install golang # ставим старый go - он нужен только чтобы скачать новый
go install golang.org/dl/go1.26.0@latest # скачиваем установщик go1.26
~/go/bin/go1.26.0 download # скачиваем сам go1.26
mv ~/go/bin/go1.26.0 /usr/local/bin/go # заменяем системный go
```
### Проверка
```sh
go version
# go version go1.26.x linux/amd64
```
Если версия меньше 1.26 - смотри инструкцию для Debian выше.
---
## Шаг 3: Установить mage
mage - система сборки для Go-проектов, аналог make.
```sh
go install github.com/magefile/mage@latest
```
Если после установки `mage: command not found` - добавь `~/go/bin` в PATH:
```sh
echo 'export PATH="$HOME/go/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
```
Проверка:
```sh
mage --version
# mage vx.x.x
```
---
## Шаг 4: Скачать репозиторий
```sh
git clone https://github.com/openlibrecommunity/olcrtc --recurse-submodules
cd olcrtc
```
`--recurse-submodules` обязателен - без него videochannel не соберётся.
---
## Шаг 5: Собрать
```sh
mage build # текущая платформа → build/olcrtc-linux-amd64
mage cross # все платформы сразу (если собираешь для другой машины)
```
Результат в `build/`:
```
build/olcrtc-linux-amd64
build/olcrtc-linux-arm64
build/olcrtc-windows-amd64.exe
build/olcrtc-darwin-amd64
```
---
## Шаг 6: Сгенерировать ключ шифрования
Делается один раз на сервере. Ключ должен совпадать на сервере и клиенте.
```sh
openssl rand -hex 32
# d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799
```
Сохрани вывод - понадобится при запуске клиента.
---
## Шаг 7: Запустить сервер
На серверной машине (VPS и т.д.). Подбери нужную комбинацию carrier + transport из матрицы в [settings.md](settings.md).
### telemost + vp8channel (работает везде)
```sh
./build/olcrtc-linux-amd64 \
-mode srv \
-carrier telemost \
-transport vp8channel \
-id 75587912855134 \
-key d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799 \
-link direct \
-dns 1.1.1.1:53 \
-data data \
-vp8-fps 60 \
-vp8-batch 64
```
Для telemost `-id` - это ID комнаты телемоста. Создай комнату через [telemost.yandex.ru](https://telemost.yandex.ru/) и вставь ID из ссылки.
### jazz + datachannel (максимальная скорость, не работает в telemost)
```sh
./build/olcrtc-linux-amd64 \
-mode srv \
-carrier jazz \
-transport datachannel \
-id any \
-key d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799 \
-link direct \
-dns 1.1.1.1:53 \
-data data
```
При `-id any` сервер создаст комнату автоматически и напишет ID в логах:
```
Jazz room created: abc123xyz
```
Этот ID нужно передать клиенту.
### wbstream + seichannel
```sh
./build/olcrtc-linux-amd64 \
-mode srv \
-carrier wbstream \
-transport seichannel \
-id any \
-key <hex-key> \
-link direct \
-dns 1.1.1.1:53 \
-data data
```
### Добавить отладку
Добавь `--debug` к любой команде - увидишь каждое соединение:
```
2026/05/03 08:05:23 Connecting link via direct/vp8channel/telemost...
2026/05/03 08:05:25 telemost publisher state: connected
2026/05/03 08:05:27 Link connected
2026/05/03 08:05:43 sid=3 connect icanhazip.com:443
2026/05/03 08:05:43 sid=3 connected icanhazip.com
```
---
## Шаг 8: Запустить клиент
На своей машине. Carrier, transport, id и key должны **точно совпадать** с сервером.
### telemost + vp8channel
```sh
./build/olcrtc-linux-amd64 \
-mode cnc \
-carrier telemost \
-transport vp8channel \
-id 75587929855134 \
-key d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799 \
-link direct \
-dns 1.1.1.1:53 \
-data data \
-socks-host 127.0.0.1 \
-socks-port 1080 \
-vp8-fps 60 \
-vp8-batch 64
```
### jazz + datachannel
```sh
./build/olcrtc-linux-amd64 \
-mode cnc \
-carrier jazz \
-transport datachannel \
-id abc123xyz \
-key <hex-key> \
-link direct \
-dns 1.1.1.1:53 \
-data data \
-socks-host 127.0.0.1 \
-socks-port 1080
```
После старта в логах появится:
```
SOCKS5 server listening on 127.0.0.1:1080
```
---
## Шаг 9: Проверить
```sh
curl --socks5-hostname 127.0.0.1:1080 https://icanhazip.com
```
Должен вернуть IP сервера, а не домашний.
Или выставить переменную чтобы весь трафик шёл через прокси:
```sh
export all_proxy=socks5h://127.0.0.1:1080
curl https://icanhazip.com
```
---
## Все mage таргеты
```sh
mage build # собрать для текущей платформы
mage cross # собрать для всех платформ
mage deps # скачать и обновить зависимости
mage clean # удалить build/
mage test # запустить тесты
mage lint # запустить линтер
mage podman # собрать образ через podman
mage docker # собрать образ через docker
```
---
## Частые проблемы
**`mage: command not found`** - добавь `~/go/bin` в PATH (см. шаг 3).
**`go.mod:3: invalid go version`** - версия go слишком старая, нужна 1.26+ (см. шаг 2).
**`submodule path ... No such file or directory`** - забыл `--recurse-submodules`. Исправить: `git submodule update --init --recursive`.
**curl возвращает домашний IP** - подожди 10-15 секунд, соединение устанавливается не мгновенно. Смотри логи с `--debug`.

142
docs/settings.md Normal file
View File

@@ -0,0 +1,142 @@
# Настройки
## Матрица совместимости
Сначала выбери что с чем работает:
| Transport | telemost | jazz | wbstream |
|-----------|:--------:|:----:|:--------:|
| datachannel | ✗ | ✓ | ✓ |
| vp8channel | ✓ | ✓ | ✓ |
| seichannel | ✗ | ✓ | ✓ |
| videochannel | ✓ | ✓ | ✓ |
Скорость по убыванию: datachannel (~6 МБ/с) > vp8channel > seichannel > videochannel (~200 КБ/с)
---
## Обязательные флаги
| Флаг | Что вводить |
|------|-------------|
| `-mode` | `srv` на сервере, `cnc` на клиенте |
| `-carrier` | `telemost`, `jazz` или `wbstream` |
| `-transport` | `datachannel`, `vp8channel`, `seichannel` или `videochannel` |
| `-id` | Room ID. Для jazz/wbstream можно `any` - сгенерируется автоматически |
| `-key` | Ключ шифрования hex 64 символа. Генерация: `openssl rand -hex 32` |
| `-link` | Всегда `direct` |
| `-data` | Всегда `data` |
---
## Необязательные флаги
| Флаг | Описание | По умолчанию |
|------|----------|:------------:|
| `-dns` | DNS-сервер | `1.1.1.1:53` |
| `--debug` | Подробные логи соединений | выкл |
---
## Флаги только для сервера (`-mode srv`)
| Флаг | Описание |
|------|----------|
| `-socks-proxy` | Адрес SOCKS5-прокси для исходящего трафика сервера |
| `-socks-proxy-port` | Порт этого прокси |
---
## Флаги только для клиента (`-mode cnc`)
| Флаг | Описание | По умолчанию |
|------|----------|:------------:|
| `-socks-host` | На каком адресе поднять SOCKS5 | `127.0.0.1` |
| `-socks-port` | На каком порту поднять SOCKS5 | `1080` |
---
## vp8channel
**Рекомендуется: `-vp8-fps 60 -vp8-batch 64`** (числа лучше чётные, больший batch = выше скорость)
| Флаг | Описание | По умолчанию |
|------|----------|:------------:|
| `-vp8-fps` | FPS VP8 потока | `25` |
| `-vp8-batch` | Кадров за тик | `1` |
---
## videochannel
**Рекомендуется: `-video-codec qrcode -video-w 1080 -video-h 1080 -video-fps 60 -video-bitrate 5000k -video-hw none`**
| Флаг | Описание | По умолчанию |
|------|----------|:------------:|
| `-video-codec` | `qrcode` или `tile` | `qrcode` |
| `-video-w` | Ширина в пикселях | `1920` |
| `-video-h` | Высота в пикселях | `1080` |
| `-video-fps` | FPS | `30` |
| `-video-bitrate` | Битрейт, например `2M` или `5000k` | `2M` |
| `-video-hw` | Аппаратное ускорение: `none` или `nvenc` | `none` |
| `-video-qr-recovery` | Коррекция ошибок QR: `low` / `medium` / `high` / `highest` | `low` |
| `-video-qr-size` | Размер фрагмента QR в байтах, `0` = авто | `0` |
| `-video-tile-module` | Размер тайла в пикселях 1..270 (только `tile`) | `4` |
| `-video-tile-rs` | Reed-Solomon паритет % 0..200 (только `tile`) | `20` |
Для codec `tile` нужно точно `1080x1080`.
---
## seichannel / datachannel
Дополнительных флагов нет - всё по умолчанию.
---
## Готовые команды
### telemost + vp8channel
```sh
# сервер
./olcrtc -mode srv -carrier telemost -transport vp8channel \
-id <room-id> -key <hex-key> -link direct -data data \
-vp8-fps 60 -vp8-batch 64
# клиент
./olcrtc -mode cnc -carrier telemost -transport vp8channel \
-id <room-id> -key <hex-key> -link direct -data data \
-socks-host 127.0.0.1 -socks-port 1080 \
-vp8-fps 60 -vp8-batch 64
```
### jazz + datachannel (максимальная скорость)
```sh
# сервер - room ID создастся сам, смотри логи
./olcrtc -mode srv -carrier jazz -transport datachannel \
-id any -key <hex-key> -link direct -data data
# клиент
./olcrtc -mode cnc -carrier jazz -transport datachannel \
-id <room-id> -key <hex-key> -link direct -data data \
-socks-host 127.0.0.1 -socks-port 1080
```
### telemost + videochannel (крайний случай)
```sh
# сервер
./olcrtc -mode srv -carrier telemost -transport videochannel \
-id <room-id> -key <hex-key> -link direct -data data \
-video-codec qrcode -video-w 1080 -video-h 1080 \
-video-fps 60 -video-bitrate 5000k -video-hw none
# клиент
./olcrtc -mode cnc -carrier telemost -transport videochannel \
-id <room-id> -key <hex-key> -link direct -data data \
-socks-host 127.0.0.1 -socks-port 1080 \
-video-codec qrcode -video-w 1080 -video-h 1080 \
-video-fps 60 -video-bitrate 5000k -video-hw none
```