Files
olcrtc/docs/settings.md
2026-05-11 15:32:12 +03:00

256 lines
9.3 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>
# Настройки
## Матрица совместимости
| Transport | telemost | jazz | wbstream |
|-----------|:--------:|:----:|:--------:|
| datachannel | - | * | + |
| vp8channel | + | + | + |
| seichannel | - | + | + |
| videochannel | + | + | + |
**Легенда:**
- `+` - работает
- `-` - не поддерживается
- `*` - работает, но не желательно
**Рекомендуемая комбинация: `wbstream + datachannel`** - максимальная скорость, минимальный пинг.
Скорость по убыванию: `datachannel` > `vp8channel` > `seichannel` > `videochannel`
---
## Обязательные флаги
| Флаг | Что вводить |
|------|-------------|
| `-mode` | `srv` на сервере, `cnc` на клиенте, `gen` для генерации Room ID |
| `-auth` | `telemost`, `jazz`, `wbstream`, `none` |
| `-transport` | `datachannel`, `vp8channel`, `seichannel` или `videochannel` |
| `-id` | Room ID |
| `-client-id` | Общий идентификатор клиента. Должен совпадать на сервере и клиенте. Один client-id может держать бесконечное количество соединений, но SFU ограничивает полосу на участника - оптимально 1 client-id = 1 пользователь (не обязательно) |
| `-key` | Ключ шифрования hex 64 символа. Генерация: `openssl rand -hex 32` |
| `-link` | Всегда `direct` |
| `-data` | Всегда `data` |
| `-dns` | DNS-сервер, например `1.1.1.1:53` |
---
## Прямой режим
При использовании `-auth none` флаги `-engine`, `-url` и `-token` обязательны.
Для остальных провайдеров они заполняются автоматически, но их можно переопределить.
| Флаг | Описание |
|------|----------|
| `-engine` | `livekit`, `goolom` или `salutejazz` |
| `-url` | WebSocket URL SFU |
| `-token` | Токен доступа |
## Необязательные флаги
| Флаг | Описание |
|------|----------|
| `--debug` | Подробные логи соединений |
---
## -mode gen
Генерирует Room ID заранее, не запуская сервер. Поддерживается для `jazz` и `wbstream`.
**Обязательные флаги:**
| Флаг | Описание |
|------|----------|
| `-auth` | `jazz` или `wbstream` |
| `-dns` | DNS-сервер |
| `-amount` | Количество комнат |
```sh
./olcrtc -mode gen -auth wbstream -dns 1.1.1.1:53 -amount 1
# abc123xyz
./olcrtc -mode gen -auth jazz -dns 1.1.1.1:53 -amount 3
# room-id-1
# room-id-2
# room-id-3
```
---
## Флаги только для сервера (`-mode srv`)
| Флаг | Описание |
|------|----------|
| `-socks-proxy` | Адрес SOCKS5-прокси для исходящего трафика сервера |
| `-socks-proxy-port` | Порт этого прокси |
---
## Флаги только для клиента (`-mode cnc`)
| Флаг | Описание | По умолчанию |
|------|----------|:------------:|
| `-socks-host` | На каком адресе поднять SOCKS5 | `127.0.0.1` |
| `-socks-port` | На каком порту поднять SOCKS5 | `1080` |
| `-socks-user` | Логин для входящих SOCKS5-подключений (необязательно) | - |
| `-socks-pass` | Пароль для входящих SOCKS5-подключений (необязательно) | - |
Если `-socks-user` не задан - аутентификация отключена (любой локальный клиент может подключиться).
Если задан - клиент принимает только подключения с правильным логином и паролем (RFC 1929).
---
## datachannel
Дополнительных флагов нет - всё по умолчанию.
---
## vp8channel
**Рекомендуется: `-vp8-fps 60 -vp8-batch 64`** (числа лучше чётные, больший batch = выше скорость)
| Флаг | Описание | По умолчанию |
|------|----------|:------------:|
| `-vp8-fps` | FPS VP8 потока | `25` |
| `-vp8-batch` | Кадров за тик | `1` |
---
## seichannel
**Рекомендуется: `-fps 60 -batch 64 -frag 900 -ack-ms 2000`**
| Флаг | Описание | По умолчанию |
|------|----------|:------------:|
| `-fps` | FPS H264 потока | `60` |
| `-batch` | Кадров за тик | `64` |
| `-frag` | Размер фрагмента в байтах | `900` |
| `-ack-ms` | Таймаут ACK в миллисекундах | `2000` |
---
## 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` |
| `-ffmpeg` | Путь к исполняемому файлу ffmpeg | `ffmpeg` |
Для codec `tile` нужно точно `1080x1080`.
---
## Готовые команды
### wbstream + datachannel (рекомендуется - максимальная скорость, без бана)
```sh
# сгенерировать room ID
ROOM_ID=$(./olcrtc -mode gen -auth wbstream -dns 1.1.1.1:53 -amount 1 -data data)
# сервер
./olcrtc -mode srv -auth wbstream -transport datachannel \
-id "$ROOM_ID" -client-id <client-id> -key <hex-key> -link direct -data data -dns 1.1.1.1:53
# клиент
./olcrtc -mode cnc -auth wbstream -transport datachannel \
-id "$ROOM_ID" -client-id <client-id> -key <hex-key> -link direct -data data -dns 1.1.1.1:53 \
-socks-host 127.0.0.1 -socks-port 1080
```
### wbstream + datachannel + SOCKS5 аутентификация
```sh
# клиент с логином и паролем на прокси
./olcrtc -mode cnc -auth wbstream -transport datachannel \
-id "$ROOM_ID" -client-id <client-id> -key <hex-key> -link direct -data data -dns 1.1.1.1:53 \
-socks-host 127.0.0.1 -socks-port 1080 \
-socks-user myuser -socks-pass mypass
```
Использование:
```sh
curl --socks5-hostname myuser:mypass@127.0.0.1:1080 https://icanhazip.com
# или
export all_proxy=socks5h://myuser:mypass@127.0.0.1:1080
```
---
### telemost + vp8channel
```sh
# сервер
./olcrtc -mode srv -auth telemost -transport vp8channel \
-id <room-id> -client-id <client-id> -key <hex-key> -link direct -data data \
-vp8-fps 60 -vp8-batch 64
# клиент
./olcrtc -mode cnc -auth telemost -transport vp8channel \
-id <room-id> -client-id <client-id> -key <hex-key> -link direct -data data \
-socks-host 127.0.0.1 -socks-port 1080 \
-vp8-fps 60 -vp8-batch 64
```
### telemost + seichannel
```sh
# сервер
./olcrtc -mode srv -auth telemost -transport seichannel \
-id <room-id> -client-id <client-id> -key <hex-key> -link direct -data data \
-fps 60 -batch 64 -frag 900 -ack-ms 2000
# клиент
./olcrtc -mode cnc -auth telemost -transport seichannel \
-id <room-id> -client-id <client-id> -key <hex-key> -link direct -data data \
-socks-host 127.0.0.1 -socks-port 1080 \
-fps 60 -batch 64 -frag 900 -ack-ms 2000
```
### telemost + videochannel (крайний случай)
```sh
# сервер
./olcrtc -mode srv -auth telemost -transport videochannel \
-id <room-id> -client-id <client-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 -auth telemost -transport videochannel \
-id <room-id> -client-id <client-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
```
---
Подробнее про запуск: [Быстрый старт](fast.md) · [Мануальная сборка](manual.md)
URI-формат для клиентов: [uri.md](uri.md) · [Формат подписки](sub.md)