#5956

Periodic frame drop (~1 frame every ~2 s) on Android client at 2560x1600 despite clean host/network stats

Openalvinlalopened 12d ago

Is there an existing issue for this?

  • I have searched the existing issues

Is your issue described in the documentation?

  • I have read the documentation

Is your issue present in the latest beta/pre-release?

None

Describe the Bug

Streaming to a Samsung Galaxy Tab S9 FE+ (Moonlight Android, HEVC, 2560x1600) shows a short hitch/stutter every ~2 seconds. Once host-side problems were fixed (below), the Moonlight stats overlay is clean everywhere except one line: the client renders ~0.49 fewer frames per second than it receives.

Typical overlay (Moonlight 60 FPS / Balanced / 100 Mbps, game capped at 30 FPS with vsync):

Video stream: 2560x1600 30.00 FPS
Decoder: c2.exynos.hevc.decoder
Incoming frame rate from network: 30.00 FPS
Rendering frame rate: 29.51 FPS
Frames dropped by your network connection: 0.00%
Average network latency: 2 ms (variance: 0 ms)
Host processing latency min/max/average: 5.1/7.6/6.1 ms
Average decoding time: 11.08 ms

The "incoming minus rendering" gap is ~0.49 FPS in every configuration I tried:

ConfigIncomingRenderingGap
Stream 60 FPS, Balanced, game ~24-29 FPS29.36 / 23.9028.87 / 23.410.49 / 0.49
Stream 30 FPS, Smoothest video, 30 Hz host display30.0229.540.48
Stream 60 FPS, Balanced, 60 Hz host display30.0029.510.49

That's about one dropped frame every ~2 s, which matches how often the hitch is visible. The gap stays the same at different content frame rates (24 vs 30 FPS), so it looks like a fixed-period event rather than a clock-rate mismatch.

Things that did NOT fix it:

  • Tablet Motion smoothness Adaptive (90 Hz) vs Standard (60 Hz)
  • Frame pacing: Balanced, Smoothest video, Lowest latency
  • Stream 30 vs 60 FPS; host virtual display 30 vs 60 Hz
  • Apollo 0.4.6 + Artemis 20.2.6 instead of Sunshine + Moonlight (same symptom)
  • 50 Hz ping from host to tablet while idle: median 2 ms, no periodic spikes

Host-side problems I found and fixed along the way (in case they're relevant):

  • With HAGS on, realtime NVENC priority + VRAM ~90% gave NvEnc: frame N encode wait timeout freezes (matches #1031). Setting nvenc_realtime_hags = disabled stopped those, but then the stream fell to ~20 FPS with 75-100 ms host latency whenever the game pinned the GPU at 100%. Turning HAGS off in Windows (Sunshine back to realtime priority) fixed it: 30 FPS, ~6 ms host latency.
  • The host Ethernet links at only 100 Mbps, so a 100 Mbps bitrate at a 30 FPS stream saturated it. Now kept at ~55 Mbps on the wire (60 FPS stream, 30 FPS content).

Main question: is this ~2 s periodic client-side drop a known issue with Exynos decoders / Samsung tablets, or is there a host-side setting (frame pacing, minimum_fps_target, packet pacing) that would avoid it? If it belongs in moonlight-android instead, please say so and I'll move it.

Expected Behavior

Rendering frame rate equals incoming frame rate (30.00 / 30.00), with no periodic hitches, given 0% network loss and stable host latency.

Additional Context

  • Client: Samsung Galaxy Tab S9 FE+ (Exynos 1380, 12.4" 2560x1600 90 Hz LCD), Moonlight Android (latest from Play Store), 5 GHz Wi-Fi (channel 149), decoder c2.exynos.hevc.decoder
  • Host is a hybrid laptop: internal panel on Intel iGPU, HDMI and the virtual display on NVIDIA
  • Virtual display: MikeTheTech Virtual Display Driver 25.7.23, pinned to the RTX 4050, 2560x1600 @ 30/60/90/120 Hz
  • Game: Crimson Desert, capped at 30 FPS (NVIDIA app Max Frame Rate) with vsync on; GPU ~85%
  • Controller: DualSense over Bluetooth on the host

Host Operating System

Windows

Operating System Version

Windows 11 Home 10.0.26200

Architecture

amd64/x86_64

Sunshine commit or version

2026.914.233613 (commit 63d35f702ee9e362e43263742981836ec0710384)

Package

Windows - installer (recommended)

GPU Type

NVIDIA

GPU Model

NVIDIA GeForce RTX 4050 Laptop GPU (6 GB) + Intel UHD Graphics (i5-13420H), HP Victus 15-fa1xxx

GPU Driver/Mesa Version

32.0.16.1742 (617.42)

Capture Method

Desktop Duplication API (default)

Config

adapter_name = NVIDIA GeForce RTX 4050 Laptop GPU
output_name = {9acddf6d-43cc-576e-9aff-0c5fc80b4cc8}
dd_configuration_option = ensure_only_display
dd_resolution_option = auto
dd_refresh_rate_option = auto
dd_hdr_option = auto
encoder = nvenc
nvenc_preset = 1
nvenc_twopass = quarter_res
nvenc_realtime_hags = disabled

(HAGS is now off in Windows, so Sunshine logs "Using realtime GPU priority".)

Apps

Desktop; Crimson Desert via steam://rungameid/3321460 (detached)

Relevant log output

[2026-10-19 00:25:20.520]: Info: Active GPU has HAGS disabled
[2026-10-19 00:25:20.520]: Info: Using realtime GPU priority
[2026-10-19 00:28:34.674]: Info: Display refresh rate [60Hz]
[2026-10-19 00:28:34.674]: Info: Requested frame rate [60/1 exactly 60 fps]
[2026-10-19 00:28:55.450]: Error: NvEnc: frame 1113 encode wait timeout   <- only during game load
[2026-10-19 00:30:27.213]: Error: NvEnc: frame 4012 encode wait timeout   <- none after this; stutter continued
[2026-10-19 00:35:30.579]: Info: CLIENT DISCONNECTED

Full log attached: sunshine.log

sunshine.log

Expected Behavior

No response

Additional Context

No response

Host Operating System

Windows

Operating System Version

Windows 11 OS Build 26200.9711

Architecture

amd64/x86_64

Package

Windows - exe installer

GPU Type

NVIDIA

GPU Model

RTX 4050 MOBILE GPU

GPU Driver/Mesa Version

32.0.16.1742 (617.42)

Capture Method

Desktop Duplication API (Windows)

Apps

undefined

Log output

please see the attached log file for the full logs

Online logs

No response

Activity

0

No activity yet.