Low Latency playback options

The following guide details the options for low latency live streaming playback with Reactive streams. Our recommendation is to use Nexplayer players because they offer the lowest latency and the least integration work.

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: We'll have to use a 3rd party player since native iOS does not provide a native low latency option. A free open-source solution for this is ShakaPlayer Embedded by the team at Google. We can also use the paid solutions in the "third-party vendor approach" section of this guide.

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