# Настройка olcrtc считывает всю свою конфигурацию среды выполнения из одного YAML-файла. теперь флагов CLI нет. ```bash olcrtc /etc/olcrtc/server.yaml ``` Примеры: - [`server.example.yaml`](./server.example.yaml) - [`client.example.yaml`](./client.example.yaml) - [`failover.example.yaml`](./failover.example.yaml) ## Схема | YAML path | Значение | |------------------------------------------------------------------|-----------------------------------------------------------| | `mode` | `srv`, `cnc`, or `gen` | | `link` | `direct` | | `auth.provider` | `jitsi`, `telemost`, `jazz`, `wbstream`, `none` | | `room.id` | conference room id | | `crypto.key` / `crypto.key_file` | 64-char hex (32 bytes), inline or read from file | | `net.transport` | `datachannel`, `videochannel`, `seichannel`, `vp8channel` | | `net.dns` | resolver `host:port` | | `socks.host` / `.port` | client-side listener | | `socks.user` / `.pass` | optional client-side auth | | `socks.proxy_addr` / `.proxy_port` | server-side egress proxy | | `engine.name` / `.url` / `.token` | only when `auth.provider: none` | | `video.*` | videochannel tuning | | `vp8.*` | vp8channel tuning | | `sei.fps` / `.batch_size` / `.fragment_size` / `.ack_timeout_ms` | seichannel tuning | | `liveness.interval` | control-stream ping interval, default `10s` | | `liveness.timeout` | pong timeout, default `5s` | | `liveness.failures` | missed pongs before reconnect, default `3` | | `gen.amount` | gen mode: number of rooms to create | | `profiles[]` | ordered srv/cnc failover profiles | | `failover.retry_delay` | delay before trying the next profile, e.g. `2s` | | `failover.max_cycles` | stop after N full profile-list passes; `0` = forever | | `data` | path to data directory | | `debug` | verbose logging | | `ffmpeg` | path to ffmpeg binary | `mode: cnc` refuses non-loopback `socks.host` values unless both `socks.user` and `socks.pass` are set. `crypto.key_file` is resolved relative to the YAML file. Do not set it together with `crypto.key`. ## Liveness After `CLIENT_HELLO` / `SERVER_WELCOME`, the first smux stream stays open as an encrypted control stream. olcrtc now sends `CONTROL_PING` / `CONTROL_PONG` messages over that stream to prove the real tunnel path still round-trips. This detects states where a provider or WebRTC layer looks connected but the encrypted smux path is no longer usable. ```yaml liveness: interval: 10s timeout: 5s failures: 3 ``` When the failure threshold is reached, the current smux session is rebuilt. In failover mode, a profile that exits after liveness-triggered reconnect failure lets the supervisor advance to the next profile. ## Failover Profiles `mode: srv` and `mode: cnc` can define `profiles`. Top-level fields are used as common defaults; each profile overrides only the fields it sets. The CLI runs profiles in order. If a profile fails or ends while the process is still alive, olcrtc waits `failover.retry_delay` and starts the next profile. ```yaml mode: srv link: direct crypto: key_file: ./olcrtc.key net: dns: "1.1.1.1:53" data: data profiles: - name: wb-vp8 auth: provider: wbstream room: id: "WB_ROOM_ID" net: transport: vp8channel - name: jitsi-dc auth: provider: jitsi room: id: "https://meet.example.org/olcrtc-room" net: transport: datachannel failover: retry_delay: 2s max_cycles: 0 ``` Both peers must use compatible profile order and room settings. This first failover layer rebuilds the session on the next profile; active smux streams do not migrate, but new connections can recover on the next profile.