Documentation Index
Fetch the complete documentation index at: https://mintlify.com/openlibrecommunity/olcrtc/llms.txt
Use this file to discover all available pages before exploring further.
The olcrtc:// URI is a convention for client application developers — a compact way to bundle all connection parameters for an olcRTC tunnel into a single shareable string. Client apps parse this URI themselves and feed the resulting fields into an olcRTC YAML config.
The olcrtc CLI binary does not parse olcrtc:// URIs automatically. This format exists for client applications that need to distribute or accept tunnel configurations. The primary consumer of this format is owenewans/owenclave, an Android proxy client (fork of exclave) that supports all common protocols plus olcrtc and subscriptions.
olcrtc://<Auth>?<Transport>@<RoomID>#<EncryptionKey>$<MIMO>
olcrtc://<Auth>?<Transport><key=value&key=value>@<RoomID>#<EncryptionKey>$<MIMO>
Everything after olcrtc:// is part of the client convention. The <key=value&...> block is the transport parameter payload in angle brackets, placed immediately after the transport name. If the transport needs no parameters or uses defaults, the block is omitted entirely.
Fields
| Field | Meaning |
|---|
<Auth> | Auth provider name: jitsi, telemost, or wbstream |
<Transport> | Transport name: datachannel, vp8channel, seichannel, or videochannel |
<...> payload | Transport parameters in <key=value&key=value> format. Keys correspond to YAML fields. Omit the block entirely when using defaults |
<RoomID> | Room identifier. For Jitsi, this is the full room URL https://host/room. For other providers, it is the room ID |
<EncryptionKey> | Shared encryption key in hex, 64 characters (32 bytes). Generate with openssl rand -hex 32 |
<MIMO> | Free-form comment for UI or metadata, e.g. RU / olc free sub / IPv6. Not passed to olcRTC |
Separators
| Separator | What follows it |
|---|
:// | Start of the payload after the olcrtc scheme |
? | <Transport> name |
<...> | Transport parameter payload block |
@ | <RoomID> |
# | <EncryptionKey> |
$ | <MIMO> (free-form comment) |
It is recommended not to use these separator characters inside the field values themselves. If a client needs to include them, it must introduce its own escaping or percent-encoding rule and apply it symmetrically when encoding and decoding.
Mapping to YAML Fields
| URI field | YAML field | Notes |
|---|
<Auth> | auth.provider | |
<Transport> | net.transport | |
Payload <...> | Matching transport YAML fields | See table below |
<RoomID> | room.id | For Jitsi: full URL https://host/room |
<EncryptionKey> | crypto.key | 64 hex characters |
<MIMO> | (not used by olcRTC) | Client-side comment only |
data: data is not encoded in the URI because it is a local runtime setting of a specific run.
Payload Parameters Per Transport
datachannel
No payload parameters. The <...> block is omitted entirely.
vp8channel
| URI key | YAML field | Description |
|---|
vp8-fps | vp8.fps | VP8 stream FPS |
vp8-batch | vp8.batch_size | Frames coalesced per tick |
seichannel
| URI 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
| URI 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) |
Examples
wbstream + datachannel
This combination does not work in the normal WbStream guest flow. WbStream issues tokens with canPublishData=false for guests, so the data channel opens but routes no bytes. Use vp8channel, seichannel, or videochannel instead, or supply an auth.token with moderator rights.
olcrtc://wbstream?datachannel@room-01#d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799$RU / olc free sub / IPv6
No payload block is needed — datachannel has no parameters.
wbstream + vp8channel
olcrtc://wbstream?vp8channel<vp8-fps=60&vp8-batch=64>@room-01#d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799$RU / olc free sub / IPv6
wbstream + seichannel
olcrtc://wbstream?seichannel<fps=60&batch=64&frag=900&ack-ms=2000>@room-01#d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799$DE / olc free sub
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
jitsi + datachannel
For Jitsi, <RoomID> in the URI is the full room URL in the form https://host/room. Any self-hosted Jitsi Meet instance without authentication is supported. Check which server is reachable in your network before using a public instance.
olcrtc://jitsi?datachannel@https://meet.example.org/myroom#d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799$RU / olc free sub