Files

13 KiB
Raw Permalink Blame History

License Golang

RU / EN

Быстрый старт (через скрипты)

Важно: Обязательно проверяйте, есть ли сервис видеозвонков у вас в белых списках, работает ли он в вашей сети и так далее. Если нет - используйте другой.

Это самый простой способ. Всё запускается в контейнере Podman. Скрипт делает всё сам: клонирует исходники, собирает бинарник в контейнере, генерирует конфиг и запускает.

Проект в бете. По проблемам: t.me/openlibrecommunity

Хочешь собрать бинарник руками - смотри manual.ru.md.


Что нужно установить

git

apt install git        # Debian / Ubuntu / Mint
pacman -S git          # Arch / CachyOS / Manjaro
dnf install git        # Fedora / RHEL / CentOS

curl

apt install curl       # Debian / Ubuntu / Mint
pacman -S curl         # Arch / CachyOS / Manjaro
dnf install curl       # Fedora / RHEL / CentOS

podman

Можно не ставить заранее - скрипт сам поставит podman, если его нет. Но при желании:

apt install podman     # Debian / Ubuntu / Mint
pacman -S podman       # Arch / CachyOS / Manjaro
dnf install podman     # Fedora / RHEL / CentOS

swap (ОЗУ)

Если на машине меньше 4 ГБ оперативной памяти, сборка может вылетать. Включите SWAP:

sudo fallocate -l 4G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile

Шаг 1: Скачать репозиторий

git clone https://github.com/openlibrecommunity/olcrtc --recurse-submodules
cd olcrtc
git clone

Шаг 2: Запустить сервер

На машине, через которую должен идти трафик (VPS, сервер за рубежом, домашний ПК):

./script/srv.sh

Скрипт сам поставит podman при необходимости, склонирует актуальный код, соберёт бинарник в контейнере и запустит сервер. Дальше он задаст вопросы.

Флаги srv.sh

Флаг Что делает
--branch=<name> Использовать другую ветку репозитория вместо master
--no-cache Очистить Go-кеш (~/.cache/olcrtc) перед сборкой - пересобрать с нуля
./script/srv.sh --no-cache               # сборка с нуля
./script/srv.sh --branch=dev --no-cache  # ветка dev, без кеша

Carrier (на каком сервисе передавать трафик)

Select carrier:
  1) jitsi
  2) telemost
  3) wbstream
Enter choice [1-3, default: 1]:

По умолчанию jitsi - стабильно работает на datachannel, не требует регистрации, легко поднимается на своём сервере. Полная матрица совместимости - в settings.ru.md.

Transport (как именно передавать данные)

Select transport:
  1) datachannel
  2) videochannel
  3) seichannel
  4) vp8channel
Enter choice [1-4, default: 1]:

Рекомендации:

  • datachannel - самый быстрый, минимальный пинг. Стабильно работает с jitsi. WBStream DC не работает в обычном guest flow. Telemost удалил DC.
  • vp8channel - работает с telemost и wbstream, быстрый, но большой пинг.
  • seichannel - работает только с wbstream, медленный, но мелкий пинг.
  • videochannel - работает с wbstream стабильно, с telemost по возможности; самый медленный и с большим пингом.

Рекомендуемая комбинация: jitsi + datachannel. Альтернатива: wbstream + vp8channel.

Jitsi-сервер (только для carrier jitsi)

Выберите Jitsi-сервер (проверьте в браузере, какой работает в вашей сети):
  1) https://meet.small-dm.ru/
  2) https://meet1.arbitr.ru/
  3) https://meet.handyweb.org/
  4) Другой (ввести вручную)
Введите номер [1-4, по умолчанию: 1]:

Выбери тот сервер, который открывается в твоём браузере. Подойдёт любой публичный или self-hosted Jitsi Meet - выбери 4 и введи свой URL.

Room (только для carrier jitsi)

Room options:
  1) Auto-generate new room (recommended)
  2) Use specific room name or URL
Enter choice [1-2, default: 1]:
  • 1) Auto-generate - скрипт сам придумает имя комнаты на выбранном сервере. Рекомендуется.
  • 2) Specific - введи имя комнаты (myroom) или полный URL (https://meet.small-dm.ru/myroom).

Для telemost и wbstream Jitsi-меню не показывается - скрипт спросит Room ID напрямую. Создай руму через сайт (telemost, wbstream) и вставь её ID.

DNS

DNS server [default: 8.8.8.8:53]:

Нажми Enter. Менять не нужно без причины; при желании - 77.88.8.8:53 или 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, быстрее, но менее стабилен.

Дальше скрипт спросит ширину/высоту, коррекцию ошибок QR, размер фрагмента (или параметры tile), FPS, битрейт и аппаратное ускорение (none/nvenc). Для значений по умолчанию жми Enter.

Параметры транспорта (только vp8channel)

VP8 FPS [default: 25]:
VP8 batch size (frames per tick) [default: 1]:

Жми Enter, если устраивают 25 и 1.

Параметры транспорта (только seichannel)

SEI FPS [default: 60]:
SEI batch size (frames per tick) [default: 64]:
SEI fragment size in bytes [default: 900]:
SEI ACK timeout in milliseconds [default: 2000]:

Жми Enter на всех - значения по умолчанию оптимальны.

Комментарий к конфигу

Enter a comment for the config (default: olc - t.me/openlibrecommunity):

Это подпись для итогового olcrtc:// URI. Можно оставить пустым (Enter).

Результат

После запуска скрипт выведет имя контейнера, carrier, transport, Room ID, ключ шифрования и готовый olcrtc:// URI:

[+] Server started successfully!

Container name: olcrtc-server-xxxxxxxx
Carrier:        jitsi
Transport:      datachannel
Room ID/URL:    https://meet.small-dm.ru/olcrtc-xxxxxxxx
Encryption key: d823fa01cb3e0609b67322f7cf984c4ee2e294936fc24ef38c9e59f4799...

uri: olcrtc://jitsi?datachannel@https://meet.small-dm.ru/olcrtc-xxxxxxxx#<key>$olc - t.me/openlibrecommunity

Сохрани Room ID и ключ шифрования - они нужны для клиента. Ключ также сохраняется в ~/.olcrtc_key и переиспользуется при повторных запусках.


Шаг 3: Запустить клиент

На своей машине (домашний ПК, ноутбук):

git clone https://github.com/openlibrecommunity/olcrtc --recurse-submodules
cd olcrtc
./script/cnc.sh

Отвечай на те же вопросы, что и на сервере - auth, transport и room ID должны совпадать. Для jitsi скрипт спросит тот же выбор сервера и имя/URL комнаты.

Когда спросит ключ:

Enter Encryption Key (hex):

Вставь ключ с сервера (64 hex-символа).

SOCKS5: адрес, порт, аутентификация

SOCKS5 ip [default: 127.0.0.1]:
SOCKS5 port [default: 8808]:
SOCKS5 username (leave empty to disable auth):

Жми Enter для адреса и порта - прокси поднимется на 127.0.0.1:8808. Если нужна защита логином/паролем - введи логин, затем пароль. При биндинге вне loopback (не 127.*) логин и пароль обязательны.

Результат

[+] Client started successfully!

Container name: olcrtc-client-xxxxxxxx
Auth:           jitsi
Transport:      datachannel
Room ID/URL:    https://meet.small-dm.ru/olcrtc-xxxxxxxx
SOCKS5 proxy:   127.0.0.1:8808

Шаг 4: Проверить

curl --socks5-hostname 127.0.0.1:8808 https://icanhazip.com

Должен вернуться IP твоего сервера.

Или направить весь трафик через прокси:

export all_proxy=socks5h://127.0.0.1:8808
curl https://icanhazip.com

Управление

Логи

podman ps --filter name=olcrtc
podman logs -f olcrtc-server-xxxxxxxx   # на сервере
podman logs -f olcrtc-client-xxxxxxxx   # на клиенте

Остановить

podman stop olcrtc-server-xxxxxxxx
podman stop olcrtc-client-xxxxxxxx

Остановить все olcrtc-контейнеры разом:

podman stop $(podman ps -q --filter name=olcrtc)

Обновить уже запущенный инстанс

Запущенный контейнер сам не обновляется: внутри него остаётся бинарник, собранный на момент запуска. Чтобы перейти на актуальный код, останови старый контейнер и запусти скрипт заново.

cd olcrtc
git pull --recurse-submodules          # обновить локальные скрипты
podman stop olcrtc-server-xxxxxxxx     # остановить старый контейнер
./script/srv.sh --no-cache             # запустить заново со свежим кодом

--no-cache не обязателен, но гарантирует пересборку с нуля. При повторном запуске укажи те же auth, transport, room ID и ключ. Серверный ключ хранится в ~/.olcrtc_key и переиспользуется автоматически.


Несколько инстансов на одной машине

Можно запустить несколько серверов или клиентов на одной машине - каждый запуск создаёт контейнер с уникальным именем (olcrtc-server-<random>), они не конфликтуют.

./script/srv.sh   # первый инстанс - например jitsi + datachannel
./script/srv.sh   # второй инстанс - например wbstream + vp8channel

На клиенте для каждого инстанса запускай отдельный cnc.sh с разными SOCKS5-портами, чтобы переключаться между ними:

./script/cnc.sh   # первый клиент - порт 8808 (по умолчанию)
./script/cnc.sh   # второй клиент - укажи порт 8809

Все настройки и матрица совместимости: settings.ru.md. Ручная сборка без скриптов: manual.ru.md.