Latency and smoothness
Smoothness beats the average
Section titled “Smoothness beats the average”The instinct is to chase the lowest average latency. It is the wrong target.
A stream at 45 ms that arrives evenly feels better than a stream at 38 ms that arrives unevenly. Human perception is very good at spotting irregularity in motion and quite forgiving of a constant delay.
The number that matches this is presentation interval variation: the standard deviation of the gap between displayed frames. It is in the in-session performance overlay and in the admin session detail.
| Value | What it means |
|---|---|
| Below 12 ms | Healthy. |
| 12 to 18 ms | Noticeable if you are looking for it. |
| Above 18 ms | Visible stutter. |
Where the time goes
Section titled “Where the time goes”Roughly, in order:
- The game renders a frame. Yours to control, through game settings.
- The compositor captures it. Small, and not the bottleneck.
- The encoder compresses it. Typically 7 to 19 ms depending on encoder, resolution and GPU. Above roughly 16 ms at 60 fps this is your bottleneck.
- The network carries it. Whatever your path costs.
- The client buffers it. A jitter buffer, adaptive, sized to how uneven arrival is.
- The browser decodes and presents it. Small with hardware decode, a few ms more with AV1 software decode.
Steps 4 and 5 interact. An uneven network forces a larger buffer, and the buffer is latency. Making the network path more consistent is worth more than making it faster.
The client playout buffer
Section titled “The client playout buffer”Quasar adapts the buffer to observed jitter, starting from a baseline that depends on the tier and shrinking toward a 30 ms floor when arrival is consistent.
This is client-side and automatic. There is no server setting for it.
Things that actually help
Section titled “Things that actually help”Wired, on both ends. The single biggest improvement available to most people. WiFi jitter is the most common cause of a stream that feels bad on a connection that measures fine.
The socket buffer sysctl. If you skipped it during install, do it now. See Requirements. Without it, keyframe bursts overflow the send buffer and the drops get misread as congestion.
A frame rate your GPU can genuinely hold. A steady 60 beats an unsteady 90. Encode time rises with resolution and frame rate, and past the point where the encoder cannot keep up, everything gets worse at once.
Leaving adaptive bitrate on smooth. It is specifically tuned for this.
A codec your client decodes in hardware, where possible. AV1 software decode is fine but not free.
Things that mostly do not help
Section titled “Things that mostly do not help”Chasing a lower GOP. More frequent keyframes cost bitrate and produce periodic spikes that hurt smoothness. The default of 60 is reasonable.
Reducing the encode queue depth. QUASAR_QUEUE_BUFFERS below 3 trades jitter
absorption for a couple of milliseconds. Usually a bad trade.
Forward error correction. Do not enable it for browser clients. See Experimental options.
A specific trap on macOS clients
Section titled “A specific trap on macOS clients”If a Mac on WiFi shows periodic sawtooth latency spikes, check whether the AWDL interface is up. It is used by AirDrop and Handoff, and its channel hopping produces exactly that pattern.
ifconfig awdl0Bringing it down has produced a drop from 68 ms at the 95th percentile to around 4 ms. It comes back up whenever AirDrop or Handoff is used, so check its state before drawing conclusions from a Mac on WiFi.
Measuring properly
Section titled “Measuring properly”For a real answer rather than an impression, take a diagnostic bundle. It correlates encoder, network and client signals over the same window and gives a verdict on which of the three is responsible. See Diagnostics.