Skip to content

perf: port Apollo low-latency/jitter improvements (AP1, AP6, AP9, SP1, SP2)#281

Open
sh00bx wants to merge 1 commit into
Nonary:masterfrom
sh00bx:pr/perf-apollo-latency
Open

perf: port Apollo low-latency/jitter improvements (AP1, AP6, AP9, SP1, SP2)#281
sh00bx wants to merge 1 commit into
Nonary:masterfrom
sh00bx:pr/perf-apollo-latency

Conversation

@sh00bx

@sh00bx sh00bx commented Jun 22, 2026

Copy link
Copy Markdown

Ports the latency- and WiFi-jitter-relevant subset of an Apollo perf-curated branch onto Vibepollo, adapted to Vibepollo's code structure. All knobs default to legacy behaviour, so nothing changes unless explicitly enabled. Knobs already present in Vibepollo (min_qp, filler_data, split_encode, weighted_prediction) were skipped, and DS5-specific customizations were intentionally excluded.

Changes

  • AP1 — configurable RTP send-pacing bandwidth (pacing_max_bitrate_kbps). Replaces the hardcoded ~80%-of-1Gbps pacer that effectively no-ops on WiFi links and lets AMPDU aggregation amplify per-frame bursts into 30–60 ms inter-arrival spikes. 0 = legacy behaviour; includes a 1-packet/ms floor.
  • AP6 — raise videoBroadcastThread + the sync/async encode threads from high → critical priority; audioBroadcastThread stays high.
  • AP9 — expose nvenc_temporal_aq, gated behind an NV_ENC_CAPS_SUPPORT_TEMPORAL_AQ probe.
  • SP1 — server-side packetsize cap (200..65535) to avoid fragmentation on low-MTU links.
  • SP2 — harden intra-refresh: add outputRecoveryPointSEI to the HEVC path and add the previously-missing H264 intra-refresh block (caps-probe + recoveryPointSEI + single-slice). Activates only when the client negotiates enableIntraRefresh.

New keys are sunshine.conf-only; web-UI strings and docs were intentionally omitted to keep the diff small for review.

Touches src/config.{cpp,h}, src/nvenc/nvenc_base.cpp, src/nvenc/nvenc_config.h, src/rtsp.cpp, src/stream.cpp, src/video.cpp.

🤖 Generated with Claude Code

…, SP2)

Ports the latency- and WiFi-jitter-relevant subset of the Apollo perf-curated
branch onto Vibepollo, adapted to Vibepollo's code structure. DS5 customizations
were intentionally excluded (obsolete via the CTM bridge). Knobs already present
in Vibepollo (min_qp, filler_data, split_encode, weighted_prediction) were skipped.

- AP1: configurable RTP send-pacing bandwidth (pacing_max_bitrate_kbps).
  Replaces the hardcoded ~80%-of-1Gbps pacer that no-ops on WiFi links and lets
  AMPDU aggregation amplify per-frame bursts into 30-60ms inter-arrival spikes.
  0 = legacy. Includes a 1-packet/ms floor.
- AP6: raise videoBroadcastThread + sync/async encode threads high->critical;
  audioBroadcastThread stays high.
- AP9: expose nvenc_temporal_aq with NV_ENC_CAPS_SUPPORT_TEMPORAL_AQ probe.
- SP1: server-side packetsize cap (200..65535) to avoid fragmentation on low-MTU links.
- SP2: harden intra-refresh - add outputRecoveryPointSEI to the HEVC path and add
  the previously-missing H264 intra-refresh block (caps-probe + recoveryPointSEI +
  single-slice). Activates when the client negotiates enableIntraRefresh.

Web-UI strings and docs intentionally omitted; keys are sunshine.conf-only.
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