feat: point the fleet at wss LiveKit room uwh-telhai

Publish and subscribe over wss://livekit.uni-wh.de:7800 and refuse
cleartext ws://. Conference room is uwh-telhai. Includes the uncommitted
encoded H.264 publish path, Rally hairpin, and KMS wall overlay.
This commit is contained in:
root
2026-10-11 00:48:50 +00:00
parent ef9573c294
commit 95bb7c50ee
89 changed files with 9883 additions and 243 deletions
+25 -16
View File
@@ -5,9 +5,13 @@ LiveKit room.
Each camera becomes one LiveKit participant (`cam-01` .. `cam-20`) that
publishes:
- a camera video track (640x360 @ 30 fps MJPG, H.264 VAAPI — sized
for low-latency wall decode, not max quality)
- a microphone audio track (16 kHz mono, cleaned with speechbrain)
- a camera video track (640x360 @ 30 fps MJPG, H.264 VAAPI on Arc).
1280x720@30 and 1920x1080@30 negotiate, but UVC on the 6–7 camera
USB 2.0 hubs fails buffer-pool allocation for most devices. Keep 30
fps; drop resolution if USB isoc is exhausted. YUYV 1080p is 5 fps
only — always MJPEG.
- a microphone audio track (16 kHz mono, cleaned with one shared
speechbrain MetricGAN process; workers do not each load the model)
Identity is the USB serial, pinned by udev (`/dev/camNN` + `slots.json`).
`--cameras 1,5` means participants `cam-01` and `cam-05`, not discovery order.
@@ -96,7 +100,10 @@ journalctl -u livekit-displays -f
```
`.env`: `DISPLAY_ROLES`, `DISPLAY_CONNECTORS`, `DISPLAY_SPEAKER_CAMERA`,
`DISPLAY_GRID_*`. kmssink takes the DRM master (framebuffer console on
`DISPLAY_GRID_*`. Local cameras publish LiveKit attributes `tag=uwh`
(`PARTICIPANT_TAGS`). The wall can hide those with `DISPLAY_HIDE_TAGS=uwh`
so remotes fill the mosaic instead; leave `DISPLAY_HIDE_TAGS` empty to keep
showing the local fleet (current default). kmssink takes the DRM master (framebuffer console on
HDMI-A-7 is replaced by the grid).
## Audio cleanup
@@ -116,6 +123,13 @@ stereo through a SpeechBrain preprocessor, then published as mono:
The 1 s window is **past context**, not +1 s delay: only the latest hop
is published. Algorithmic delay ≈ hop + compute.
Optional latency flags (all default to current behavior). Suggested wall
A/B: `ENHANCE_HOP_S=0.05 AUDIO_QUEUE_MS=60 WORKER_SPLIT_EXECUTOR=1
ENHANCE_SPEAKER_ONLY=1 DISPLAY_VIDEO_CAPACITY=1 DISPLAY_VIDEO_FORMAT=bgra
DISPLAY_GST_QUEUE_BUFFERS=1 DISPLAY_SPEAKER_PUSH=arrival`. Aggressive:
`ENHANCE_MODE=off BEAMFORM_MODE=off ENHANCE_HOP_S=0.02 AUDIO_QUEUE_MS=40
VIDEO_HOLD_S=0`. See `.env.example`.
Each worker caps Torch/BLAS/OpenVINO to `TORCH_NUM_THREADS=1` (default)
so 14–20 processes do not oversubscribe the i7-14700. This host has an
Intel Arc B580; the venv Torch is NVIDIA CUDA and **cannot** use it. Do
@@ -144,20 +158,15 @@ This box is meant to behave like an appliance:
## systemd (enabled)
- `livekit-server.service` — **local TEST** LiveKit on :7880 (autostart for now)
- `livekit-cameras.service` — publishers. `Wants=` the test server, does not
`Require` it. Destination is `LIVEKIT_URL` in `.env` (currently
`ws://127.0.0.1:7880`).
- `livekit-displays.service` — optional. Subscribes to `cam-01`/`cam-02`/`cam-03`
- `livekit-server.service` — **local TEST** LiveKit on :7880 (**disabled**;
cameras no longer `Wants=` it). Do not re-enable unless falling back
to localhost.
- `livekit-cameras.service` — publishers. Destination is `LIVEKIT_URL` in
`.env` (`wss://livekit.uni-wh.de:7800`, room `uwh-telhai`). Signaling
is WSS only; the client verifies the TLS certificate.
- `livekit-displays.service` — optional. Subscribes to the camera room
and drives 3 DRM connectors with GStreamer `kmssink` (no X11/Wayland).
When the real/remote LiveKit exists, change `.env` `LIVEKIT_URL` and:
```bash
systemctl disable --now livekit-server
systemctl restart livekit-cameras
```
```bash
systemctl status livekit-cameras livekit-server
journalctl -u livekit-cameras -f