ExoPlayer Cronet extension
The Cronet extension is an HttpDataSource implementation using Cronet.
Getting the extension
The easiest way to use the extension is to add it as a gradle dependency:
implementation 'com.google.android.exoplayer:extension-cronet:2.X.X'
where 2.X.X
is the version, which must match the version of the ExoPlayer
library being used.
Alternatively, you can clone the ExoPlayer repository and depend on the module locally. Instructions for doing this can be found in ExoPlayer's top level README.
By default, the extension will use the Cronet implementation in Google Play Services. If you prefer, it's also possible to embed the Cronet implementation directly into your application. See below for more details.
Using the extension
ExoPlayer requests data through DataSource
instances. These instances are
obtained from instances of DataSource.Factory
, which are instantiated and
injected from application code.
If your application only needs to play http(s) content, using the Cronet
extension is as simple as updating DataSource.Factory
instantiations in your
application code to use CronetDataSource.Factory
. If your application also
needs to play non-http(s) content such as local files, use:
new DefaultDataSourceFactory(
...
/* baseDataSourceFactory= */ new CronetDataSource.Factory(...) );
Choosing between Google Play Services Cronet and Cronet Embedded
The underlying Cronet implementation is available both via a Google Play
Services API, and as a
library that can be embedded directly into your application. When you depend on
com.google.android.exoplayer:extension-cronet:2.X.X
, the library will not be
embedded into your application by default. The extension will attempt to use the
Cronet implementation in Google Play Services. The benefits of this approach
are:
- A negligible increase in the size of your application.
- The Cronet implementation is updated automatically by Google Play Services.
If Google Play Services is not available on a device, CronetDataSourceFactory
will fall back to creating DefaultHttpDataSource
instances, or
HttpDataSource
instances created by a fallbackFactory
that you can specify.
It's also possible to embed the Cronet implementation directly into your application. To do this, add an additional gradle dependency to the Cronet Embedded library:
implementation 'com.google.android.exoplayer:extension-cronet:2.X.X'
implementation 'org.chromium.net:cronet-embedded:XX.XXXX.XXX'
where XX.XXXX.XXX
is the version of the library that you wish to use. The
extension will automatically detect and use the library. Embedding will add
approximately 8MB to your application, however it may be suitable if:
- Your application is likely to be used in markets where Google Play Services is not widely available.
- You want to control the exact version of the Cronet implementation being used.
Links
- Javadoc: Classes matching
com.google.android.exoplayer2.ext.cronet.*
belong to this module.