Skip to content
/ kvmd Public

Conversation

@Dobbs3313
Copy link

Summary

Fixes the 1 FPS WebRTC H.264 streaming issue on Chrome/Blink browsers after the uStreamer 6.47 update.

Problem

After upgrading to v4.144, Chrome browsers experience:

  • Video stuck at 1 FPS
  • Constant 'slowlink' messages from Janus
  • Works fine on Firefox

Related issue: #1632

Root Cause

Chrome's H.264 decoder doesn't handle uStreamer 6.47's new FPS limiter frame pacing well, causing RTCP feedback delays that trigger Janus slowlink detection.

Solution

Set playoutDelayHint=0 on video receivers for Chrome/Blink browsers when adding video tracks. This is similar to the existing Firefox workaround for playout-delay issues.

The playoutDelayHint property was already used in a commented-out block (removed in the refactoring commit ac0eee9f), but only for all browsers. This PR applies it specifically to Chrome/Blink where it's needed.

Changes

  • Added Chrome/Blink detection when adding video tracks
  • Set playoutDelayHint=0 on video receivers to reduce latency and fix frame timing
  • Added logging for debugging

Testing

This fix should:

  1. Allow Chrome to receive WebRTC H.264 at full frame rate
  2. Eliminate constant slowlink messages
  3. Not affect Firefox or Safari behavior

@Dobbs3313 Dobbs3313 force-pushed the fix/chrome-webrtc-slowlink branch from e50a34c to fc0718c Compare January 31, 2026 22:03
…ssue

Chrome/Blink browsers experience 1 FPS WebRTC streaming with constant
'slowlink' messages after the uStreamer 6.47 FPS limiter update.

This fix sets playoutDelayHint=0 on video receivers for Chrome/Blink
browsers, similar to how Firefox already has a workaround for related
playout-delay issues.

The playoutDelayHint helps Chrome's H.264 decoder handle uStreamer's
new frame pacing, preventing RTCP feedback delays that trigger
Janus slowlink detection.

Fixes #1632
@Dobbs3313 Dobbs3313 force-pushed the fix/chrome-webrtc-slowlink branch from fc0718c to e48a84b Compare January 31, 2026 22:05
@Dobbs3313
Copy link
Author

After further debugging, I found the actual root cause - it was not related to playoutDelayHint.

The issue was IPv6 in Janus. When ipv6 = true in janus.jcfg, Janus binds to multiple IPv6 interfaces (including Tailscale, link-local, etc.), which causes UDP packet loss and the "slowlink" warnings.

Evidence - Janus was binding to 7 different addresses:

UNCONN 0      0                              100.x.x.x:22950      0.0.0.0:*    (Tailscale IPv4)
UNCONN 0      0                             10.0.0.209:32455      0.0.0.0:*    (LAN IPv4)
UNCONN 0      0      [2601:xxxx:...]:20243                        [::]:*       (Public IPv6)
UNCONN 0      0      [fe80::xxxx...]%eth0:27509                   [::]:*       (Link-local)
UNCONN 0      0      [2601:xxxx:...]:24824                        [::]:*       (Public IPv6)
UNCONN 0      0      [fd7a:xxxx:...]:34070                        [::]:*       (Tailscale ULA)
UNCONN 0      0      [fe80::xxxx...]%tailscale0:25888             [::]:*       (Tailscale link-local)

The fix: Set ipv6 = false in /etc/kvmd/janus/janus.jcfg

Closing this PR and will file a new issue about the IPv6/multi-interface Janus configuration.

@Dobbs3313 Dobbs3313 closed this Feb 1, 2026
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