fix(remote): WebRTC black canvas, cursor sync, WebCodecs low-latency mode #1
No reviewers
Labels
No labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
hex/zeno-rmm!1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/streaming-options-and-docs"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Resolves the user-reported remote-desktop issues on the device detail page.
Bug 1 - WebRTC (P2P) canvas was permanently black. Two-part fix: the agent's WebRTC PeerConnection was missing the standard
register_default_interceptors(NACK, RTCP sender/receiver reports, TWCC) chain, so real browsers' RTCP feedback (PLI/NACK) wasn't being processed and outbound stats never populated. The fix lands incrates/zeno-agent/src/webrtc/mod.rs. The deployedzeno-agent.exepredates this fix; the Build Windows Agent workflow on merge will rebuild it and Alonzo-PC will auto-update within ~30s.Bug 2 - Operator cursor showed a cross instead of the remote mouse, not in sync. Adds a
CursorGuard(RAII) that callsShowCursor(FALSE)on Windows for the duration of a WebRTC/relay/WebCodecs session and restores on drop, covering normal exit, early return, and panic-unwind. The GDI fallback capture no longer usesCAPTUREBLT, so the (now-hidden) host cursor is never pulled into a frame. The browser renders the operator's own cursor as a sprite that tracks the lastpointermoveon the stage at 60fps with no perceptible lag.Bug 3 - Reduce latency, even if implementation changes. Adds a new default streaming mode, WebCodecs (low latency). Same H.264/H.265/VP9/AV1 capture -> encode pipeline, but the encoded Annex-B access units are sent as
remote_desktop.video_chunkover the existing agent WebSocket (no SDP/ICE, no extra ports). The browser decodes with the WebCodecsVideoDecoderand paints to a canvas atrequestAnimationFramecadence. Works through Pangolin/reverse proxies because it shares the same WebSocket.wcstream.rs(agent) +wc-remote.js(browser) implement it. WebCodecs is the new default; automatic fallback to WebRTC whenVideoDecoderis unavailable, or when the operator picks WebRTC/relay manually.Docs -
docs/remote-desktop-pipeline.mdanddocs/operator-remote-desktop-guide.mdnow describe WebCodecs as the default and document the cursor-sync behaviour.Verification - All 90 cargo + Node tests pass; cargo build/test/fmt/clippy clean. End-to-end testing in a real browser requires a fresh
zeno-agent.exebuild, which the Build Windows Agent workflow will produce on merge to main.Files: 22 changed, +1323/-48. Branch:
fix/streaming-options-and-docs.