Files
olcrtc/docs/uri.md
2026-05-19 21:39:07 +03:00

8.7 KiB
Raw Blame History

License Golang

Краткий URI-формат для клиентов

Этот документ описывает соглашение для разработчиков клиентских приложений, которым нужен компактный способ передавать параметры подключения olcrtc.

Текущий olcrtc не парсит такой URI автоматически. Если клиентское приложение хочет использовать эту запись, оно должно само разобрать строку и передать полученные поля в YAML конфиг olcrtc.


Формат

olcrtc://<Auth>?<Transport>@<RoomID>#<EncryptionKey>$<MIMO>
olcrtc://<Auth>?<Transport><key=value&key=value>@<RoomID>#<EncryptionKey>$<MIMO>

Все поля после olcrtc:// считаются частью клиентского соглашения.

Блок <key=value&...> - payload параметров транспорта в угловых скобках, идёт сразу после имени транспорта. Если параметры транспорту не нужны или используются defaults - блок опускается целиком.


Поля

Поле Значение
<Auth> Имя auth-провайдера, например telemost, wbstream, jitsi
<Transport> Имя транспорта, например datachannel, vp8channel, seichannel, videochannel
payload Параметры транспорта в <key=value&...>. Ключи совпадают с YAML полями. Блок опускается если используются defaults
<RoomID> Идентификатор комнаты или auth-specific room URL/ID
<EncryptionKey> Ключ шифрования в hex, обычно 64 символа (32 байта)
<MIMO> Свободный комментарий для UI/метаданных, например RU / olc free sub / IPv6

Параметры payload по транспортам

datachannel

Payload не используется.

vp8channel

Ключ YAML поле Описание
vp8-fps vp8.fps FPS VP8 потока
vp8-batch vp8.batch_size Кадров за тик

seichannel

Ключ YAML поле Описание
fps sei.fps FPS H264 потока
batch sei.batch_size Кадров за тик
frag sei.fragment_size Размер фрагмента в байтах
ack-ms sei.ack_timeout_ms Таймаут ACK в миллисекундах

videochannel

Ключ YAML поле Описание
video-w video.width Ширина в пикселях
video-h video.height Высота в пикселях
video-fps video.fps FPS
video-bitrate video.bitrate Битрейт, например 5000k или 2M
video-hw video.hw Аппаратное ускорение: none или nvenc
video-codec video.codec qrcode или tile
video-qr-size video.qr_size Размер фрагмента QR в байтах
video-qr-recovery video.qr_recovery Коррекция ошибок: low / medium / high / highest
video-tile-module video.tile_module Размер тайла в пикселях 1..270 (только tile)
video-tile-rs video.tile_rs Reed-Solomon паритет % 0..200 (только tile)

Соответствие YAML полям olcrtc

URI поле YAML поле
<Auth> auth.provider
<Transport> net.transport
payload соответствующие YAML поля транспорта
<RoomID> room.id
<EncryptionKey> crypto.key
<MIMO> В olcrtc не передаётся. Это только клиентский комментарий

link: direct и data: data в этом формате не кодируются, потому что для текущих сценариев они фиксированные.


Разделители

Разделитель После него идёт
:// начало полезной нагрузки после схемы olcrtc
? <Transport>
<...> payload параметров транспорта
@ <RoomID>
# <EncryptionKey>
$ <MIMO>

Рекомендуется не использовать эти символы внутри самих полей. Если клиенту это нужно, он должен ввести собственное escaping/percent-encoding правило и применять его симметрично при кодировании и декодировании.


Примеры

wbstream + datachannel (не работает в обычном guest flow)

olcrtc://wbstream?datachannel@room-01#d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799$RU / olc free sub / IPv6

Payload не нужен - datachannel параметров не имеет. Для WBStream этот режим не работает в обычном guest flow: WB Stream выдаёт токены с canPublishData=false, и DC не маршрутизирует данные.

Эквивалент YAML

mode: cnc
link: direct
auth:
  provider: wbstream
room:
  id: "room-01"
crypto:
  key: "d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799"
net:
  transport: datachannel
data: data

wbstream + vp8channel

olcrtc://wbstream?vp8channel<vp8-fps=60&vp8-batch=64>@room-01#d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799$RU / olc free sub / IPv6

Эквивалент YAML

mode: cnc
link: direct
auth:
  provider: wbstream
room:
  id: "room-01"
crypto:
  key: "d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799"
net:
  transport: vp8channel
vp8:
  fps: 60
  batch_size: 64
data: data

wbstream + seichannel

olcrtc://wbstream?seichannel<fps=60&batch=64&frag=900&ack-ms=2000>@room-01#d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799$DE / olc free sub

Эквивалент YAML

mode: cnc
link: direct
auth:
  provider: wbstream
room:
  id: "room-01"
crypto:
  key: "d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799"
net:
  transport: seichannel
sei:
  fps: 60
  batch_size: 64
  fragment_size: 900
  ack_timeout_ms: 2000
data: data

telemost + videochannel

olcrtc://telemost?videochannel<video-w=1080&video-h=1080&video-fps=60&video-bitrate=5000k&video-hw=none&video-codec=qrcode>@room-01#d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799$MIMO

Эквивалент YAML

mode: cnc
link: direct
auth:
  provider: telemost
room:
  id: "room-01"
crypto:
  key: "d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799"
net:
  transport: videochannel
video:
  width: 1080
  height: 1080
  fps: 60
  bitrate: "5000k"
  hw: none
  codec: qrcode
data: data

jitsi + datachannel

olcrtc://jitsi?datachannel@https://meet.small-dm.ru/myroom#d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799$RU / olc free sub

<RoomID> для jitsi — полный URL комнаты в формате https://host/room (или host/room). Поддерживается любой self-hosted Jitsi Meet инстанс без аутентификации; для публичных серверов вроде meet.jit.si тот же формат.

Эквивалент YAML

mode: cnc
link: direct
auth:
  provider: jitsi
room:
  id: "https://meet.small-dm.ru/myroom"
crypto:
  key: "d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799"
net:
  transport: datachannel
data: data

Короткие алиасы

Как хотите но лично я был бы против.


Формат подписки (список серверов): sub.md

Матрица совместимости auth + transport: settings.md