feat: harden engine config, discovery and backpressure stats

- config: validate port/quality/fps/source/stream-index ranges on load
  and before engine start (flinger.Config.Validate)
- discovery: add Announce option to disable multicast (GUI checkbox,
  CLI --no-announce); absent JSON key keeps the default true
- backpressure: count dropped frames in the TCP sender, expose via
  engine Status and a live counter in the GUI status label
- docs: record M3/M4 decisions and X11 coverage via the portal backend
This commit is contained in:
2026-09-18 20:44:39 +01:00
parent cb27a0d63d
commit 2b3fd54934
8 changed files with 195 additions and 21 deletions
+22 -1
View File
@@ -148,4 +148,25 @@ Components:
5. **End-to-end testing**: OBS + `obs-teleport` are available locally on the dev machine
for now (loopback/LAN testing). A remote receiver machine can be added later for
further testing.
6. **License**: GPL-2.0, matching the `obs-teleport` project whose protocol we implement.
6. **License**: GPL-2.0, matching the `obs-teleport` project whose protocol we implement.
## Decisions Made (2026-09-18, M3/M4)
7. **Screen capture backend**: `go2tv.app/screencast` (MIT, GPL-2.0-compatible) via
`xdg-desktop-portal` + PipeWire. Chosen over hand-rolled cgo bindings. The portal
path is compositor-agnostic: Wayland (hyprland/gnome portals) and X11
(`xdg-desktop-portal-gtk`) both work, so a separate native X11/XShm fallback is not
required for the supported path and was not implemented (project.md M4 "if feasible").
8. **GUI toolkit**: Fyne v2 — provides both the settings window and a system tray
(StatusNotifierItem over DBus), so no separate systray dependency was needed.
9. **Engine decoupling**: streaming core lives in `internal/flinger` (GUI-free) so the
CLI, GUI and any future daemon share one implementation.
## M4 Hardening Status
- Config persistence + validation: done (internal/config, flinger.Validate).
- Backpressure/queue stats: done (sender tracks dropped frames; exposed in engine
Status and the GUI status label).
- Discovery on/off: done (flinger.Config.Announce, GUI checkbox).
- X11 fallback: not implemented — the portal backend already covers X11 sessions.
- Packaging (Nix package / AppImage): deferred (see AGENTS.md / roadmap).