olly b563b82787 Add HttpUtil for tasks common to HttpDataSource implementations
Part of aligning HttpDataSource behavior will require adding
logic that's common across the DataSource implementations. This
change establishes a util class to house it, and moves a bit of
existing logic that's related and can be easily shared into it.

There is one small behavior change in this CL, which is that our
handling of Content-Range response headers can now parse the body
length if the "document size" part of the Content-Range is unknown,
for example "bytes 5-9/*". Previously the pattern we were matching
to required the "size" part to be set, for example "bytes 5-9/100",
despite the fact we don't need or use it.

PiperOrigin-RevId: 362396976
2021-03-12 10:44:40 +00:00
..

ExoPlayer OkHttp extension

The OkHttp extension is an HttpDataSource implementation using Square's OkHttp.

License note

Please note that whilst the code in this repository is licensed under Apache 2.0, using this extension requires depending on OkHttp, which is licensed separately.

Getting the extension

The easiest way to use the extension is to add it as a gradle dependency:

implementation 'com.google.android.exoplayer:extension-okhttp: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.

Using the extension

ExoPlayer requests data through DataSource instances. These instances are either instantiated and injected from application code, or obtained from instances of DataSource.Factory that are instantiated and injected from application code.

If your application only needs to play http(s) content, using the OkHttp extension is as simple as updating any DataSources and DataSource.Factory instantiations in your application code to use OkHttpDataSource and OkHttpDataSourceFactory respectively. If your application also needs to play non-http(s) content such as local files, use

new DefaultDataSource(
    ...
    new OkHttpDataSource(...) /* baseDataSource argument */);

and

new DefaultDataSourceFactory(
    ...
    new OkHttpDataSourceFactory(...) /* baseDataSourceFactory argument */);

respectively.

  • Javadoc: Classes matching com.google.android.exoplayer2.ext.okhttp.* belong to this module.