ExoPlayer 2 - Why, what and when?

Olly Woodman
AndroidX Media3
Published in
2 min readJun 14, 2016

Welcome to the first of a series of posts describing ExoPlayer 2, a major rewrite of ExoPlayer that we’ve been working on for the last six months. This post explains why ExoPlayer 2 is necessary, what to expect and when to expect it.

Why?

ExoPlayer was originally developed for Google’s own Android applications, such as YouTube and Google Play Movies. It was designed to play DASH content, since DASH was (and still is) our preferred technology for the adaptive streaming of video over HTTP (you can read about some of the advantages of DASH over competing standards here). It was also designed for maximum flexibility, with dependency injection used to build the player’s internal functionality in a way that allows individual components to be swapped out for custom implementations.

Since ExoPlayer’s open source release in 2014, we’ve significantly expanded its support for different technologies and formats. ExoPlayer now supports SmoothStreaming and HLS in addition to DASH, as well as a growing number of media container formats (see the supported formats page for details). We’ve also added new features, such as the ability to query and select from the available media tracks.

Although API stability has never been a goal of our development model, we have made some effort to avoid extensive breaking changes to ExoPlayer’s core APIs. This led to compromises being made when adding support for new formats or features didn’t fit nicely with ExoPlayer’s existing design. Furthermore there are some features that we’d like to support, such as full support for DASH multi-period manifests, gapless audio playbacks and seeking in live playbacks, that cannot be implemented cleanly without larger changes being made.

As ExoPlayer’s support for different technologies and formats has grown, so has the number of applications making use of it. Two years ago ExoPlayer was used by a handful of applications. Today it’s used by over 10,000. Whilst advanced developers appreciate the flexibility that ExoPlayer provides, many of these applications only require a simple media playback solution. For this use case ExoPlayer can be daunting. Its APIs take time to learn, and a developer needs to write a non-trivial amount of code just to get up and running.

What?

ExoPlayer 2 is a major rewrite that aims to address the problems described above. In particular, it has the following goals:

  1. To solve design limitations that became apparent as new features were added to ExoPlayer 1, and remove the compromises that were made to work around them.
  2. To provide a base on which desired features such as DASH multi-period manifest support, gapless audio playbacks and seeking in live playbacks can be cleanly implemented.
  3. To provide a higher level API for simple use cases, without sacrificing flexibility for advanced use cases.

We’ll be describing some of the specific work that we’re doing in each of these areas in future posts.

When?

Soon! We’ll shortly be pushing our work to an experimental branch of our GitHub project, and we’ll continue to push changes to this branch as we work towards the first ExoPlayer 2 release.

--

--