diff --git a/docs/about.md b/docs/about.md
index 4254443..f415d20 100644
--- a/docs/about.md
+++ b/docs/about.md
@@ -1,3 +1,14 @@
+
+
+

+
+
+
+
+
+
+
+
# olcRTC - общее описание
`olcRTC` (OpenLibreCommunity RTC) - зашифрованный TCP-over-WebRTC туннель. Он маскирует трафик под обычное участие в WebRTC/SFU-сервисе: Jitsi Meet, Yandex Telemost или WbStream.
@@ -174,8 +185,6 @@ data: data
| `script` | интерактивные launchers и Docker entrypoint |
| `docs` | документация и примеры YAML |
-Подробная карта для разработки: [project-map.md](project-map.md).
-
## Сборка
```bash
@@ -244,7 +253,7 @@ mage e2e
Real-provider E2E включаются через переменные:
```bash
-E2E_CARRIERS=wbstream E2E_TRANSPORTS=vp8channel mage e2e
+E2E_CARRIERS=wbstream E2E_TRANSPORTS= vp8channel mage e2e
```
## Частые проблемы
diff --git a/docs/configuration.md b/docs/configuration.md
index c2b373f..2090e3e 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -1,3 +1,13 @@
+
+
+

+
+
+
+
+
+
+
# Настройка YAML
`olcrtc` читает runtime-настройки из одного YAML-файла. CLI принимает ровно один аргумент - путь к конфигу; отдельных CLI-флагов для режима, транспорта и провайдера больше нет.
@@ -9,31 +19,31 @@ olcrtc /etc/olcrtc/client.yaml
Готовые примеры:
-- [`server.jitsi.datachannel.yaml`](./examples/server.jitsi.datachannel.yaml)
-- [`client.jitsi.datachannel.yaml`](./examples/client.jitsi.datachannel.yaml)
-- [`server.jitsi.videochannel.yaml`](./examples/server.jitsi.videochannel.yaml)
-- [`client.jitsi.videochannel.yaml`](./examples/client.jitsi.videochannel.yaml)
-- [`server.jitsi.seichannel.yaml`](./examples/server.jitsi.seichannel.yaml)
-- [`client.jitsi.seichannel.yaml`](./examples/client.jitsi.seichannel.yaml)
-- [`server.jitsi.vp8channel.yaml`](./examples/server.jitsi.vp8channel.yaml)
-- [`client.jitsi.vp8channel.yaml`](./examples/client.jitsi.vp8channel.yaml)
-- [`server.telemost.datachannel.yaml`](./examples/server.telemost.datachannel.yaml)
-- [`client.telemost.datachannel.yaml`](./examples/client.telemost.datachannel.yaml)
-- [`server.telemost.videochannel.yaml`](./examples/server.telemost.videochannel.yaml)
-- [`client.telemost.videochannel.yaml`](./examples/client.telemost.videochannel.yaml)
-- [`server.telemost.seichannel.yaml`](./examples/server.telemost.seichannel.yaml)
-- [`client.telemost.seichannel.yaml`](./examples/client.telemost.seichannel.yaml)
-- [`server.telemost.vp8channel.yaml`](./examples/server.telemost.vp8channel.yaml)
-- [`client.telemost.vp8channel.yaml`](./examples/client.telemost.vp8channel.yaml)
-- [`server.wbstream.datachannel.yaml`](./examples/server.wbstream.datachannel.yaml)
-- [`client.wbstream.datachannel.yaml`](./examples/client.wbstream.datachannel.yaml)
-- [`server.wbstream.videochannel.yaml`](./examples/server.wbstream.videochannel.yaml)
-- [`client.wbstream.videochannel.yaml`](./examples/client.wbstream.videochannel.yaml)
-- [`server.wbstream.seichannel.yaml`](./examples/server.wbstream.seichannel.yaml)
-- [`client.wbstream.seichannel.yaml`](./examples/client.wbstream.seichannel.yaml)
-- [`server.wbstream.vp8channel.yaml`](./examples/server.wbstream.vp8channel.yaml)
-- [`client.wbstream.vp8channel.yaml`](./examples/client.wbstream.vp8channel.yaml)
-- [`failover.yaml`](./examples/failover.yaml)
+- [`server.jitsi.datachannel.yaml`](./examples/server.jitsi.datachannel.yaml) - jitsi + datachannel srv
+- [`client.jitsi.datachannel.yaml`](./examples/client.jitsi.datachannel.yaml) - jitsi + datachannel cnc
+- [`server.jitsi.videochannel.yaml`](./examples/server.jitsi.videochannel.yaml) - jitsi + videochannel srv
+- [`client.jitsi.videochannel.yaml`](./examples/client.jitsi.videochannel.yaml) - jitsi + videochannel cnc
+- [`server.jitsi.seichannel.yaml`](./examples/server.jitsi.seichannel.yaml) - jitsi + seichannel srv
+- [`client.jitsi.seichannel.yaml`](./examples/client.jitsi.seichannel.yaml) - jitsi + seichannel cnc
+- [`server.jitsi.vp8channel.yaml`](./examples/server.jitsi.vp8channel.yaml) - jitsi + vp8channel srv
+- [`client.jitsi.vp8channel.yaml`](./examples/client.jitsi.vp8channel.yaml) - jitsi + vp8channel cnc
+- [`server.telemost.datachannel.yaml`](./examples/server.telemost.datachannel.yaml) - telemost + datachannel srv
+- [`client.telemost.datachannel.yaml`](./examples/client.telemost.datachannel.yaml) - telemost + datachannel cnc
+- [`server.telemost.videochannel.yaml`](./examples/server.telemost.videochannel.yaml) - telemost + videochannel srv
+- [`client.telemost.videochannel.yaml`](./examples/client.telemost.videochannel.yaml) - telemost + videochannel cnc
+- [`server.telemost.seichannel.yaml`](./examples/server.telemost.seichannel.yaml) - telemost + seichannel srv
+- [`client.telemost.seichannel.yaml`](./examples/client.telemost.seichannel.yaml) - telemost + seichannel
+- [`server.telemost.vp8channel.yaml`](./examples/server.telemost.vp8channel.yaml) - telemost + vp8channel srv
+- [`client.telemost.vp8channel.yaml`](./examples/client.telemost.vp8channel.yaml) - telemost + vp8channel cnc
+- [`server.wbstream.datachannel.yaml`](./examples/server.wbstream.datachannel.yaml) - wbstream + datachannel srv
+- [`client.wbstream.datachannel.yaml`](./examples/client.wbstream.datachannel.yaml) - wbstream + datachannel cnc
+- [`server.wbstream.videochannel.yaml`](./examples/server.wbstream.videochannel.yaml) - wbstream + videochannel srv
+- [`client.wbstream.videochannel.yaml`](./examples/client.wbstream.videochannel.yaml) - wbstream + videochannel cnc
+- [`server.wbstream.seichannel.yaml`](./examples/server.wbstream.seichannel.yaml) - wbstream + seichannel srv
+- [`client.wbstream.seichannel.yaml`](./examples/client.wbstream.seichannel.yaml) - wbstream + seichannel cnc
+- [`server.wbstream.vp8channel.yaml`](./examples/server.wbstream.vp8channel.yaml) - wbstream + vp8channel srv
+- [`client.wbstream.vp8channel.yaml`](./examples/client.wbstream.vp8channel.yaml) - wbstream + vp8channel cnc
+- [`failover.yaml`](./examples/failover.yaml) - failover
## Схема
@@ -80,7 +90,7 @@ mode: srv
auth:
provider: jitsi
room:
- id: "https://meet.cryptopro.ru/myroom"
+ id: "https://meet.cryptopro.ru/REPLACE_ME_WITH_ROOM_ID"
crypto:
key: "REPLACE_ME_WITH_64_HEX_CHARS"
net:
@@ -96,7 +106,7 @@ mode: cnc
auth:
provider: jitsi
room:
- id: "https://meet.cryptopro.ru/myroom"
+ id: "https://meet.cryptopro.ru/REPLACE_ME_WITH_ROOM_ID"
crypto:
key: "REPLACE_ME_WITH_64_HEX_CHARS"
net:
diff --git a/docs/fast.md b/docs/fast.md
index af30863..50ecf22 100644
--- a/docs/fast.md
+++ b/docs/fast.md
@@ -22,25 +22,25 @@
### git
```sh
-apt install git # Debian / Ubuntu / Mint
-pacman -S git # Arch / CacheOS / Manjaro
+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
+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
+apt install curl # Debian / Ubuntu / Mint
+pacman -S curl # Arch / CacheOS / Manjaro
+dnf install curl # Fedora / RHEL / CentOS
```
### swap (ОЗУ)
@@ -74,8 +74,6 @@ cd olcrtc
./script/srv.sh
```
-Скрипт задаст несколько вопросов.
-
#### Флаги `srv.sh`
| Флаг | Что делает |
@@ -102,7 +100,7 @@ cd olcrtc
Выбери сервис. Полную матрицу совместимости смотри в [settings.md](settings.md).
-**По умолчанию `jitsi`** — стабильно работает на datachannel против self-hosted и публичных Jitsi инстансов (например `meet.cryptopro.ru`).
+**По умолчанию `jitsi`** - стабильно работает на datachannel против self-hosted и публичных Jitsi инстансов (например `meet.cryptopro.ru`).
### Transport (как именно передавать данные)
@@ -121,7 +119,7 @@ cd olcrtc
- **seichannel** - работает только с wbstream, медленный, но мелкий пинг.
- **videochannel** - работает с wbstream стабильно, с telemost по возможности; самый медленный и с большим пингом.
-**Рекомендуемая комбинация: `jitsi + datachannel`** — работает стабильно, не требует регистрации, легко поднимать на своём сервере. Альтернатива: `wbstream + vp8channel`.
+**Рекомендуемая комбинация: `jitsi + datachannel`** - работает стабильно, не требует регистрации, легко поднимать на своём сервере. Альтернатива: `wbstream + vp8channel`.
### Room ID
@@ -131,7 +129,7 @@ cd olcrtc
Для **jitsi** — полный URL комнаты в формате `https://host/room` (например `https://meet.cryptopro.ru/myroom`). Имя комнаты придумывается на лету, без регистрации. Подойдёт любой публичный или self-hosted Jitsi Meet.
-Для **telemost** и **wbstream** - создай руму через сайт ([телемост](https://telemost.yandex.ru/), [wbstream](https://stream.wb.ru)) и вставь её ID.
+Для **telemost** и **wbstream** - создай руму через сайт ([telemost](https://telemost.yandex.ru/), [wbstream](https://stream.wb.ru)) и вставь её ID.
### DNS
diff --git a/docs/manual.md b/docs/manual.md
index f47e1ac..fd2107e 100644
--- a/docs/manual.md
+++ b/docs/manual.md
@@ -12,10 +12,22 @@
Этот способ для тех кто хочет собрать бинарник руками без Docker/Podman.
Нужен Go 1.25+, mage, git.
-Проект в бете. По проблемам: t.me/openlibrecommunity
+---
+
+
+### swap (ОЗУ)
+
+Если у вас меньше 4ГБ оперативной памяти, сборка может вылетать. **Обязательно включите SWAP**:
+
+```bash
+sudo fallocate -l 4G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile
+```
+
---
+## Что нужно установить
+
## Шаг 1: Установить git
```sh
@@ -31,7 +43,7 @@ dnf install git # Fedora / RHEL / CentOS
### Arch / Fedora (всё просто)
```sh
-pacman -S go # Arch / CachyOS / Manjaro
+pacman -S go # Arch / CachyOS / Manjaro
dnf install go # Fedora / RHEL / CentOS
```
@@ -106,7 +118,6 @@ git clone https://github.com/openlibrecommunity/olcrtc --recurse-submodules
cd olcrtc
```
-`--recurse-submodules` обязателен - без него videochannel не соберётся.
---
@@ -121,9 +132,6 @@ mage cross # все платформы сразу (если собираешь
```
build/olcrtc-linux-amd64
-build/olcrtc-linux-arm64
-build/olcrtc-windows-amd64.exe
-build/olcrtc-darwin-amd64
```
---
@@ -313,12 +321,6 @@ 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
-```
---
diff --git a/docs/settings.md b/docs/settings.md
index 24cd290..bf067fd 100644
--- a/docs/settings.md
+++ b/docs/settings.md
@@ -22,15 +22,15 @@
**Легенда:**
- `+` - работает (pass в E2E тестах)
- `-` - не работает / не поддерживается (fail в E2E тестах)
-- `~` - нестабильно (может работать, но нестабильно)
+- `~` - нестабильно (может работать)
-**Telemost:** только vp8channel стабильно проходит. DataChannel удалён из Telemost. seichannel не поддерживается. videochannel — best effort.
+**Telemost:** только vp8channel стабильно проходит. DataChannel удалён из Telemost. seichannel не поддерживается. videochannel - медленно.
-**WBStream:** все транспорты кроме datachannel работают. DataChannel в обычном guest flow без выдавания модератора не работает — WB Stream выдаёт токены с `canPublishData=false`, и DC не маршрутизирует данные.
+**WBStream:** все транспорты кроме datachannel работают. DataChannel в обычном guest flow без выдавания модератора не работает - WB Stream выдаёт токены с `canPublishData=false`, и DC не маршрутизирует данные.
-**Jitsi:** datachannel стабильно проходит — реализован поверх colibri-ws bridge channel и шлёт байты через `EndpointMessage{raw}` broadcast. Подходит для self-hosted и публичных Jitsi Meet инстансов без аутентификации (`https://meet.cryptopro.ru/...`, `https://meet.jit.si/...` и т.п.). Видео-транспорты (vp8channel, seichannel, videochannel) экспонируют sendable VideoTrack через pion PeerConnection после Jingle session-accept, но Jicofo требует дополнительных протокольных шагов (LastN, ReceiverVideoConstraints, source-add) для маршрутизации видео — поэтому они помечены `~` (best effort).
+**Jitsi:** datachannel стабильно проходит - реализован поверх colibri-ws bridge channel и шлёт байты через `EndpointMessage{raw}` broadcast. Подходит для self-hosted и публичных Jitsi Meet инстансов без аутентификации (`https://meet.cryptopro.ru/...`, `https://meet.jit.si/...` и т.п.). Видео-транспорты (vp8channel, seichannel, videochannel) экспонируют sendable VideoTrack через pion PeerConnection после Jingle session-accept, но Jicofo требует дополнительных протокольных шагов (LastN, ReceiverVideoConstraints, source-add) для маршрутизации видео - поэтому они помечены `~` .
-**Jitsi + seichannel — отдельная оговорка.** SEI NAL-юниты идут пассажиром в H.264 видеопотоке, а Jicofo на self-hosted инстансах (например `meet.cryptopro.ru`) периодически режет/откладывает upstream видео когда ресивера в комнате формально нет — для нас это выглядит как `seichannel ack timeout` при формально живом PeerConnection. В steady-state транспорт работает, но e2e матрица помечает его `Unstable` (флаппит): зелёного и красного результата в CI достаточно, тест suite на этом не валится. Для надёжной передачи данных через jitsi предпочтительнее `datachannel` или `vp8channel`.
+**Jitsi + seichannel — отдельная оговорка.** SEI NAL-юниты идут пассажиром в H.264 видеопотоке, а Jicofo на self-hosted инстансах (например `meet.cryptopro.ru`) периодически режет/откладывает upstream видео когда ресивера в комнате формально нет - для нас это выглядит как `seichannel ack timeout` при формально живом PeerConnection. В steady-state транспорт работает, но e2e матрица помечает его `Unstable` (флаппит): зелёного и красного результата в CI достаточно, тест suite на этом не валится. Для надёжной передачи данных через jitsi предпочтительнее `datachannel` или `vp8channel`.
**Рекомендуемая комбинация: `jitsi + datachannel`** — стабильно работает на любом self-hosted или публичном Jitsi Meet (например `meet.cryptopro.ru`), не требует регистрации, простая руму создания. Альтернатива: `wbstream + vp8channel` — стабильно для коммерческих сценариев, не требует специальных прав.