Files
olcrtc/docs/uri.md
T

7.3 KiB

License Golang

RU / EN

Compact URI format for clients

This document describes a convention for developers of client applications that need a compact way to pass olcrtc connection parameters.

The current olcrtc does not parse such a URI automatically. If a client application wants to use this notation, it must parse the string itself and pass the resulting fields into the olcrtc YAML config.


Format

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

Everything after olcrtc:// is considered part of the client convention.

The <key=value&...> block is the transport parameter payload in angle brackets, placed right after the transport name. If the transport needs no parameters or uses defaults, the block is dropped entirely.


Fields

Field Meaning
<Auth> Auth provider name, e.g. telemost, wbstream, jitsi
<Transport> Transport name, e.g. datachannel, vp8channel, seichannel, videochannel
payload Transport parameters in <key=value&...>. Keys match the YAML fields. The block is dropped when defaults are used
<RoomID> Room identifier or auth-specific room URL/ID
<EncryptionKey> Encryption key in hex, usually 64 chars (32 bytes)
<MIMO> Free-form comment for UI/metadata, e.g. RU / olc free sub / IPv6

Payload parameters per transport

datachannel

No payload.

vp8channel

Key YAML field Description
vp8-fps vp8.fps VP8 stream FPS
vp8-batch vp8.batch_size Frames per tick

seichannel

Key YAML field Description
fps sei.fps H264 stream FPS
batch sei.batch_size Frames per tick
frag sei.fragment_size Fragment size in bytes
ack-ms sei.ack_timeout_ms ACK timeout in milliseconds

videochannel

Key YAML field Description
video-w video.width Width in pixels
video-h video.height Height in pixels
video-fps video.fps FPS
video-bitrate video.bitrate Bitrate, e.g. 5000k or 2M
video-hw video.hw Hardware acceleration: none or nvenc
video-codec video.codec qrcode or tile
video-qr-size video.qr_size QR fragment size in bytes
video-qr-recovery video.qr_recovery Error correction: low / medium / high / highest
video-tile-module video.tile_module Tile size in pixels 1..270 (tile only)
video-tile-rs video.tile_rs Reed-Solomon parity % 0..200 (tile only)

Mapping to olcrtc YAML fields

URI field YAML field
<Auth> auth.provider
<Transport> net.transport
payload matching transport YAML fields
<RoomID> room.id
<EncryptionKey> crypto.key
<MIMO> Not passed to olcrtc. Client comment only

data: data is not encoded in this format, because it is a local runtime setting of a specific run.


Separators

Separator What follows it
:// start of the payload after the olcrtc scheme
? <Transport>
<...> transport parameter payload
@ <RoomID>
# <EncryptionKey>
$ <MIMO>

It is recommended not to use these characters inside the fields themselves. If a client needs to, it must introduce its own escaping/percent-encoding rule and apply it symmetrically when encoding and decoding.


Examples

wbstream + datachannel (does not work in the normal guest flow)

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

No payload is needed - datachannel has no parameters. For WBStream this mode does not work in the normal guest flow: WB Stream issues tokens with canPublishData=false, and DC does not route data.

YAML equivalent

mode: cnc
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 equivalent

mode: cnc
auth:
  provider: wbstream
room:
  id: "room-01"
crypto:
  key: "d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799"
net:
  transport: vp8channel
vp8:
  fps: 30
  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 equivalent

mode: cnc
auth:
  provider: wbstream
room:
  id: "room-01"
crypto:
  key: "d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799"
net:
  transport: seichannel
sei:
  fps: 30
  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 equivalent

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

jitsi + datachannel

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

Or with meet.handyweb.org:

olcrtc://jitsi?datachannel@https://meet.handyweb.org/myroom#d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799$RU / olc free sub

<RoomID> for jitsi is the full room URL in the form https://host/room (or host/room). Any self-hosted Jitsi Meet instance without authentication is supported; for public servers (meet.small-dm.ru, meet1.arbitr.ru, meet.handyweb.org, meet.jit.si) the same format applies. Be sure to check which server is reachable in your network.

YAML equivalent

mode: cnc
auth:
  provider: jitsi
room:
  # Use meet.small-dm.ru, meet1.arbitr.ru or meet.handyweb.org - whichever works in your network
  id: "https://meet.small-dm.ru/myroom"
crypto:
  key: "d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799"
net:
  transport: datachannel
data: data

Short aliases

Do as you wish, but personally I would be against it.


Subscription format (server list): sub.md

Compatibility matrix for auth + transport: settings.md