From 53e4c984fca8aa9fa086c9c90a2f4ab261ef7edf Mon Sep 17 00:00:00 2001 From: zarazaex69 Date: Fri, 22 May 2026 00:11:39 +0300 Subject: [PATCH] docs: add header banners and improve doc clarity --- docs/about.md | 15 ++++++++-- docs/configuration.md | 64 +++++++++++++++++++++++++------------------ docs/fast.md | 24 ++++++++-------- docs/manual.md | 26 ++++++++++-------- docs/settings.md | 10 +++---- 5 files changed, 79 insertions(+), 60 deletions(-) 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 @@ +
+ + + +![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) + +
+ + + # 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 @@ +
+ + + +![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) + +
+ + # Настройка 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` — стабильно для коммерческих сценариев, не требует специальных прав.