Skip to content

Teams calls: fix the starved camera and smooth the far end's audio - #46

Merged
Yannicked merged 3 commits into
mainfrom
fix/teams-send-estimate
Oct 15, 2026
Merged

Yannicked merged 3 commits into
mainfrom
fix/teams-send-estimate

Conversation

@Yannicked

Copy link
Copy Markdown
Owner

From a 27-minute Teams meeting where a coworker said my video lagged and the audio glitched.

Camera. A second after the camera started, the send estimate fell to 43 kbit/s and later 0, on a direct path with 18 ms RTT and no loss, so the camera sat at its lowest step (150 kbit/s at 960x540, ~170 kbit/s out) while Teams allowed ~1.1 Mbit/s. str0m tags each REMB with its m-line, and we took any REMB as the link's estimate: one for the audio line or a 0 for a line we don't send on would do exactly this. A REMB now counts only for a line we send video on, and never a zero (Slack huddles: any line but the audio). The estimate line in the log says whether it came from transport-cc or REMB, so the next meeting confirms it.

Audio. The jitter buffer ran dry ~every 3.6 s and cut ~260 ms (13 frames) ~every 6.6 s, with no late or lost packets: the far end's audio comes in bursts. Each edge was a pop. Now a dry buffer conceals 60 ms before going silent (which also bridges short stalls), a cut while playing gets one concealed frame across it, and sound fades in over 5 ms after silence.

The stats line now also says how far behind its RTP timing incoming audio came and how long the media loop was busy at most, to tell a network burst from our own stall before changing how much is trimmed.

+247 / −26 lines. Needs #45 (rustls) for cargo-deny to pass.

A REMB for the audio line or a 0 for an unused line was taken as the link's estimate and held the camera at 150 kbit/s.
Conceal 60 ms before going silent, one frame across a trim, and fade in after silence, so none of them pops.
@Yannicked
Yannicked merged commit a6a4a08 into main Oct 15, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant