
Even when fixed to the US locale (and thus avoiding surprising behaviour in e.g. Turkish locale with "i" and "I") there are unexpected behaviours when upper and lower casing non-ASCII characters. For example it's sometimes not symmetric, e.g.: "ẞ".toLowerCase() -> "ß" "ß".toUpperCase() -> "SS" In all the ExoPlayer usages we are either dealing with known-ASCII strings (e.g. MIME types) or comparing against ASCII constant strings anyway, so it seems easier to just use Guava's ASCII-only class in these cases. This change also includes some null-twiddling, because Util.toLowerInvariant() is null tolerant, while Ascii.toLowerCase() is not. Most of the usages were already non-null, and it was easy enough to change the remaining ones to be so by simple reordering of statements. I'll make an equivalent change for Util.toUpperInvariant() next. PiperOrigin-RevId: 368419813
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 DataSource
s 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.
Links
- Javadoc: Classes matching
com.google.android.exoplayer2.ext.okhttp.*
belong to this module.