2015-12-17 04:49:19 +08:00
|
|
|
|
# ExoPlayer #
|
2014-06-16 19:55:31 +08:00
|
|
|
|
|
2015-12-17 04:55:04 +08:00
|
|
|
|
ExoPlayer is an application level media player for Android. It provides an
|
|
|
|
|
alternative to Android’s MediaPlayer API for playing audio and video both
|
|
|
|
|
locally and over the Internet. ExoPlayer supports features not currently
|
|
|
|
|
supported by Android’s MediaPlayer API, including DASH and SmoothStreaming
|
|
|
|
|
adaptive playbacks. Unlike the MediaPlayer API, ExoPlayer is easy to customize
|
|
|
|
|
and extend, and can be updated through Play Store application updates.
|
2014-06-16 19:55:31 +08:00
|
|
|
|
|
2015-12-11 02:08:39 +08:00
|
|
|
|
## Documentation ##
|
|
|
|
|
|
2017-08-17 22:59:29 +08:00
|
|
|
|
* The [developer guide][] provides a wealth of information.
|
|
|
|
|
* The [class reference][] documents ExoPlayer classes.
|
2015-12-11 02:08:39 +08:00
|
|
|
|
* The [release notes][] document the major changes in each release.
|
2017-08-17 22:59:29 +08:00
|
|
|
|
* Follow our [developer blog][] to keep up to date with the latest ExoPlayer
|
|
|
|
|
developments!
|
2015-12-11 02:08:39 +08:00
|
|
|
|
|
2019-04-15 19:33:54 +08:00
|
|
|
|
[developer guide]: https://exoplayer.dev/guide.html
|
|
|
|
|
[class reference]: https://exoplayer.dev/doc/reference
|
2017-08-17 22:59:29 +08:00
|
|
|
|
[release notes]: https://github.com/google/ExoPlayer/blob/release-v2/RELEASENOTES.md
|
|
|
|
|
[developer blog]: https://medium.com/google-exoplayer
|
2015-12-11 02:08:39 +08:00
|
|
|
|
|
2015-12-17 04:49:19 +08:00
|
|
|
|
## Using ExoPlayer ##
|
2015-12-11 01:47:03 +08:00
|
|
|
|
|
2017-08-17 22:59:29 +08:00
|
|
|
|
ExoPlayer modules can be obtained from JCenter. It's also possible to clone the
|
2017-06-28 01:11:26 +08:00
|
|
|
|
repository and depend on the modules locally.
|
|
|
|
|
|
2017-08-17 22:59:29 +08:00
|
|
|
|
### From JCenter ###
|
2017-06-28 01:11:26 +08:00
|
|
|
|
|
2019-01-09 18:24:32 +08:00
|
|
|
|
#### 1. Add repositories ####
|
|
|
|
|
|
2016-09-23 18:15:38 +08:00
|
|
|
|
The easiest way to get started using ExoPlayer is to add it as a gradle
|
2018-11-05 17:23:47 +08:00
|
|
|
|
dependency. You need to make sure you have the Google and JCenter repositories
|
2017-09-11 15:25:36 +08:00
|
|
|
|
included in the `build.gradle` file in the root of your project:
|
2016-09-23 18:15:38 +08:00
|
|
|
|
|
|
|
|
|
```gradle
|
|
|
|
|
repositories {
|
2017-09-11 15:25:36 +08:00
|
|
|
|
google()
|
2018-10-23 20:41:48 +08:00
|
|
|
|
jcenter()
|
2016-09-23 18:15:38 +08:00
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
2019-01-09 18:24:32 +08:00
|
|
|
|
#### 2. Add ExoPlayer module dependencies ####
|
|
|
|
|
|
2018-02-27 21:57:18 +08:00
|
|
|
|
Next add a dependency in the `build.gradle` file of your app module. The
|
|
|
|
|
following will add a dependency to the full library:
|
2015-12-11 01:47:03 +08:00
|
|
|
|
|
2016-03-15 23:41:22 +08:00
|
|
|
|
```gradle
|
2018-02-26 11:41:02 +08:00
|
|
|
|
implementation 'com.google.android.exoplayer:exoplayer:2.X.X'
|
2015-12-17 04:49:19 +08:00
|
|
|
|
```
|
2015-12-15 00:15:23 +08:00
|
|
|
|
|
2019-01-09 18:24:32 +08:00
|
|
|
|
where `2.X.X` is your preferred version.
|
2018-10-31 19:59:04 +08:00
|
|
|
|
|
|
|
|
|
As an alternative to the full library, you can depend on only the library
|
|
|
|
|
modules that you actually need. For example the following will add dependencies
|
|
|
|
|
on the Core, DASH and UI library modules, as might be required for an app that
|
|
|
|
|
plays DASH content:
|
2015-12-11 01:47:03 +08:00
|
|
|
|
|
2017-04-18 21:12:08 +08:00
|
|
|
|
```gradle
|
2018-02-26 11:41:02 +08:00
|
|
|
|
implementation 'com.google.android.exoplayer:exoplayer-core:2.X.X'
|
|
|
|
|
implementation 'com.google.android.exoplayer:exoplayer-dash:2.X.X'
|
|
|
|
|
implementation 'com.google.android.exoplayer:exoplayer-ui:2.X.X'
|
2017-04-18 21:12:08 +08:00
|
|
|
|
```
|
|
|
|
|
|
2017-08-17 22:59:29 +08:00
|
|
|
|
The available library modules are listed below. Adding a dependency to the full
|
|
|
|
|
library is equivalent to adding dependencies on all of the library modules
|
2017-04-18 21:12:08 +08:00
|
|
|
|
individually.
|
|
|
|
|
|
|
|
|
|
* `exoplayer-core`: Core functionality (required).
|
|
|
|
|
* `exoplayer-dash`: Support for DASH content.
|
|
|
|
|
* `exoplayer-hls`: Support for HLS content.
|
|
|
|
|
* `exoplayer-smoothstreaming`: Support for SmoothStreaming content.
|
|
|
|
|
* `exoplayer-ui`: UI components and resources for use with ExoPlayer.
|
|
|
|
|
|
2017-08-17 22:59:29 +08:00
|
|
|
|
In addition to library modules, ExoPlayer has multiple extension modules that
|
|
|
|
|
depend on external libraries to provide additional functionality. Some
|
2017-12-28 01:02:40 +08:00
|
|
|
|
extensions are available from JCenter, whereas others must be built manually.
|
2017-08-24 18:37:32 +08:00
|
|
|
|
Browse the [extensions directory][] and their individual READMEs for details.
|
2017-04-18 21:12:08 +08:00
|
|
|
|
|
2017-08-17 22:59:29 +08:00
|
|
|
|
More information on the library and extension modules that are available from
|
|
|
|
|
JCenter can be found on [Bintray][].
|
|
|
|
|
|
2017-08-24 18:37:32 +08:00
|
|
|
|
[extensions directory]: https://github.com/google/ExoPlayer/tree/release-v2/extensions/
|
2017-04-18 21:12:08 +08:00
|
|
|
|
[Bintray]: https://bintray.com/google/exoplayer
|
2015-12-11 01:47:03 +08:00
|
|
|
|
|
2019-01-09 18:24:32 +08:00
|
|
|
|
#### 3. Turn on Java 8 support ####
|
|
|
|
|
|
|
|
|
|
If not enabled already, you also need to turn on Java 8 support in all
|
|
|
|
|
`build.gradle` files depending on ExoPlayer, by adding the following to the
|
|
|
|
|
`android` section:
|
|
|
|
|
|
|
|
|
|
```gradle
|
|
|
|
|
compileOptions {
|
|
|
|
|
targetCompatibility JavaVersion.VERSION_1_8
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
2017-06-28 01:11:26 +08:00
|
|
|
|
### Locally ###
|
|
|
|
|
|
|
|
|
|
Cloning the repository and depending on the modules locally is required when
|
|
|
|
|
using some ExoPlayer extension modules. It's also a suitable approach if you
|
|
|
|
|
want to make local changes to ExoPlayer, or if you want to use a development
|
|
|
|
|
branch.
|
|
|
|
|
|
|
|
|
|
First, clone the repository into a local directory and checkout the desired
|
|
|
|
|
branch:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
git clone https://github.com/google/ExoPlayer.git
|
2019-09-23 22:18:25 +08:00
|
|
|
|
cd ExoPlayer
|
2017-06-28 01:11:26 +08:00
|
|
|
|
git checkout release-v2
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Next, add the following to your project's `settings.gradle` file, replacing
|
|
|
|
|
`path/to/exoplayer` with the path to your local copy:
|
|
|
|
|
|
|
|
|
|
```gradle
|
|
|
|
|
gradle.ext.exoplayerRoot = 'path/to/exoplayer'
|
|
|
|
|
gradle.ext.exoplayerModulePrefix = 'exoplayer-'
|
|
|
|
|
apply from: new File(gradle.ext.exoplayerRoot, 'core_settings.gradle')
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
You should now see the ExoPlayer modules appear as part of your project. You can
|
|
|
|
|
depend on them as you would on any other local module, for example:
|
|
|
|
|
|
|
|
|
|
```gradle
|
2018-02-26 11:41:02 +08:00
|
|
|
|
implementation project(':exoplayer-library-core')
|
|
|
|
|
implementation project(':exoplayer-library-dash')
|
|
|
|
|
implementation project(':exoplayer-library-ui')
|
2017-06-28 01:11:26 +08:00
|
|
|
|
```
|
|
|
|
|
|
2015-12-17 04:49:19 +08:00
|
|
|
|
## Developing ExoPlayer ##
|
2015-12-11 02:06:46 +08:00
|
|
|
|
|
2015-12-17 04:49:19 +08:00
|
|
|
|
#### Project branches ####
|
|
|
|
|
|
2017-08-17 22:59:29 +08:00
|
|
|
|
* Development work happens on the `dev-v2` branch. Pull requests should
|
|
|
|
|
normally be made to this branch.
|
|
|
|
|
* The `release-v2` branch holds the most recent release.
|
2014-06-16 19:55:31 +08:00
|
|
|
|
|
2015-12-17 04:49:19 +08:00
|
|
|
|
#### Using Android Studio ####
|
|
|
|
|
|
2015-12-17 04:55:04 +08:00
|
|
|
|
To develop ExoPlayer using Android Studio, simply open the ExoPlayer project in
|
|
|
|
|
the root directory of the repository.
|