11 KiB
Быстрый старт (через скрипты)
Этот способ самый простой. Все запускается в контейнере Podman. Скрипт всё сделает сам: скачает исходники, соберёт в контейнере, запустит.
Проект в бете. По проблемам: t.me/openlibrecommunity
Что нужно установить
git
apt install git # Debian / Ubuntu / Mint
pacman -S git # Arch / CacheOS / Manjaro
dnf install git # Fedora / RHEL / CentOS
podman
apt install podman # Debian / Ubuntu / Mint
pacman -S podman # Arch / CacheOS / Manjaro
dnf install podman # Fedora / RHEL / CentOS
curl
apt install curl # Debian / Ubuntu/ Mint
pacman -S curl # Arch / CacheOS / Manjaro
dnf install curl # Fedora
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
Шаг 2: Запустить сервер
На машине, через которую должен идти трафик (VPS, сервер за рубежом, домашний ПК):
./script/srv.sh
Скрипт задаст несколько вопросов.
Флаги srv.sh
| Флаг | Что делает |
|---|---|
--branch=<name> |
Использовать другую ветку репозитория вместо master |
--no-cache |
Очистить Go-кеш (~/.cache/olcrtc) перед сборкой - пересобрать с нуля |
--no-cache полезен когда нужно убедиться что собирается актуальный код (например после обновления зависимостей или при странных ошибках сборки). Без флага скрипт переиспользует кеш gomod и gobuild, что сильно ускоряет повторные запуски.
./script/srv.sh --no-cache # сборка с нуля
./script/srv.sh --branch=dev --no-cache # ветка dev, без кеша
Auth (на каком сервисе передавать трафик)
Select auth provider:
1) telemost
2) jazz
3) wbstream
Enter choice [1-3, default: 3]:
Выбери сервис. Полную матрицу совместимости смотри в 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 DC требуетcanPublishData/модераторские права у участников, поэтому для обычного guest flow не рекомендуется. - vp8channel - работает везде, быстрый, но большой пинг.
- seichannel - работает везде кроме telemost, медленный, но мелкий пинг.
- videochannel - работает везде, самый медленный и большой пинг.
Рекомендуемая комбинация для wbstream: wbstream + vp8channel. wbstream + datachannel используй только если участникам выданы права на отправку data packets.
Room ID
Enter Room ID:
Для telemost и wbstream - создай руму через сайт (телемост, wbstream) и вставь её ID.
Для jazz скрипт предложит выбор: сгенерировать автоматически (рекомендуется) или ввести существующий ID. При автогенерации скрипт запустит gen и получит ID до старта сервера. Также можно создать руму через сайт jazz.
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
Auth: wbstream
Transport: datachannel
Room ID: abc123xyz
Encryption key: d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799
Сохрани Room ID и Encryption key - они нужны для клиента.
Шаг 3: Запустить клиент
На своей машине (домашний ПК, ноутбук):
git clone https://github.com/openlibrecommunity/olcrtc --recurse-submodules
cd olcrtc
./script/cnc.sh
Отвечай на те же вопросы что на сервере - auth, transport и room 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
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 logs -f olcrtc-server # на сервере
podman logs -f olcrtc-client # на клиенте
Остановить
podman stop olcrtc-server
podman stop olcrtc-client
Перезапустить (просто запусти скрипт снова)
Скрипт сам останавливает старый контейнер перед стартом нового.
Хочешь собрать руками без Podman? -> Мануальная сборка
Все настройки и матрица совместимости -> settings.md
