feat(screenshare): drain a lagging viewer back to the live edge
CI / check (push) Failing after 2m12s
CI / check (push) Failing after 2m12s
On a lossy link the reliable PixelPass transport turns every loss burst into buffered latency that nothing trims back, so the viewer settles seconds behind the host and stays there. Measured on a tc netem satellite simulation: a viewer parks at a ~6 s standing buffer indefinitely. --untimed (0.6.5) does NOT fix this and measured marginally worse (+1.38 s vs +1.24 s): it only unpaces presentation, while audio still drains at 1x the DAC rate, so an accumulated backlog never shrinks. Drop it. Instead give mpv a JSON IPC socket in the Low latency posture and drive playback slightly fast while the buffer is deep, returning to 1x once it drains. Pitch correction keeps it inaudible and A/V sync is preserved, because audio and video speed up together. The control law and IPC message handling are pure functions with unit tests; the only I/O is livesync::drive, which ends by itself when the player exits. Smooth is deliberately excluded — its ~2 s readahead is the point of that posture, and catch-up would fight it every poll. Known limitation: 1.05x needs ~120 s to clear a 6 s backlog, so recovery is slower than ideal. Tuning (a proportional law, or a seek-to-live for large backlogs) is the follow-up. 598 lib tests green (+11), clippy clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -4,6 +4,16 @@ All notable changes to PeerSpeak are documented here.
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Fixed
|
||||
- **A screen share that falls behind now catches back up.** On a lossy
|
||||
connection (satellite links are the worst case) the share could settle several
|
||||
seconds behind the host and simply stay there for the rest of the call. The
|
||||
viewer now notices a deep buffer and plays imperceptibly fast until it is back
|
||||
at the live edge — the audio stays in tune and in sync while it does. This
|
||||
replaces the previous attempt at the problem, which measurement showed did not
|
||||
help. Applies to the Low latency setting; Smooth intentionally keeps its
|
||||
larger buffer.
|
||||
|
||||
## [0.6.5] — 2026-07-19
|
||||
|
||||
### Added
|
||||
|
||||
Reference in New Issue
Block a user