Low Latency playback options

The following guide details the options for low latency live streaming playback with Reactive streams.

Native playback options

We can use native, low latency enabled, players to get the best performance in each environment.

  • Android
    • We can use the native player on the platform, Exoplayer, and configure it this way to achieve low latency:
      • You should increase the DEFAULT_MIN_LOADABLE_RETRY_COUNT value in the HlsMediaSource and DashMediaSource classes, in order to allow more retries on segments in 404
      • You can decrease DEFAULT_TRACK_BLACKLIST_MS(default: 60000) in ChunkedTrackBlacklistUtil class, in order to reduce the probability of a bitrate variant being blacklisted because of successive 404s
      • Finally you can decrease the default buffer values in the DefaultLoadControl class: DEFAULT_MAX_BUFFER_MS(default: 3000), DEFAULT_BUFFER_FOR_PLAYBACK_MS(default: 2500) and DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS(default: 5000) in order to control more tightly how much content is loaded at the playback session startup, after a seek or a rebuffering.
  • iOS
    • You can also trying using Apple's baked in AVPlayer now that it supports ll-HLS streaming. The Reactive team has not tested this yet however, so we are unsure what performance you'll see.

Third-party vendor approach

  • CastLabs Player: has iOS, Android, and web solutions and is benchmarked at 2.5s - 5s latency.
  • Bitmovin: has low latency iOS, Android, and web solutions
  • Nexplayer: has iOS and Android ultra-low latency solutions
  • ShakaPlayer Embedded by the team at Google. Its an iOS only solution that allows for low-latency DASH and HLS playback.