Overview
Every subscriber buffers incoming video in a jitter buffer before playing it. The buffer absorbs network jitter and packet loss to keep playback smooth, but adds latency because each frame is held briefly before it's shown. For most media, this trade-off is worthwhile. For teleoperation and remote inference, it often isn't: an operator needs to see what the robot sees now, and a model needs to run inference on current frames.
LiveKit provides two ways to reduce video buffering:
- Playout delay hints set the minimum and maximum playout delay, in milliseconds, for every subscriber in a room. Use them to reduce latency while retaining some buffering for smoother playback. They are supported through the server SDKs and the LiveKit CLI.
- Zero jitter buffer mode disables the subscriber's jitter buffer entirely on the client, providing the lowest possible latency. Frames are shown as soon as they decode, at the cost of less smooth playback on poor networks. Enable it globally in a supported client SDK.
Both approaches apply to video only; audio buffering is unaffected. See the following guides for details on how each works and how to configure it.