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, bufferingGoal and rebufferingGoal.

  • AbrConfiguration — use initialRestrictions to cap join resolution. A higher downgrade target (bandwidthDowngradeTarget near 0.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’s suggestedPresentationDelay is set to 0 by default for low-latency configuration.

  • If your DASH manifest is missing a clock sync URI, supply one via ManifestConfiguration’s manifest.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
    }
  }
});
Next topic: Playlist
Previous topic: Common media data