diff --git a/docs/about.md b/docs/about.md index 8490cc5..4a7eeeb 100644 --- a/docs/about.md +++ b/docs/about.md @@ -72,7 +72,7 @@ olcrtc client.yaml | Provider | Engine | Комментарий | |---|---|---| -| `jitsi` | `jitsi` | URL комнаты Jitsi, без отдельной регистрации | +| `jitsi` | `jitsi` | URL комнаты Jitsi (`meet1.arbitr.ru` или `meet.cryptopro.ru`), без отдельной регистрации | | `telemost` | `goolom` | credentials через Yandex Telemost API, с отдельной регистрацией | | `wbstream` | `livekit` | credentials через WbBStream API, с отдельной регистрацией | | `none` | задаётся в `engine.name` | прямой engine-режим с `engine.url` и `engine.token`, с отдельной регистрацией | @@ -130,6 +130,8 @@ mode: srv auth: provider: jitsi room: + # Используйте тот Jitsi-сервер, который работает в вашей сети: + # https://meet1.arbitr.ru/ROOM или https://meet.cryptopro.ru/ROOM id: "https://meet1.arbitr.ru/REPLACE_ME_WITH_ROOM_ID" crypto: key: "REPLACE_ME_WITH_64_HEX_CHARS" @@ -146,6 +148,8 @@ mode: cnc auth: provider: jitsi room: + # Используйте тот Jitsi-сервер, который работает в вашей сети: + # https://meet1.arbitr.ru/ROOM или https://meet.cryptopro.ru/ROOM id: "https://meet1.arbitr.ru/REPLACE_ME_WITH_ROOM_ID" crypto: key: "REPLACE_ME_WITH_64_HEX_CHARS" @@ -210,6 +214,7 @@ Go версия в сборочных скриптах: `1.25`. Для `videocha ```go sess, err := olcrtc.New(ctx, olcrtc.Config{ Auth: "jitsi", + // Используйте meet1.arbitr.ru или meet.cryptopro.ru - тот, что работает в вашей сети RoomID: "https://meet1.arbitr.ru/myroom", }) if err != nil { @@ -224,6 +229,7 @@ conn, err := sess.Dial(ctx) srv := tunnel.New(tunnel.Config{ Transport: "datachannel", Carrier: "jitsi", + // Используйте meet1.arbitr.ru или meet.cryptopro.ru - тот, что работает в вашей сети RoomURL: "https://meet1.arbitr.ru/myroom", KeyHex: "<64-char hex>", DNSServer: "8.8.8.8:53", diff --git a/docs/configuration.md b/docs/configuration.md index 360fa6d..8700df5 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -86,11 +86,17 @@ olcrtc /etc/olcrtc/client.yaml ### Сервер +> **Jitsi-провайдер:** используйте тот сервер, который доступен в вашей сети. Проверьте оба в браузере и выберите рабочий: +> - `https://meet1.arbitr.ru/` +> - `https://meet.cryptopro.ru/` + ```yaml mode: srv auth: provider: jitsi room: + # Используйте тот Jitsi-сервер, который работает в вашей сети: + # https://meet1.arbitr.ru/ROOM или https://meet.cryptopro.ru/ROOM id: "https://meet1.arbitr.ru/REPLACE_ME_WITH_ROOM_ID" crypto: key: "REPLACE_ME_WITH_64_HEX_CHARS" @@ -107,6 +113,8 @@ mode: cnc auth: provider: jitsi room: + # Используйте тот Jitsi-сервер, который работает в вашей сети: + # https://meet1.arbitr.ru/ROOM или https://meet.cryptopro.ru/ROOM id: "https://meet1.arbitr.ru/REPLACE_ME_WITH_ROOM_ID" crypto: key: "REPLACE_ME_WITH_64_HEX_CHARS" diff --git a/docs/docker.md b/docs/docker.md index 3331ffd..6a55d05 100644 --- a/docs/docker.md +++ b/docs/docker.md @@ -12,6 +12,12 @@ > **Важно:** Обязательно проверяйте, есть ли сервис видеозвонков у вас в белых списках. Если его там нет - используйте другой. Список всех сервисов в белых списках скоро будет опубликован. +> **Jitsi-провайдер:** если используете `jitsi`, выбирайте сервер в зависимости от того, что доступно в вашей сети: +> - `https://meet1.arbitr.ru/` +> - `https://meet.cryptopro.ru/` +> +> Откройте оба в браузере и используйте тот, который работает. + Здесь описан один из способов запуска сервера olcrtc с локальной конфигурацией Docker. diff --git a/docs/examples/client.jitsi.datachannel.yaml b/docs/examples/client.jitsi.datachannel.yaml index ac5609a..5475390 100644 --- a/docs/examples/client.jitsi.datachannel.yaml +++ b/docs/examples/client.jitsi.datachannel.yaml @@ -8,6 +8,8 @@ auth: # Для jitsi: полный URL комнаты (https://host/room или host/room). # Должен совпадать с сервером. +# Доступные серверы: meet1.arbitr.ru или meet.cryptopro.ru +# Проверьте в браузере, какой работает в вашей сети. room: id: "https://meet1.arbitr.ru/REPLACE_WITH_ROOM_NAME" diff --git a/docs/examples/client.jitsi.seichannel.yaml b/docs/examples/client.jitsi.seichannel.yaml index 4f79dad..2c6ca24 100644 --- a/docs/examples/client.jitsi.seichannel.yaml +++ b/docs/examples/client.jitsi.seichannel.yaml @@ -8,6 +8,8 @@ auth: # Для jitsi: полный URL комнаты (https://host/room или host/room). # Должен совпадать с сервером. +# Доступные серверы: meet1.arbitr.ru или meet.cryptopro.ru +# Проверьте в браузере, какой работает в вашей сети. room: id: "https://meet1.arbitr.ru/REPLACE_WITH_ROOM_NAME" diff --git a/docs/examples/client.jitsi.videochannel.yaml b/docs/examples/client.jitsi.videochannel.yaml index 3092d8a..c175590 100644 --- a/docs/examples/client.jitsi.videochannel.yaml +++ b/docs/examples/client.jitsi.videochannel.yaml @@ -8,6 +8,8 @@ auth: # Для jitsi: полный URL комнаты (https://host/room или host/room). # Должен совпадать с сервером. +# Доступные серверы: meet1.arbitr.ru или meet.cryptopro.ru +# Проверьте в браузере, какой работает в вашей сети. room: id: "https://meet1.arbitr.ru/REPLACE_WITH_ROOM_NAME" diff --git a/docs/examples/client.jitsi.vp8channel.yaml b/docs/examples/client.jitsi.vp8channel.yaml index a234c0d..d4218f3 100644 --- a/docs/examples/client.jitsi.vp8channel.yaml +++ b/docs/examples/client.jitsi.vp8channel.yaml @@ -8,6 +8,8 @@ auth: # Для jitsi: полный URL комнаты (https://host/room или host/room). # Должен совпадать с сервером. +# Доступные серверы: meet1.arbitr.ru или meet.cryptopro.ru +# Проверьте в браузере, какой работает в вашей сети. room: id: "https://meet1.arbitr.ru/REPLACE_WITH_ROOM_NAME" diff --git a/docs/examples/server.jitsi.datachannel.yaml b/docs/examples/server.jitsi.datachannel.yaml index a0925f2..df7d601 100644 --- a/docs/examples/server.jitsi.datachannel.yaml +++ b/docs/examples/server.jitsi.datachannel.yaml @@ -8,6 +8,8 @@ auth: # Для jitsi: полный URL комнаты (https://host/room или host/room). # Должен совпадать с клиентом. +# Доступные серверы: meet1.arbitr.ru или meet.cryptopro.ru +# Проверьте в браузере, какой работает в вашей сети. room: id: "https://meet1.arbitr.ru/REPLACE_WITH_ROOM_NAME" diff --git a/docs/examples/server.jitsi.seichannel.yaml b/docs/examples/server.jitsi.seichannel.yaml index 6833e90..d729c63 100644 --- a/docs/examples/server.jitsi.seichannel.yaml +++ b/docs/examples/server.jitsi.seichannel.yaml @@ -8,6 +8,8 @@ auth: # Для jitsi: полный URL комнаты (https://host/room или host/room). # Должен совпадать с клиентом. +# Доступные серверы: meet1.arbitr.ru или meet.cryptopro.ru +# Проверьте в браузере, какой работает в вашей сети. room: id: "https://meet1.arbitr.ru/REPLACE_WITH_ROOM_NAME" diff --git a/docs/examples/server.jitsi.videochannel.yaml b/docs/examples/server.jitsi.videochannel.yaml index 8161066..2fb522d 100644 --- a/docs/examples/server.jitsi.videochannel.yaml +++ b/docs/examples/server.jitsi.videochannel.yaml @@ -8,6 +8,8 @@ auth: # Для jitsi: полный URL комнаты (https://host/room или host/room). # Должен совпадать с клиентом. +# Доступные серверы: meet1.arbitr.ru или meet.cryptopro.ru +# Проверьте в браузере, какой работает в вашей сети. room: id: "https://meet1.arbitr.ru/REPLACE_WITH_ROOM_NAME" diff --git a/docs/examples/server.jitsi.vp8channel.yaml b/docs/examples/server.jitsi.vp8channel.yaml index 9b8000f..49732d8 100644 --- a/docs/examples/server.jitsi.vp8channel.yaml +++ b/docs/examples/server.jitsi.vp8channel.yaml @@ -8,6 +8,8 @@ auth: # Для jitsi: полный URL комнаты (https://host/room или host/room). # Должен совпадать с клиентом. +# Доступные серверы: meet1.arbitr.ru или meet.cryptopro.ru +# Проверьте в браузере, какой работает в вашей сети. room: id: "https://meet1.arbitr.ru/REPLACE_WITH_ROOM_NAME" diff --git a/docs/fast.md b/docs/fast.md index 783a656..22e9ee1 100644 --- a/docs/fast.md +++ b/docs/fast.md @@ -103,7 +103,7 @@ cd olcrtc Выбери сервис. Полную матрицу совместимости смотри в [settings.md](settings.md). -**По умолчанию `jitsi`** - стабильно работает на datachannel против self-hosted и публичных Jitsi инстансов (например `meet1.arbitr.ru`). +**По умолчанию `jitsi`** - стабильно работает на datachannel против self-hosted и публичных Jitsi инстансов (например `meet1.arbitr.ru` или `meet.cryptopro.ru`). Проверьте в браузере, какой из них доступен в вашей сети. ### Transport (как именно передавать данные) @@ -130,7 +130,7 @@ cd olcrtc Введите Room ID: ``` -Для **jitsi** - полный URL комнаты в формате `https://host/room` (например `https://meet1.arbitr.ru/myroom`). Имя комнаты придумывается на лету, без регистрации. Подойдёт любой публичный или self-hosted Jitsi Meet. +Для **jitsi** - полный URL комнаты в формате `https://host/room` (например `https://meet1.arbitr.ru/myroom` или `https://meet.cryptopro.ru/myroom`). Имя комнаты придумывается на лету, без регистрации. Подойдёт любой публичный или self-hosted Jitsi Meet. **Обязательно проверьте, какой сервер работает в вашей сети** - откройте оба в браузере и используйте тот, который открывается. Для **telemost** и **wbstream** - создай руму через сайт ([telemost](https://telemost.yandex.ru/), [wbstream](https://stream.wb.ru)) и вставь её ID. diff --git a/docs/manual.md b/docs/manual.md index 863243f..36ab1ff 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -158,7 +158,7 @@ openssl rand -hex 32 ### jitsi + datachannel (рекомендуется) -Самый простой способ: используй любой self-hosted или публичный Jitsi Meet инстанс. Регистрация не нужна, имя комнаты выдумывается на лету. По умолчанию в примерах ниже - `meet1.arbitr.ru`, но подойдёт любой другой (`meet.jit.si`, свой self-hosted и т.п.). +Самый простой способ: используй любой self-hosted или публичный Jitsi Meet инстанс. Регистрация не нужна, имя комнаты выдумывается на лету. Доступные публичные серверы: `meet1.arbitr.ru` и `meet.cryptopro.ru` - **обязательно проверь в браузере, какой из них работает в твоей сети**, и используй тот, который открывается. Также подойдёт любой другой (`meet.jit.si`, свой self-hosted и т.п.). Создай YAML конфиг: @@ -168,6 +168,7 @@ mode: srv auth: provider: jitsi room: + # Используйте meet1.arbitr.ru или meet.cryptopro.ru - тот, что работает в вашей сети id: "https://meet1.arbitr.ru/myroom" crypto: key: "d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799" @@ -242,6 +243,7 @@ mode: cnc auth: provider: jitsi room: + # Используйте meet1.arbitr.ru или meet.cryptopro.ru - тот, что работает в вашей сети id: "https://meet1.arbitr.ru/myroom" crypto: key: "" diff --git a/docs/settings.md b/docs/settings.md index dbc311f..9c1308f 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -30,11 +30,11 @@ **WBStream:** все транспорты кроме datachannel работают. DataChannel в обычном guest flow без выдавания модератора не работает - WB Stream выдаёт токены с `canPublishData=false`, и DC не маршрутизирует данные. -**Jitsi:** datachannel стабильно проходит - реализован поверх colibri-ws bridge channel и шлёт байты через `EndpointMessage{raw}` broadcast. Подходит для self-hosted и публичных Jitsi Meet инстансов без аутентификации (`https://meet1.arbitr.ru/...`, `https://meet.jit.si/...` и т.п.). Видео-транспорты (vp8channel, seichannel, videochannel) экспонируют sendable VideoTrack через pion PeerConnection после Jingle session-accept, но Jicofo требует дополнительных протокольных шагов (LastN, ReceiverVideoConstraints, source-add) для маршрутизации видео - поэтому они помечены `~` . +**Jitsi:** datachannel стабильно проходит - реализован поверх colibri-ws bridge channel и шлёт байты через `EndpointMessage{raw}` broadcast. Подходит для self-hosted и публичных Jitsi Meet инстансов без аутентификации (`https://meet1.arbitr.ru/...`, `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 инстансах (например `meet1.arbitr.ru`) периодически режет/откладывает upstream видео когда ресивера в комнате формально нет - для нас это выглядит как `seichannel ack timeout` при формально живом PeerConnection. В steady-state транспорт работает, но e2e матрица помечает его `Unstable` (флаппит): зелёного и красного результата в CI достаточно, тест suite на этом не валится. Для надёжной передачи данных через jitsi предпочтительнее `datachannel` или `vp8channel`. +**Jitsi + seichannel - отдельная оговорка.** SEI NAL-юниты идут пассажиром в H.264 видеопотоке, а Jicofo на self-hosted инстансах (например `meet1.arbitr.ru`, `meet.cryptopro.ru`) периодически режет/откладывает upstream видео когда ресивера в комнате формально нет - для нас это выглядит как `seichannel ack timeout` при формально живом PeerConnection. В steady-state транспорт работает, но e2e матрица помечает его `Unstable` (флаппит): зелёного и красного результата в CI достаточно, тест suite на этом не валится. Для надёжной передачи данных через jitsi предпочтительнее `datachannel` или `vp8channel`. -**Рекомендуемая комбинация: `jitsi + datachannel`** - стабильно работает на любом self-hosted или публичном Jitsi Meet (например `meet1.arbitr.ru`), не требует регистрации, простая руму создания. Альтернатива: `wbstream + vp8channel` - стабильно для коммерческих сценариев, не требует специальных прав. +**Рекомендуемая комбинация: `jitsi + datachannel`** - стабильно работает на любом self-hosted или публичном Jitsi Meet (например `meet1.arbitr.ru` или `meet.cryptopro.ru` - проверьте, какой доступен в вашей сети), не требует регистрации, простая руму создания. Альтернатива: `wbstream + vp8channel` - стабильно для коммерческих сценариев, не требует специальных прав. Скорость по убыванию: `datachannel` > `vp8channel` > `seichannel` > `videochannel` diff --git a/docs/uri.md b/docs/uri.md index f5c85b8..0c2a241 100644 --- a/docs/uri.md +++ b/docs/uri.md @@ -222,7 +222,13 @@ data: data olcrtc://jitsi?datachannel@https://meet1.arbitr.ru/myroom#d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799$RU / olc free sub ``` -`` для jitsi - полный URL комнаты в формате `https://host/room` (или `host/room`). Поддерживается любой self-hosted Jitsi Meet инстанс без аутентификации; для публичных серверов вроде `meet.jit.si` тот же формат. +Или с `meet.cryptopro.ru`: + +```text +olcrtc://jitsi?datachannel@https://meet.cryptopro.ru/myroom#d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799$RU / olc free sub +``` + +`` для jitsi - полный URL комнаты в формате `https://host/room` (или `host/room`). Поддерживается любой self-hosted Jitsi Meet инстанс без аутентификации; для публичных серверов (`meet1.arbitr.ru`, `meet.cryptopro.ru`, `meet.jit.si`) тот же формат. **Обязательно проверьте, какой сервер доступен в вашей сети.** ### Эквивалент YAML @@ -231,6 +237,7 @@ mode: cnc auth: provider: jitsi room: + # Используйте meet1.arbitr.ru или meet.cryptopro.ru - тот, что работает в вашей сети id: "https://meet1.arbitr.ru/myroom" crypto: key: "d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799" diff --git a/internal/auth/jitsi/jitsi.go b/internal/auth/jitsi/jitsi.go index 9ccc732..db1054c 100644 --- a/internal/auth/jitsi/jitsi.go +++ b/internal/auth/jitsi/jitsi.go @@ -44,7 +44,8 @@ func (Provider) Engine() string { return "jitsi" } const defaultServiceURL = "https://meet1.arbitr.ru" // DefaultServiceURL returns the default Jitsi Meet service URL used by config -// defaults and interactive helpers. +// defaults and interactive helpers. Users should verify which server is +// accessible in their network: https://meet1.arbitr.ru or https://meet.cryptopro.ru func (Provider) DefaultServiceURL() string { return defaultServiceURL } // Issue parses cfg.RoomURL into host+room and returns engine credentials. diff --git a/pkg/olcrtc/olcrtc.go b/pkg/olcrtc/olcrtc.go index 2d9b455..13eca35 100644 --- a/pkg/olcrtc/olcrtc.go +++ b/pkg/olcrtc/olcrtc.go @@ -15,6 +15,7 @@ // // sess, err := olcrtc.New(ctx, olcrtc.Config{ // Auth: "jitsi", +// // Use meet1.arbitr.ru or meet.cryptopro.ru - whichever works in your network // RoomID: "https://meet1.arbitr.ru/myroom", // }) // diff --git a/pkg/olcrtc/tunnel/tunnel.go b/pkg/olcrtc/tunnel/tunnel.go index 3ffe0e2..08df9d4 100644 --- a/pkg/olcrtc/tunnel/tunnel.go +++ b/pkg/olcrtc/tunnel/tunnel.go @@ -7,6 +7,7 @@ // srv := tunnel.New(tunnel.Config{ // Transport: "datachannel", // Carrier: "jitsi", +// // Use meet1.arbitr.ru or meet.cryptopro.ru - whichever works in your network // RoomURL: "https://meet1.arbitr.ru/myroom", // KeyHex: "<64-char hex>", // DNSServer: "8.8.8.8:53", diff --git a/script/cnc.sh b/script/cnc.sh index 7503abe..b20e255 100755 --- a/script/cnc.sh +++ b/script/cnc.sh @@ -129,9 +129,29 @@ echo "[*] Using transport: $TRANSPORT" echo "" if [ "$AUTH" = "jitsi" ]; then - read -p "Jitsi base URL [default: https://meet1.arbitr.ru/]: " JITSI_BASE_INPUT - JITSI_BASE_URL=${JITSI_BASE_INPUT:-https://meet1.arbitr.ru/} - JITSI_BASE_URL="${JITSI_BASE_URL%/}" + echo "" + echo "Выберите Jitsi-сервер (проверьте в браузере, какой работает в вашей сети):" + echo " 1) https://meet1.arbitr.ru/" + echo " 2) https://meet.cryptopro.ru/" + echo " 3) Другой (ввести вручную)" + read -p "Введите номер [1-3, по умолчанию: 1]: " JITSI_SERVER_CHOICE + + case "$JITSI_SERVER_CHOICE" in + 2) + JITSI_BASE_URL="https://meet.cryptopro.ru" + ;; + 3) + read -p "Введите URL Jitsi-сервера: " JITSI_BASE_INPUT + JITSI_BASE_URL="${JITSI_BASE_INPUT%/}" + if [ -z "$JITSI_BASE_URL" ]; then + echo "[X] URL не может быть пустым" + exit 1 + fi + ;; + *) + JITSI_BASE_URL="https://meet1.arbitr.ru" + ;; + esac read -p "Enter Jitsi room name or URL: " JITSI_ROOM_INPUT if [ -z "$JITSI_ROOM_INPUT" ]; then diff --git a/script/srv.sh b/script/srv.sh index 02ae3ef..cbbf98a 100755 --- a/script/srv.sh +++ b/script/srv.sh @@ -127,9 +127,29 @@ echo "" GEN_ROOM=0 if [ "$CARRIER" = "jitsi" ]; then - read -p "Jitsi base URL [default: https://meet1.arbitr.ru/]: " JITSI_BASE_INPUT - JITSI_BASE_URL=${JITSI_BASE_INPUT:-https://meet1.arbitr.ru/} - JITSI_BASE_URL="${JITSI_BASE_URL%/}" + echo "" + echo "Выберите Jitsi-сервер (проверьте в браузере, какой работает в вашей сети):" + echo " 1) https://meet1.arbitr.ru/" + echo " 2) https://meet.cryptopro.ru/" + echo " 3) Другой (ввести вручную)" + read -p "Введите номер [1-3, по умолчанию: 1]: " JITSI_SERVER_CHOICE + + case "$JITSI_SERVER_CHOICE" in + 2) + JITSI_BASE_URL="https://meet.cryptopro.ru" + ;; + 3) + read -p "Введите URL Jitsi-сервера: " JITSI_BASE_INPUT + JITSI_BASE_URL="${JITSI_BASE_INPUT%/}" + if [ -z "$JITSI_BASE_URL" ]; then + echo "[X] URL не может быть пустым" + exit 1 + fi + ;; + *) + JITSI_BASE_URL="https://meet1.arbitr.ru" + ;; + esac echo "Room options:" echo " 1) Auto-generate new room (recommended)"