No description
Find a file
Oliver Woodman 7c66b6ed3b HLS optimization #1 (refactor).
This is the start of a sequence of changes to fix the ref'd
github issue. Currently TsExtractor involves multiple memory
copy steps:

DataSource->Ts_BitArray->Pes_BitArray->Sample->SampleHolder

This is inefficient, but more importantly, the copy into
Sample is problematic, because Samples are of dynamically
varying size. The way we end up expanding Sample objects to
be large enough to hold the data being written means that we
end up gradually expanding all Sample objects in the pool
(which wastes memory), and that we generate a lot of GC churn,
particularly when switching to a higher quality which can
trigger all Sample objects to expand.

The fix will be to reduce the copy steps to:

DataSource->TsPacket->SampleHolder

We will track Pes and Sample data with lists of pointers into
TsPackets, rather than actually copying the data. We will
recycle these pointers.

The following steps are approximately how the refactor will
progress:

1. Start reducing use of BitArray. It's going to be way too
complicated to track bit-granularity offsets into multiple packets,
and allow reading across packet boundaries. In practice reads
from Ts packets are all byte aligned except for small sections,
so we'll move over to using ParsableByteArray instead, so we
only need to track byte offsets.

2. Move TsExtractor to use ParsableByteArray except for small
sections where we really need bit-granularity offsets.

3. Do the actual optimization.

Issue: #278
2015-02-10 12:25:13 +00:00
demo HLS optimization #1 (refactor). 2015-02-10 12:25:13 +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 HLS optimization #1 (refactor). 2015-02-10 12:25:13 +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.