WB Stream removed the room creation API; gen mode for wbstream no longer works. Remove the wbstream branch from session.Gen, drop the auto-generate prompt from srv.sh and the entrypoint fallback, and update docs to instruct users to create rooms manually at stream.wb.ru.
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
Шаг 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, без кеша
Carrier (на каком сервисе передавать трафик)
Select carrier:
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. - vp8channel - работает везде, быстрый, но большой пинг.
- seichannel - работает везде кроме telemost, медленный, но мелкий пинг.
- videochannel - работает везде, самый медленный и большой пинг.
Лучшая комбинация: wbstream + datachannel - максимальная скорость, минимальный пинг, без риска бана.
Room ID
Enter Room ID:
Для telemost и wbstream - создай руму через сайт (телемост, wbstream) и вставь её ID.
Для jazz скрипт предложит выбор: сгенерировать автоматически (рекомендуется) или ввести существующий ID. При автогенерации скрипт запустит gen и получит ID до старта сервера. Также можно создать руму через сайт jazz.
Client ID
Enter Client ID [default: default]:
Это обязательный идентификатор клиента. Он должен быть одинаковым на сервере и клиенте - используется чтобы клиент подключался именно к вашему серверу, а не к случайному серверу в руме.
Один -client-id технически может держать бесконечное количество одновременных соединений. Однако SFU ограничивает полосу пропускания на одного участника звонка, поэтому оптимально использовать схему 1 client-id = 1 пользователь - но это не обязательное требование.
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
Carrier: Carrier
Transport: Transport
Room ID: Room ID
Client ID: default
Encryption key: Encryption key
Сохрани Room ID, Client ID и Encryption key - они нужны для клиента.
Шаг 3: Запустить клиент
На своей машине (домашний ПК, ноутбук):
git clone https://github.com/openlibrecommunity/olcrtc --recurse-submodules
cd olcrtc
./script/cnc.sh
Отвечай на те же вопросы что на сервере - carrier, transport, room ID и client ID должны совпадать.
Когда спросит client ID:
Enter Client ID [default: default]: default
Введи тот же client 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
Client ID: default
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
