No description
Find a file
Oliver Woodman b03c5c5753 Ensure we always seek after selecting a track.
Some extractor implementations underneath MediaExtractor require a seekTo
call after tracks are selected to ensure samples are read from the correct
position. De-duplicating logic was preventing this from happening in some
cases, causing issues like:

https://github.com/google/ExoPlayer/issues/301

Note that seeking all tracks a side effect of track selection sucks if
you already have one or more tracks selected, because it introduces
discontinuities to the already selected tracks. However, in general, it
*is* necessary to specify the position for the track being selected,
because the underlying extractor doesn't have enough information to know
where to start reading from. It can't determine this based on the read
positions of the already selected tracks, because the samples in these
tracks might be very sparse with respect to time.

I think a more optimal fix would be to change the SampleExtractor
interface to receive the current position as an argument to selectTrack.
For our own extractors, we'd seek the newly selected track to that
position, whilst the already enabled tracks would be left in their
current positions (if possible). For FrameworkSampleExtractor we'd
still have no choice but to call seekTo on the extractor to seek all
of the tracks. This solution ends up being more complex though, because:

- The SampleExtractor then needs a way of telling DefaultSampleSource
  which tracks were actually seeked, so that the pendingDiscontinuities
  flags can be set correctly.
- It's a weird API that requires the "current playback position to seek
  only the track being enabled"

So it may not be worth it! I think this fix is definitely good for now,
in any case.

Issue: #301
2015-02-18 15:15:20 +00:00
demo Add support for elementary AAC/ADTS streams. 2015-02-17 15:42:38 +00:00
demo_misc Add directories for extensions + additional demos 2015-01-26 16:18:41 +00:00
extensions Add directories for extensions + additional demos 2015-01-26 16:18:41 +00:00
gradle/wrapper Include gradle plugin 1.0.0 2014-12-22 10:34:46 +08:00
library Ensure we always seek after selecting a track. 2015-02-18 15:15:20 +00:00
.gitignore Add gitignore 2014-07-18 23:00:12 +09:00
build.gradle Include gradle plugin 1.0.0 2014-12-22 10:34:46 +08:00
CONTRIBUTING.md Minor setup tweaks. 2014-11-03 12:01:25 +00:00
gradle.properties Initial drop. 1.0.10. 2014-06-16 12:56:04 +01:00
gradlew Initial drop. 1.0.10. 2014-06-16 12:56:04 +01:00
gradlew.bat Initial drop. 1.0.10. 2014-06-16 12:56:04 +01:00
LICENSE Initial drop. 1.0.10. 2014-06-16 12:56:04 +01:00
README.md Package restructuring to accommodate incoming features (sorry). 2015-01-27 17:00:46 +00:00
settings.gradle Minor setup tweaks. 2014-11-03 12:01:25 +00:00

ExoPlayer Readme

Description

ExoPlayer is an application level media player for Android. It provides an alternative to Androids MediaPlayer API for playing audio and video both locally and over the Internet. ExoPlayer supports features not currently supported by Androids MediaPlayer API (as of KitKat), including DASH and SmoothStreaming adaptive playbacks, persistent caching and custom renderers. Unlike the MediaPlayer API, ExoPlayer is easy to customize and extend, and can be updated through Play Store application updates.

Developer guide

The ExoPlayer developer guide provides a wealth of information to help you get started.

Reference documentation

Class reference (Documents the ExoPlayer library classes).

Project branches

  • The master branch holds the most recent minor release.
  • Most development work happens on the dev branch.
  • Additional development branches may be established for major features.

Using Eclipse

The repository includes Eclipse projects for both the ExoPlayer library and its accompanying demo application. To get started:

  1. Install Eclipse and setup the Android SDK.

  2. Open Eclipse and navigate to File->Import->General->Existing Projects into Workspace.

  3. Select the root directory of the repository.

  4. Import the ExoPlayerDemo and ExoPlayerLib projects.

Using Gradle

ExoPlayer can also be built using Gradle. You can include it as a dependent project and build from source. e.g.

// settings.gradle
include ':app', ':..:ExoPlayer:library'

// app/build.gradle
dependencies {
    compile project(':..:ExoPlayer:library')
}

If you want to use ExoPlayer as a jar, run:

./gradlew jarRelease

and copy library.jar to the libs-folder of your new project.