screenshare: drop mpv --untimed so shared video stays A/V-synced

The viewer launched mpv with `--untimed`, which displays each video
frame the instant it decodes and ignores audio timestamps. Sharing a
desktop (no audio) that just minimizes latency, but sharing a *video*
made its audio drift progressively out of sync — confirmed in a field
test watching a video together. Remove the flag so mpv paces video to
the audio clock; the remaining low-latency flags keep lag negligible for
desktop pointing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-03 20:29:59 -04:00
co-authored by Claude Opus 4.8
parent 8014edf91c
commit 2d22036930
2 changed files with 11 additions and 5 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
# Maintainer: mollusk <jitty+lc1iz0dc@protonmail.com> # Maintainer: mollusk <jitty+lc1iz0dc@protonmail.com>
pkgname=peerspeak-git pkgname=peerspeak-git
_pkgname=peerspeak _pkgname=peerspeak
pkgver=0.6.1.r315.ga78860d pkgver=0.6.2.r319.g8014edf
pkgrel=1 pkgrel=1
pkgdesc="Decentralized peer-to-peer voice chat (Rust/iroh/PipeWire/Opus/iced)" pkgdesc="Decentralized peer-to-peer voice chat (Rust/iroh/PipeWire/Opus/iced)"
arch=('x86_64') arch=('x86_64')
+10 -4
View File
@@ -547,13 +547,19 @@ fn event_for_log(ev: &PixelpassEvent) -> String {
} }
} }
/// Open the viewer stream URL in a media player. Mirrors pixelpass's own /// Open the viewer stream URL in a media player, then fall back to vlc. The
/// low-latency mpv invocation; falls back to vlc. The player is reaped in a /// player is reaped in a background task so it doesn't linger as a zombie when
/// background task so it doesn't linger as a zombie when its window closes. /// its window closes.
///
/// The flags keep latency low while preserving A/V sync. We deliberately do
/// NOT pass mpv's `--untimed`: that displays each video frame the instant it
/// decodes, ignoring audio timestamps, which makes a shared *video* drift
/// progressively out of sync with its audio. Pacing to the audio clock costs a
/// little latency (negligible for pointing at a desktop) and keeps a shared
/// video in sync.
fn launch_player(url: &str) -> std::io::Result<()> { fn launch_player(url: &str) -> std::io::Result<()> {
const MPV_ARGS: &[&str] = &[ const MPV_ARGS: &[&str] = &[
"--profile=low-latency", "--profile=low-latency",
"--untimed",
"--hwdec=auto", "--hwdec=auto",
"--audio-buffer=0.2", "--audio-buffer=0.2",
"--demuxer-max-bytes=2M", "--demuxer-max-bytes=2M",