Adaptive jitter buffers resize dynamically to stay as small as possible while preventing dropouts
A fixed jitter buffer has a predetermined size set at configuration time — suitable for low-jitter controlled networks but wasteful or insufficient on variable-quality links. An adaptive jitter buffer measures the live jitter of the incoming stream and continuously grows or shrinks to match: it tries to stay just large enough to absorb current jitter without adding unnecessary latency. When jitter increases it expands; when jitter drops it contracts. Most modern VoIP stacks use adaptive buffers (e.g., libspeexdsp’s implementation). The trade-off: adaptive buffers are more complex, can temporarily increase latency during a jitter spike, and require a real-time jitter estimator running alongside them. Fixed buffers are simpler and more predictable but either waste latency (set too large) or drop packets (set too small) when conditions change.
Examples
ITU G.114 recommends total one-way delay under 400ms (under 150ms preferred). A fixed buffer on a local network can be set to 20ms. A fixed buffer for a transatlantic link might need 120ms. An adaptive buffer would automatically settle near the minimum needed.
Assessment
Compare a fixed 60ms jitter buffer and an adaptive jitter buffer on a network where jitter spikes from 10ms to 200ms for 5 seconds then drops back. Predict how each buffer behaves during the spike and after, including any audible artefacts.