The Bitter Reality of HTML5 Video on Android
If you have been reading this blog in the past, you are aware of the video features required for professional video delivery. With “professional”, I am referring to premium video content, which requires different functionality than casual videos. This is less relevant for the publication of a personal vacation video, or free, not monetized content, but rather for premium video.
HTML5 for professional use has been making some significant progress in 2013, though it is continuing to face fragmentation challenges. To better understand what those advanced video features are, I recommend reading my online video beginner’s guide, and my current state of HTML5 post.
HTML5 Video on Android
One question I often receive is regarding HTML5 video on Android. It often causes confusion, since the term “HTML5 video” doesn’t define the supported feature set, especially when it comes to advanced streaming features, such as streaming protocols, closed captioning or content protection.
The short summary is that Android does not match the iOS HTML5 streaming capabilities, which leads to unpleasant surprises when opening an iOS optimized video streaming site in the Android browser.
But why is this the case when Android is leading with an 80% market share? To better understand the challenges today, let’s look at the history of browser based video on Android.
Even though Android already had pre-commercial release versions in 2007/2008, it became increasingly more popular with Android version 2.2, which first time ever on a mobile device supported Flash Player.
Android’s originally supported video streaming format was RTSP, and was developed in the late 90s. Given its age and limitations, it is not widely accepted as modern streaming format. With Flash Player support, the Android browser on a sudden had access to video streams that were designed to play on the deskop.
With progressive download as the only native alternative for video in the Android browser, Flash Player became very popular for video playback. Even to the point, where native applications opened a webview to stream video with Flash Player, instead of relying on the native video playback capabilities of Android.
HLS support was absent in Android 2.2, while Android 2.3 only had very rudimentary, not yet official, support for HLS.
I am on purpose skipping Android 3.0, since it was mostly used to enable the tablet flavor of Android, with Android 4.0 merging the phone and tablet versions. There are practically no Android 3 devices on the market that haven’t been upgraded to Android 4.x .
Android 4.0 changed the paradigm of online video on Android. With the discontinuation of further development of Flash Player for Android, caused by the fact that mobile sites simply didn’t use Flash without iOS’s support, it created a clear gap. The conclusion the Android team seemed to have was to endorse the iOS model, and support HLS playback capabilities in the browser with the HTML5 video tag.
Even though HLS support was not mature, it seemed to be a direction I even personally recommended as migration path.
A challenge Android faced in earlier days was the lack of a higher end browser. The native Internet browser was significantly behind the desktop Chrome browser. Android changed this by introducing Chrome for Android.
Chrome provides a much improved browser experience, but it impacted video playback.
- Even though the archived versions of Flash Player still worked on 4.x with the native Android browser, Chrome officially has no support for Flash Player anymore.
- The Chrome browser is default in Android 4.3.
Although supported in earlier OS versions, Android 4.3 Chrome does not support HLS anymore in the HTML5 video tag,
Update (02/14) HLS video support seems to be back in the latest Chrome browser, but it remains to have issues across different devices.
But even if the Chrome browser offered support again. Even though HLS is available in Chrome, it is still limited by the native HLS playback issues Android is facing.
A realistic workaround is to use a native application and open it from the web browser by using the Android intent filter. It has not much to do with actual HTML5 video, but it allows the use of a custom and improved HLS video stack professional Android video applications rely on. As example, videos for trailers or clips could be played with progressive download in the browser, while videos requiring adaptive streaming, live, or content protection could rely on a native application.
This might not be the end-state, since technologies and options constantly involve – but for now, we need to face the bitter reality of HTML5 video on Android.