mirror of
https://github.com/BetterCorp/BetterFrame.git
synced 2026-05-26 20:16:35 +00:00
When admin opens an entity preview, find a kiosk whose active layout references the camera (new repo.listKiosksRenderingCamera). Probe each candidate's LAN snapshot endpoint with a 4s timeout. On success, stream the bytes back with x-bf-snapshot-source: kiosk:<id>. Falls through to the existing server-direct ffmpeg/gst pull only when no kiosk is reachable or has the camera in its active layout. Kiosk side adds /local/snapshot/:camera_id?key=<local_key>. Spawns a one-shot gst-launch (rtspsrc → decodebin → jpegenc ! filesink num-buffers=1) on a blocking worker so axum's reactor stays free. Prefers sub stream for snapshots to keep bandwidth low. Single-frame pipeline tears down after the first JPEG. LAN IP picking extracted to shared/kiosk-lan.ts so route handler and KioskLocalPanel agree on which interface to talk to (the previously- duplicated logic in admin-pages stays for now since it also renders the interface list). Why a parallel pipeline instead of teeing the warm one: cross-thread gtk4paintablesink → appsink sample extraction is non-trivial. A 1-frame parallel pull is cheap when the kiosk's RTSP session to that camera is already known to work (precondition: it's in the active layout). |
||
|---|---|---|
| .. | ||
| src | ||
| .gitignore | ||
| bsb-tests.json | ||
| package.json | ||
| tsconfig.json | ||