Skip to main content

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.

URI Format

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

FieldMeaning
<Auth>Auth provider name: jitsi, telemost, or wbstream
<Transport>Transport name: datachannel, vp8channel, seichannel, or videochannel
<...> payloadTransport 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

SeparatorWhat 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 fieldYAML fieldNotes
<Auth>auth.provider
<Transport>net.transport
Payload <...>Matching transport YAML fieldsSee table below
<RoomID>room.idFor Jitsi: full URL https://host/room
<EncryptionKey>crypto.key64 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 keyYAML fieldDescription
vp8-fpsvp8.fpsVP8 stream FPS
vp8-batchvp8.batch_sizeFrames coalesced per tick

seichannel

URI keyYAML fieldDescription
fpssei.fpsH264 stream FPS
batchsei.batch_sizeFrames per tick
fragsei.fragment_sizeFragment size in bytes
ack-mssei.ack_timeout_msACK timeout in milliseconds

videochannel

URI keyYAML fieldDescription
video-wvideo.widthWidth in pixels
video-hvideo.heightHeight in pixels
video-fpsvideo.fpsFPS
video-bitratevideo.bitrateBitrate, e.g. 5000k or 2M
video-hwvideo.hwHardware acceleration: none or nvenc
video-codecvideo.codecqrcode or tile
video-qr-sizevideo.qr_sizeQR fragment size in bytes
video-qr-recoveryvideo.qr_recoveryError correction: low / medium / high / highest
video-tile-modulevideo.tile_moduleTile size in pixels 1..270 (tile only)
video-tile-rsvideo.tile_rsReed-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

Build docs developers (and LLMs) love