Low Latency Audio. Cross Platform on Android, OSX and iOS. Free.
Android's 10 Millisecond Problem Mobile Audio Latency Test App Android Audio Player USB Audio and MIDI for Android
Though Android is the most widely distributed mobile OS, Android HTTP Live Streaming ("HLS") is not of the same quality as HLS on iOS.
Though newer versions of the Android OS tend to perform somewhat better, according to JWPlayer, Android fragmentation is still a problem and depending on the Android version, HLS may:
Though excessive buffering resulted in the crashing noted above, the tablet-only OS Honeycomb 3.0 was an attempt at HLS-capability.
The introduction of Android 4.4 KitKat included an update to the platform's HLS support to a superset of HLS specification version 7 (version 4 of the protocol), yet as the Android Open Source Issue Tracker makes clear, the Android-HLS issue is still far from solved despite the improvements made to KitKat.
Knowing this doesn't make it any easier on developers looking to utilize HLS streaming in their mobile apps and proves frustrating, considering the wide array of device/Android version combinations in the Android ecosystem.
Developers, then, are left with two alternatives: attempt to build an implementation for your app from scratch, or utilize a third-party SDK that solves the Android HLS problem for you. In many ways, the struggle for seamless HLS streaming on Android is similar to the struggle for low latency Android audio—but that's not the only thing the two problems have in common.
They share a common solution as well: Superpowered Audio technology.
But before we detail Superpowered HLS Streaming for Android and iOS, we will describe a typical HLS streaming implementation for Android. Generally, implementations are made up by using multiple, different external libraries for each layer:
Inevitably, this makes for severe interoperability and efficiency problems as each library is optimized locally, and kludged together, hence, the streaming performance cannot be optimized holistically.
In other words, you cannot take a Ford engine, put it on a Tesla chassis with a Porsche suspension and steering mechanism from a Trabant and expect any sort of reliable performance. You need to integrate and unify the entire stack.
The Superpowered HLS Streaming Audio for Android and iOS unites the entire stack of:
This way, with a Superpowered binary, the entire HLS stack runs inside the mobile app – with zero 3rd party dependency libraries, completely independent of Android or iOS versions and fragmentation – is how one achieves stable and reliable HLS Audio Streaming on Android.
The Superpowered HLS player can be set to three unique download strategies:
The Superpowered SDK contains a HTTP Live Streaming example project for iOS and Android that shows you how to create a simple HLS audio player with seeking, buffering indicator and time display. Also, choose from multiple live and vod streams, multiple download strategies and enable time stretching.
Please note: Per the license governing Superpowered technology; Superpowered HLS technology must be licensed and is not available for free, unlike the Superpowered SDK.
Implemented in 2009 by Apple as part of their Quicktime, Safari, OS X, and iOS software, HTTP Live Streaming (HLS) has become the standard media streaming communications protocol for adaptive bitrate (ABR) video on mobile, tablets, and desktop.
HLS supports both live broadcasts and video on demand (“VOD”). Because HLS detects bandwidth capacity, adjusting video quality based on bandwidth available at the time, HLS quality tends to higher—i.e., less buffering and interrupted playback—than streaming a static file at a single bitrate.
Because unlike other streaming technologies (eg. Adobe Media Server), it makes use of well-known Hyper Text Transport Protocol (“HTTP”). HLS works by breaking a stream into several small HTTP downloads. Rather than loading the entire file at once, each download loads a short chunk of a potentially unbounded transport stream. As the stream is played, the client is able to dynamically switch between several alternate streams—each containing the same data, but encoded at different bitrates—so that the streaming session adapts to the available bandwidth.