Files
olcrtc/docs/fast.md
2026-05-10 22:27:55 +03:00

345 lines
11 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.
<div align="center">
<img src="https://github.com/openlibrecommunity/material/blob/master/olcrtc.png" width="250" height="250">
![License](https://img.shields.io/badge/license-WTFPL-0D1117?style=flat-square&logo=open-source-initiative&logoColor=green&labelColor=0D1117)
![Golang](https://img.shields.io/badge/-Golang-0D1117?style=flat-square&logo=go&logoColor=00A7D0)
</div>
# Быстрый старт (через скрипты)
Этот способ самый простой. Все запускается в контейнере [Podman](https://ru.wikipedia.org/wiki/Podman).
Скрипт всё сделает сам: скачает [исходники](https://github.com/openlibrecommunity/olcrtc), соберёт в контейнере, запустит.
Проект в бете. По проблемам: t.me/openlibrecommunity
---
## Что нужно установить
### git
```sh
apt install git # Debian / Ubuntu / Mint
pacman -S git # Arch / CacheOS / Manjaro
dnf install git # Fedora / RHEL / CentOS
```
### podman
```sh
apt install podman # Debian / Ubuntu / Mint
pacman -S podman # Arch / CacheOS / Manjaro
dnf install podman # Fedora / RHEL / CentOS
```
### curl
```sh
apt install curl # Debian / Ubuntu/ Mint
pacman -S curl # Arch / CacheOS / Manjaro
dnf install curl # Fedora
```
---
## Шаг 1: Скачать репозиторий
```sh
git clone https://github.com/openlibrecommunity/olcrtc --recurse-submodules
cd olcrtc
```
<img src="asset/gitclone.png" alt="speedtest" width="800">
---
## Шаг 2: Запустить сервер
На машине, через которую должен идти трафик (VPS, сервер за рубежом, домашний ПК):
```sh
./script/srv.sh
```
Скрипт задаст несколько вопросов.
#### Флаги `srv.sh`
| Флаг | Что делает |
|---|---|
| `--branch=<name>` | Использовать другую ветку репозитория вместо `master` |
| `--no-cache` | Очистить Go-кеш (`~/.cache/olcrtc`) перед сборкой - пересобрать с нуля |
`--no-cache` полезен когда нужно убедиться что собирается актуальный код (например после обновления зависимостей или при странных ошибках сборки). Без флага скрипт переиспользует кеш `gomod` и `gobuild`, что сильно ускоряет повторные запуски.
```sh
./script/srv.sh --no-cache # сборка с нуля
./script/srv.sh --branch=dev --no-cache # ветка dev, без кеша
```
### Carrier (на каком сервисе передавать трафик)
```
Select carrier:
1) telemost
2) jazz
3) wbstream
Enter choice [1-3, default: 3]:
```
Выбери сервис. Полную матрицу совместимости смотри в [settings.md](settings.md).
**По умолчанию `wbstream`** - работает со всеми транспортами, рекомендуется.
### Transport (как именно передавать данные)
```
Select transport:
1) datachannel
2) videochannel
3) seichannel
4) vp8channel
Enter choice [1-4, default: 1]:
```
Рекомендации:
- **datachannel** - самый быстрый, минимальный пинг. Работает с `jazz` и `wbstream`. **Jazz банит IP за datachannel** - лучше используй только с `wbstream`.
- **vp8channel** - работает везде, быстрый, но большой пинг.
- **seichannel** - работает везде кроме telemost, медленный, но мелкий пинг.
- **videochannel** - работает везде, самый медленный и большой пинг.
**Лучшая комбинация: `wbstream + datachannel`** - максимальная скорость, минимальный пинг, без риска бана.
### Room ID
```
Enter Room ID:
```
Для **telemost** - создай руму через сайт [телемоста](https://telemost.yandex.ru/) и вставь его.
Для **jazz** и **wbstream** скрипт предложит выбор: сгенерировать автоматически (рекомендуется) или ввести существующий ID. При автогенерации скрипт запустит `gen` и получит ID до старта сервера. Также можно создать руму через сайт [jazz](https://salutejazz.ru/calls/create) или [wbstream](https://stream.wb.ru).
### Client ID
```
Enter Client ID [default: default]:
```
Это обязательный идентификатор клиента. Он должен быть одинаковым на сервере и клиенте - используется чтобы клиент подключался именно к вашему серверу, а не к случайному серверу в руме.
Один `-client-id` технически может держать бесконечное количество одновременных соединений. Однако SFU ограничивает полосу пропускания на одного участника звонка, поэтому оптимально использовать схему **1 client-id = 1 пользователь** - но это не обязательное требование.
### DNS
```
DNS server [default: 8.8.8.8:53]:
```
Нажми Enter. Менять не нужно если нет причин, на всякий можно поставить 77.88.8.8 или DNS твоего провайдера.
### SOCKS5 прокси для исходящего трафика
```
Use SOCKS5 proxy for egress? (y/N):
```
Если нет - просто Enter, если надо то введи `y`. Нужно чтобы сервер сам ходил через прокси.
### Параметры транспорта (только для videochannel)
```
Video codec:
1) qrcode
2) tile (requires 1080x1080)
Enter choice [1-2, default: 1]:
```
Выбери кодек:
- **qrcode** - QR-коды, настраиваемое разрешение, стабильный, медленный.
- **tile** - тайловый кодек, только 1080x1080, поддерживает Reed-Solomon коррекцию, не стабилен, более быстрый.
#### qrcode
```
Video width [default: 1920]:
Video height [default: 1080]:
QR error correction (low/medium/high/highest) [default: low]:
QR fragment size bytes [default: 0 (auto)]:
```
- **Video width / height** - разрешение видео. Больше = больше данных за кадр, но тяжелее поток.
- **QR error correction** - коррекция ошибок: `low` быстрее, `highest` надёжнее при плохом канале.
- **QR fragment size** - размер фрагмента в байтах. `0` = автоматически.
#### tile
```
[*] Tile codec selected - forcing 1080x1080
Tile module size in pixels 1..270 [default: 4]:
Tile Reed-Solomon parity percent 0..200 [default: 20]:
```
- **Tile module size** - размер одного тайла в пикселях. Меньше = больше данных за кадр.
- **Tile Reed-Solomon parity** - процент избыточности. `0` = без коррекции, `20` оптимально.
#### Общие параметры (для обоих кодеков)
```
Video FPS [default: 30]:
Video bitrate [default: 2M]:
Hardware acceleration (none/nvenc) [default: none]:
```
- **Video FPS** - кадров в секунду. Больше FPS = выше пропускная способность, больше нагрузка на CPU.
- **Video bitrate** - битрейт ffmpeg. Примеры: `2M`, `5M`, `500K`.
- **Hardware acceleration** - `none` если нет GPU, `nvenc` для NVIDIA GPU.
---
### Параметры транспорта (только для vp8channel)
```
VP8 FPS [default: 25]: 60
VP8 batch size (frames per tick) [default: 1]: 64
```
Введи `60` и `64` - это оптимальные значения.
### Параметры транспорта (только для seichannel)
```
SEI FPS [default: 20]: 60
SEI batch size (frames per tick) [default: 1]: 64
SEI fragment size in bytes [default: 900]: 900
SEI ACK timeout in milliseconds [default: 3000]: 2000
```
Нажми Enter для всех - значения по умолчанию оптимальны.
### Результат
После запуска скрипт выведет:
```
[+] Server started successfully!
Container name: olcrtc-server
Carrier: Carrier
Transport: Transport
Room ID: Room ID
Client ID: default
Encryption key: Encryption key
```
**Сохрани Room ID, Client ID и Encryption key** - они нужны для клиента.
---
## Шаг 3: Запустить клиент
На своей машине (домашний ПК, ноутбук):
```sh
git clone https://github.com/openlibrecommunity/olcrtc --recurse-submodules
cd olcrtc
./script/cnc.sh
```
Отвечай на те же вопросы что на сервере - **carrier, transport, room ID и client ID должны совпадать**.
Когда спросит client ID:
```
Enter Client ID [default: default]: default
```
Введи тот же `client ID`, который использовал на сервере.
Когда спросит ключ:
```
Enter Encryption Key (hex): Encryption key
```
Вставь ключ с сервера.
### SOCKS5 адрес и порт
```
SOCKS5 ip [default: 127.0.0.1]:
SOCKS5 port [default: 8808]:
```
Нажми Enter оба раза. Прокси поднимется на `127.0.0.1:8808`.
### SOCKS5 аутентификация (необязательно)
```
SOCKS5 username (leave empty to disable auth):
```
Если нужна защита логином и паролем - введи логин, затем пароль. Если нет - просто Enter, аутентификация будет отключена.
### Результат
```
[+] Client started successfully!
Container name: olcrtc-client
Client ID: default
SOCKS5 proxy: 127.0.0.1:8808
```
---
## Шаг 4: Проверить
```sh
curl --socks5-hostname 127.0.0.1:8808 https://icanhazip.com
```
Должен вернуть 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? -> [Мануальная сборка](manual.md)
Все флаги и матрица совместимости -> [settings.md](settings.md)