Low latency and fast zapping¶
PRESTOplay supports low-latency playback for live streams. This page gives a basic overview of the configuration options used to achieve and maintain low latency. For manifest and packaging requirements, refer to the relevant guides for DASH and HLS.
Note
Fast zapping between live channels relies on McPlaylist, which is
experimental and may change in future releases.
Low latency live playback¶
Enable the preset by setting lowLatencyMode in your
PlayerConfiguration. The preset tightens buffering, adjusts
adaptive bitrate (ABR) thresholds, and enables low-latency manifest parsing
for DASH and HLS manifests.
player.open({
source: '<live_manifest>',
lowLatencyMode: true,
});
Start from the preset and override these values if needed to match your packaging:
StreamingConfiguration— for example,bufferingGoalandrebufferingGoal.AbrConfiguration— useinitialRestrictionsto cap join resolution. A higher downgrade target (bandwidthDowngradeTargetnear0.95) and a lower upgrade target (bandwidthUpgradeTarget) help avoid stalls while staying close to live.
player.open({
source: '<live_manifest>',
lowLatencyMode: true,
streaming: {
bufferingGoal: 0.1,
rebufferingGoal: 0.01,
bufferBehind: 30,
},
abr: {
bandwidthUpgradeTarget: 0.6,
bandwidthDowngradeTarget: 0.95,
initialRestrictions: {
maxWidth: 640,
maxHeight: 480
}
},
});
Clock sync¶
PlayerConfiguration’ssuggestedPresentationDelayis set to0by default for low-latency configuration.If your DASH manifest is missing a clock sync URI, supply one via
ManifestConfiguration’smanifest.dash.clockSyncUri.
Live edge chasing¶
When a player drifts behind the live edge — for example, due to network
conditions or buffering — live edge chasing recovers latency by increasing
the playback rate. Configure it through StreamingConfiguration:
startChasingAt— latency threshold (in seconds) at which chasing begins.stopChasingAt— latency threshold (in seconds) at which chasing stops.chasingRate— playback rate used while chasing; must be greater than 1.chaseJumpDistance— if latency exceeds this value, the player seeks directly to the live edge instead of gradually catching up.
player.open({
source: '<live_manifest>',
lowLatencyMode: true,
streaming: {
enableLiveEdgeChasing: true,
startChasingAt: 3,
stopChasingAt: 1,
chasingRate: 1.5,
chaseJumpDistance: 10,
}
});
Fast zapping between live channels¶
Use the experimental McPlaylist to reduce zap time between live
manifests. See MC playlist for setup details. To stay aligned
with segment edges for live streams, enable startAtSegmentBoundary to
reduce seek time.
const playlist = new clpp.playlist.McPlaylist({
anchorId: 'video-anchor',
config: {
license: '<your_license_key>',
viewerId: '<user_id>',
streaming: {
bufferingGoal: 1,
rebufferingGoal: 1,
startAtSegmentBoundary: true,
ignoreDrift: true
}
}
});