Commit graph

1690 commits

Author SHA1 Message Date
olly
5f39b93d30 Properly release sample streams for DASH
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132301223
2016-09-08 16:29:48 +01:00
olly
e296d10c3f Start moving ExoPlayerImpl to use windows not periods
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132248872
2016-09-08 16:29:48 +01:00
aquilescanta
32867217a3 Improve profile/level check support for AVC
Issue:#1772

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132078273
2016-09-08 16:29:48 +01:00
Santiago Seifert
520e6caa60 Fixed style things from pull request 2016-09-08 12:59:21 +01:00
Sergio Moreno Mozota
e2722dee39 TsExtractor support for language code in the audio tracks. 2016-09-07 07:43:23 +02:00
Alan Snyder
776da10725 Fix merge issue 2016-09-05 15:39:40 -07:00
Alan Snyder
18ab96349e Support ID3/Apple metadata parsing in MP3 and MP4 files 2016-09-02 20:11:26 -07:00
olly
f8c05ebd93 Better selection of default start position for live
If the live window has a small duration, we currently
end up setting the default start position to be right
at the start of the window. This increases the chance
of a BehindLiveWindowException.

With this change we impose a minimum 5s gap between
the start of the window and the default start position.
If the window is *really* small (<10s) then doing this
would push the default start position too close to the
end of the window. We don't have much time to play with
in either direction in this case, so we put the default
start position in the middle of the window and hope for
the best.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132054802
2016-09-02 16:20:44 +01:00
eguven
06a644eccd DataSourceException: Used to specify a DataSource error.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132053698
2016-09-02 16:20:06 +01:00
olly
884bcb649e Support looping with LoopingMediaSource
Now you can do cool things (if you really want to!) like
play a video twice, then play a second video, then loop
the whole thing, all seamlessly.

new LoopingMediaSource(
  new LoopingMediaSource(firstVideoSource, 2),
  secondVideoSource));

You can also just loop, which is probably more useful :).

Issue: #490

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132049599
2016-09-02 16:19:27 +01:00
aquilescanta
fa500791c5 Rename Variant to HlsUrl and move into HlsMasterPlaylist
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132049545
2016-09-02 16:18:47 +01:00
olly
bd76ec8b13 Support duplicate entries in ConcatenatingMediaSource
People will inevitably try and do it, and it's pretty
easy to handle properly, so why not...

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132047019
2016-09-02 16:18:04 +01:00
olly
d48bf94145 MergingMediaSource fixes
- Don't send a timeline to the listener until all children
  have reported their timelines.
- Propagate a proper merge error if merging fails.
- The PlayerActivity hack is necessary due to the way Andorid's
  MediaController widget attaches to the window :(. It'll go
  away once we get our own player controls.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131958169
2016-09-02 16:17:23 +01:00
aquilescanta
a964da7922 Add support for PATs spread across multiple packets
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131946543
2016-09-02 16:16:41 +01:00
aquilescanta
a671ebd019 Add live media playlist refresh requests when live edge is reached
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131931868
2016-09-02 16:16:01 +01:00
eguven
860c6588c0 created DefaultHttpDataSourceFactory
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131931668
2016-09-02 16:15:18 +01:00
olly
ceebb4c561 Fix incorrect index in DefaultAllocator.trim
This could cause us to "lose" allocations backed by an
initial block, meaning they became unavailable for use
despite still being allocated.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131931465
2016-09-02 16:14:35 +01:00
olly
962b5940c2 Update ExoPlayer documentation + tweak method naming
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131843222
2016-09-02 16:08:45 +01:00
aquilescanta
50527c0a7d Add profile/level check support for AVC
Issue:#1772

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131812670
2016-08-31 15:26:02 +01:00
olly
d65feb682b Make public util method to get physical display size
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131810070
2016-08-31 15:26:02 +01:00
aquilescanta
f0c0b3efbf Decouple HlsSampleStream from HlsSampleStreamWrapper
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131731376
2016-08-31 15:26:02 +01:00
olly
797cd46e89 Detailed Javadoc for Timeline, Period and Window
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131715194
2016-08-31 15:26:02 +01:00
eguven
bd7be1b5e7 Cache support unbounded requests.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131696858
2016-08-31 15:26:02 +01:00
olly
98919fe709 Add ExoMediaDrm/ExoMediaCrypto to V2
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131693379
2016-08-31 15:25:35 +01:00
sharjeel
cf363f9e97 PSSH in MOOF support in Exo V2
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131534334
2016-08-31 15:25:35 +01:00
olly
f8311a48ed Add some convenience constructors for Cronet in V2
- The need to pass a Clock is pretty much only for testing, so
  make the constructor that takes one package private + use
  the system clock for public constructors.
- Add default timeout values.
- Also make sure we set Content-Type in all license requests,
  since when using Cronet the stack requires it to be set.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131404298
2016-08-31 15:25:35 +01:00
aquilescanta
4f670addd2 Add support for AC-3 streams in HLS
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131398594
2016-08-31 15:25:35 +01:00
aquilescanta
e48462d564 Add codecs argument to createContainerFormat
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131398162
2016-08-31 15:25:35 +01:00
aquilescanta
d72e26ff35 Add CRC check for PMT
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131394778
2016-08-31 15:25:31 +01:00
aquilescanta
6528aef2bb Add automatic E-AC-3 detection to the Ac3Reader
This is done through the bitstream id field and allows removing
the isEac3 parameter from the constructor.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131393477
2016-08-31 15:25:31 +01:00
cchiappini
4df63314d4 Create Cronet extension in v2
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131393395
2016-08-31 15:25:31 +01:00
olly
b53fa245ce Fix ID3 EOS detection for two-byte encodings
Issue: #1774

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131389528
2016-08-31 15:25:31 +01:00
aquilescanta
09c58004dc Add an AC3 bitstream extractor
Defined in ATSC Standard: Digital Audio Compression (AC-3, E-AC-3).
Link: http://atsc.org/wp-content/uploads/2015/03/A52-201212-17.pdf.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131294260
2016-08-31 15:25:31 +01:00
aquilescanta
af2b8fb7a6 Add CRC32 check for PAT section
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131294029
2016-08-31 15:25:25 +01:00
olly
0b6a93b468 Workaround missing data offsets in FMP4
If they're omitted, it's reasonable to assume it's because
they were uninteresting (i.e. sample data always tightly
packed at the start of the mdat). This is an issue for some
SmoothStreaming streams.

We actually already play such streams successfully, but
that's only due to another bug to be fixed in a following CL.
The same is true for V1, but given the low impact nature,
the fix will be V2 only.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131191975
2016-08-31 15:25:25 +01:00
olly
abaa4f1aad Don't update currentTrackBundle until end of block
If currentTrackBundle is updated at the start of the
block and then something goes wrong in the middle (e.g.
one of the skipFully calls) then the extractor wont
resume from the correct place.

This would be caught by our extractor tests if we had
a test sample that requires skipping to the sample data.
I'll try and construct one of those.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131191174
2016-08-31 15:25:25 +01:00
olly
42efb5413a SmoothStreaming fixes
- The -1 needs to be a 0. My bad.
- Create AAC CSD if not defined in manifest, like in V1.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131190995
2016-08-31 15:25:25 +01:00
aquilescanta
fd3d7be9c0 Fix data_offset not present bug in FragmentedMp4Extractor
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131183033
2016-08-31 15:25:25 +01:00
olly
ef7dd697b1 Fix ContentDataSource handling of AssetFileDescriptor
Also tweak how the null checks happen in a few DataSource
implementations (should be no-op changes, but allow you
to look at close() and be happy it does the right thing
without having to loop at the open() implementations).

Issue: #1759

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131172427
2016-08-31 15:25:25 +01:00
olly
5f1a2c71f0 Finalize V2 ExoPlayer API
There's still some internal to clean up to do, and in particular
it remains a TODO to be able to handle seek calls before the
timeline is set (for this CL, such calls are dropped). This change
does however finalize the API.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131171318
2016-08-31 15:25:25 +01:00
andrewlewis
85915f2ac1 Fix live window calculation and transition from VOD.
Fix the calculation of the seek window for multi-period DASH.

Snap the default initial position back to the start of its segment, to ensure
that the first sample provided when transitioning to a DASH live source is a
key-frame.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131052912
2016-08-31 15:25:25 +01:00
olly
458c7bfc05 Simplify ExoPlayerImplInternal
- Remove playingPeriodEndPositionUs. It doesn't look like it's
  required.
- Rename time variables to make it clearer what they are.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131027164
2016-08-31 15:25:24 +01:00
olly
94c908e89c Rename Window->MediaWindow, Timline->MediaTimeline
Window is potentially confusing with Android's Window class.
Once Window is renamed, it makes sense to rename Timeline too.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130938392
2016-08-31 15:25:24 +01:00
olly
fb55254f90 Fix a bunch more Javadoc
Also inline a few methods/classes where they can be made
private and therefore be removed from the public API.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130935090
2016-08-31 15:25:24 +01:00
aquilescanta
abdb8ddb6e Remove 1 track per type limitation in TsExtractor
Mainly, this allows the extractor to expose multiple audio tracks.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130928152
2016-08-31 15:25:18 +01:00
olly
d5607cfc47 Make Javadoc compile with Java8
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130922558
2016-08-31 15:25:18 +01:00
olly
9f1fc274c9 Add SimpleExoPlayer.getVolume API
Issue: #1754

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130780466
2016-08-31 15:25:18 +01:00
olly
2c84f016fe Parse and expose proj and st3d/stereo_mode
As described in:
https://github.com/google/spatial-media/blob/master/docs/spherical-video-v2-rfc.md.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130776689
2016-08-31 15:25:18 +01:00
olly
1579b68cf6 Sanitize constants
- Use a single constant for unset/unknown times across
  all time bases. Note also that this moves away from
  use of -1 for unset/unknown times in ms, which was a
  bad choice (it might conflict with real times, such
  as a time representing being just behind the start
  of a live window).
- Add a few other unset constants, and use them.
- Fix some hardcoding of -1 where existing constants
  should have been used.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130775594
2016-08-31 15:25:18 +01:00
andrewlewis
725337dab3 Fix VOD to live transitions.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130755346
2016-08-31 15:25:18 +01:00
olly
f2ee7ef07b Fix formatting
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130662159
2016-08-31 15:25:18 +01:00
olly
83e466d129 Toward API finalization
- Remove getNewPlayingPeriodIndex from MediaSource
- Remove all absolute references to period indices from
  Window. Their existence prevents ConcatenatingMediaSource
  from being able to efficiently handle children with
  large numbers of entries (e.g. a cursor backed source),
  since it would copy all windows into its merged timeline.
- Fix ExoPlayerImplInternal to attempt a restart in the
  case that the loading (but not yet prepared) period is
  removed, in absence of a playing period.
- Implement logic for finding the "next" period in the old
  timeline when attempting a retry.

Removing some of the nasty US<->MS conversions left as a
virtual TODO.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130659973
2016-08-31 15:25:18 +01:00
andrewlewis
eff82e920e Fix DASH multi-period transitions and manifest updates.
Period transitions can either be to new windows (in which case the default
position for the new window should be loaded) or to the next period of the
current window (in which case the the new period should be played from zero).
Fix the logic for calculating the new period index to load to implement this.

In processManifest, periodsById may contain periods that have been removed from
the manifest, which are still being used by the player (it releases periods on
receiving the source info refresh after processManifest returns). Ignore
periods that have been removed from the manifest when calling updateManifest.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130626441
2016-08-31 15:25:18 +01:00
olly
c009028dad Prepare for removal of period based ExoPlayer methods
- This change marks the methods that will be removed, and
  renames the Window methods to remove "Window" from their
  names.
- The Window methods need to be made to work (rather than
  throw exceptions) when the timeline isn't set. Once that
  gets done in a subsequent CL, the deprecated methods will
  be removed.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130612979
2016-08-31 15:25:17 +01:00
andrewlewis
1695e2ac48 Fix DASH period index calculation.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130612920
2016-08-31 15:25:17 +01:00
olly
b2a28a140c Move default start position into Window
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130610236
2016-08-31 15:25:17 +01:00
olly
3e0bae616f Minor ExoPlayerImplInternal cleanup
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130547431
2016-08-31 15:25:17 +01:00
cdrolle
cdb0ef13c8 Expose timeout values in DefaultDataSourceFactory.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130522990
2016-08-31 15:25:07 +01:00
olly
b35648eafb Add window based methods to ExoPlayer
- This change also enables seeking in live windows in the
  ExoPlayer demo app.
- The added playlist doesn't transition properly by itself,
  but for manual transitions it works correctly, and
  demonstrates seeking into a default position.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130515880
2016-08-31 15:25:07 +01:00
olly
fa84aa2123 Incremental step toward correct event propagation
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130509123
2016-08-31 15:25:07 +01:00
olly
317a8ef19b Simplify DashMediaSource and simulate manifest refreshes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130507478
2016-08-31 15:25:07 +01:00
andrewlewis
5296d5b198 Move isFinal flag to the Window.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130503190
2016-08-31 15:25:07 +01:00
eguven
671a15badf ExtractorMediaPeriod: Use URI sha1 hash as the DataSpec key.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130422264
2016-08-31 15:25:07 +01:00
olly
7bed85950e Fix/improve SmoothStreaming live window
- Add missing callback call.
- Allow injection of live edge offset.
- Refine calculation of live window size to correctly
  handle just-started streams where the DVR window
  hasn't yet grown to full size.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130412465
2016-08-31 15:25:06 +01:00
olly
e0773f705f Allow applications to specify the live edge offset.
Also allow use of suggestedPresentationDelay taken from the
manifest, and enable this by default.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130409924
2016-08-31 15:25:06 +01:00
andrewlewis
76f7fffb8d Clean up period identifiers.
SinglePeriodTimelines can all use the same identifier, as their identifier is
wrapped in a pair with the (fixed) source index when they are concatenated with
other sources' timelines.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130386297
2016-08-31 15:25:06 +01:00
olly
bb8cbbfbe8 Allow mapping of period->window
This is a 1:1 mapping. This change formalises the fact,
and makes it possible to easily query the mapping.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130375111
2016-08-31 15:25:06 +01:00
olly
e35f9addaf Remove playWhenReadyCommitted.
This was always a bit of a hack; for Play Movies. It may well
no longer be necessary, and if not I'd like to think of a nicer
or more general way of doing it. We can always bring it back
if needed.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130373433
2016-08-31 15:25:06 +01:00
olly
18a8655343 Javadoc cleanup: ExoPlayer#x -> #x
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130369177
2016-08-31 15:25:06 +01:00
eguven
096f85202e Use manifest URL sha1 hash as the content id.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130293908
2016-08-31 15:25:06 +01:00
andrewlewis
63ab601d75 Use consistent identifiers for extractor periods.
Also, fix clearing the timeline for source info changes.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130292700
2016-08-31 15:25:06 +01:00
andrewlewis
80227840f6 Post source info refreshes.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130289294
2016-08-31 15:25:06 +01:00
olly
1a909fd163 Change SeekWindow -> Window, and add window duration.
- This avoids the need to have to use the timeline to
  calculate a window duration, which can be awkward.
- Window now represents a window of availability with
  an isSeekable flag, rather than a window of
  seekability.
- Promoted Timeline and Window to top package; they're
  pretty important :).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130278509
2016-08-31 15:25:06 +01:00
andrewlewis
b120bea029 Don't reuse MediaPeriods.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130266483
2016-08-31 15:25:06 +01:00
olly
b5e41a903d Remove buffered position edge case.
It's no longer safe to convert END_OF_SOURCE -> duration on
the main therad, since the Timeline from which the duration
is obtained is posted to the main thread, where-as the
buffered position is passed by updating a volatile. Hence
an update to the latter might become visible to the main
thread before the corresponding Timeline.

This change moves the conversion to the playback thread.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130265893
2016-08-31 15:25:06 +01:00
andrewlewis
6e24372414 Use integers as identifiers for DASH periods.
This is in preparation for making it so that periods aren't reused.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130113382
2016-08-31 15:25:05 +01:00
olly
0ca81b1a4c Make sure TrackSelections refer to the correct TrackGroups
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130111048
2016-08-31 15:25:05 +01:00
aquilescanta
fc5df6312d Add support for multiple truns in a single traf
This kind of mp4 files has been seen in Hls+fMp4 samples.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130094845
2016-08-31 15:25:05 +01:00
olly
d04fde1a53 Distinguish dense vs sparse tracks for buffering purposes
- For audio/video, we should report the minimum largest
  queued timestamp. This ensures that buffering continues
  rather than stops in the case of bad sample interleaving.
- If there are "sparse" tracks then they should be ignored
  for this calculation, otherwise the buffered position can
  end up getting stuck at some small value (e.g. if there's
  a text track containing a single sample with a small
  timestamp).
- In the edge case that there are only "sparse" tracks, we
  probably want to take the maximum largest queued time
  instead.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130094266
2016-08-31 15:25:05 +01:00
eguven
c380ba2dc1 CacheSpan.isEOS (is end of stream) field shows whether the {@link CacheSpan} contains the end of the original stream.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130084365
2016-08-31 15:25:05 +01:00
olly
cc28aeadd8 Automated rollback
*** Reason for rollback ***

Referential equality was probably the right thing to do, since using .equals
breaks track selection in the case that a source exposes two or more tracks
whose formats are equal. We should fix the way overrides work instead.

*** Original change description ***

Fix multi-period transitions with track selection overrides

An override applies across periods provided they expose the
same track groups according to .equals, but the formats in
the override are then compared against the period's formats
according to ==. Use .equals consistently to fix.

***

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130083840
2016-08-31 15:24:50 +01:00
olly
1811b01b07 Report duration only via Timeline
It's error prone (and more code) to report two ways

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129999117
2016-08-31 13:25:21 +01:00
olly
d8ffafea65 Simplify Timeline classes a bit
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129993536
2016-08-31 13:24:44 +01:00
olly
5deb948d14 Bugfix: If no renderers enabled, we don't need buffer
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129987973
2016-08-31 13:23:30 +01:00
olly
f9005c7a78 Bugfix: Allow discontinuity on selectTracks
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129987709
2016-08-31 13:22:54 +01:00
olly
153c0aef2b Rework MediaPeriod track selection
This change allows MediaPeriod instances to replace
SampleStream instances when the selection isn't changing.
It also allows MediaPeriod instances to retain a
SampleStream but indicate that the renderer consuming
from it needs to be reset.

The change is used to fix the ref'd bug, and is used to
do the same thing in HLS without the need for the source
to report a discontinuity. Note that reporting discontinuity
could cause unnecessary failure when used as a child of
MergingMediaSource.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129971782
2016-08-31 13:22:15 +01:00
olly
9092c5665b Bump V1 to 1.5.10 + Fix incorrect Javadoc
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129966073
2016-08-31 13:21:38 +01:00
vigneshv
a2dfc62e08 MatroskaExtractor: Implement subsample encryption
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129908648
2016-08-31 13:20:50 +01:00
olly
f6fdcee9b3 Parse stz2 Atoms during mp4 extraction.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129892143
2016-08-10 20:16:05 +01:00
andrewlewis
e883b7c270 Clear the timeline on seeking if renderers are reading ahead.
If a renderer is reading ahead of the playing period, seeking within the
playing period would fail, because renderers would not be disabled but then try
to read from SampleStreams that have a released period.

Also, in the same circumstances, seeking within the reading period would fail,
because all renderers would be disabled, but their sample streams have already
been read. When they are reenabled they expect to see a format but don't
receive one.

In both cases, seeking can just clear the timeline. This only occurs in rare
circumstances when the player is reading ahead, so the cost of re-preparing
will not be incurred often, and allows the seeking logic to be simpler.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129891060
2016-08-10 20:15:30 +01:00
olly
932574a3cb Fix us/ms conversion error.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129871792
2016-08-10 20:14:10 +01:00
olly
91c7551cc3 Remove Timeline.UNKNOWN_PERIOD_COUNT
It's no longer used.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129870115
2016-08-10 20:13:37 +01:00
olly
d10c811bd8 Fix Tx3g decoding
Issue #1712

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129869936
2016-08-10 20:13:03 +01:00
olly
cd4cc1dc14 Add absolute start time to Timeline
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129869741
2016-08-10 20:12:29 +01:00
olly
4502a464dd Use ms for SeekWindow, for consistency with Timeline
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129868070
2016-08-10 20:11:56 +01:00
olly
c5a2f9b010 Expose seek window + start position for SmoothStreaming
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129867969
2016-08-10 20:11:23 +01:00
olly
2a15480102 Fix SmoothStreaming
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129851843
2016-08-10 20:10:49 +01:00
andrewlewis
23981a6fc4 Hide the shutter view when no video is being rendered.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129849825
2016-08-10 20:10:14 +01:00
olly
aab4e36d1a Don't reuse SampleStream instance in SingleSampleMediaSource
Referential equality is going to become important for detecting
whether a SampleStream has been replaced, so we need to create
new instances as we do elsewhere.

This also enables multiple SampleStreams to be provided for a
single TrackGroup, as is also true for DASH and SmoothStreaming.
It's forbidden to ask for multiple SampleStreams from a single
TrackGroup currently, but we may choose to relax that at some
point (and indicate whether it's allowed as a flag on each
TrackGroup).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129842336
2016-08-10 20:09:40 +01:00
olly
665c9fc14c Fix DASH period duration reporting
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129787235
2016-08-10 20:09:05 +01:00
andrewlewis
cdb706bac8 Fix period durations for single period and concatenated timelines.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129748865
2016-08-10 20:08:31 +01:00
andrewlewis
88bf1d0739 Expose the seekable window.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129747377
2016-08-10 20:07:56 +01:00
olly
39482f244b Fix broken Javadoc
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129733571
2016-08-10 20:07:20 +01:00
eguven
bd37216902 CacheSpan and Util.un/escapeFileName tests.
Fixed CacheSpan regexp for line breaks characters in key.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129631446
2016-08-10 20:06:06 +01:00
olly
b15ceba780 Enhance DefaultTrackSelector part 2
- Support specifying a preferred text language.
- Score based selection for text/audio/other tracks.
- Prefer default tracks to non-default ones.
- Allow overriding of base select*Track methods.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129626994
2016-08-10 20:05:31 +01:00
andrewlewis
95f4113456 Fix seeking into a different period that has been prepared.
When seekToPeriodPosition found that the seek destination period was already
prepared, it would not disable/re-enable renderers. This was fine if the
playing period wasn't changing, but in other cases the renderers would be left
reading the incorrect streams (and the underlying periods may have been
released).

Also, transition to the buffering state before re-enabling renderers, so that
the renderers are not started until leaving the buffering state.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129625632
2016-08-10 20:04:56 +01:00
olly
5783272444 Fix missing generics
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129624395
2016-08-10 20:04:19 +01:00
olly
a7cb98d991 Pass source to TransferListener events
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129622239
2016-08-10 20:03:30 +01:00
andrewlewis
3ef837341e Don't use OMX.qcom.audio.decoder.mp3 on LGE Optimus API 16.
Issue: #1714

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129600348
2016-08-08 11:53:30 +01:00
andrewlewis
c2c41558e5 Merge the internal timeline into ExoPlayerImplInternal.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129325922
2016-08-08 11:53:30 +01:00
olly
ee565300cb Enhance DefaultTrackSelector part 1
- Enforce viewport constraints for fixed video track selection.
- Select best fixed video track, not the first one.
- Better handling of video tracks with unknown dimensions.
- Mini bug fix.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129226593
2016-08-08 11:53:30 +01:00
olly
e26f72d454 Update @return to Returns where appropriate
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129201483
2016-08-08 11:16:33 +01:00
olly
490c5fea78 Further improve codec reconfiguration
- Only setup a codec to allow adaptation to other compatible
  formats in the stream. If something like the mimeType is
  changing adaptation will never be possible, so there's no
  point.
- Incorporate maxInputSize into the reconfiguration logic.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129088464
2016-08-08 11:15:44 +01:00
eguven
bd7c8fed1b While buffering check for errors even if renderes are ready.
On an edge case, player may get stuck when the renderers are ready but the buffer doesn't get full enough because of a fatal error in data source. An example state can be created by starting a live DASH stream and switching between normal and slow network connections.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129084824
2016-08-08 11:15:06 +01:00
olly
9a272068b4 Allow resetting of position when setting source
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129083335
2016-08-08 11:14:18 +01:00
olly
90ceade08f Add option to manually replace manifest URI
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129081694
2016-08-08 11:13:39 +01:00
olly
af8f1b8387 Fix multi-period transitions with track selection overrides
An override applies across periods provided they expose the
same track groups according to .equals, but the formats in
the override are then compared against the period's formats
according to ==. Use .equals consistently to fix.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129081591
2016-08-08 11:13:01 +01:00
olly
1bea48f249 Suppress noop format changes
For self-initializing segments, DefaultTrackOutput receives
a null format and then the actual format. This broke the
deduplication logic in InfoQueue.format, since there were
two transitions: FormatX->Null and Null->FormatX. This CL
allows deduplication to succeed in this case.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129081583
2016-08-08 11:12:22 +01:00
olly
02a79f8c51 Improve video canReconfigureCodec accuracy
The codec cannot be reconfigured if the format rotation
changes, or if the format dimensions exceed the current
decoder's configured maximum dimensions.

Issue #1707

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129004187
2016-08-08 11:10:59 +01:00
olly
17014e6264 Fix concat media source premature listener invocation
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128987095
2016-08-08 11:09:36 +01:00
andrewlewis
c1729b640c Allow seeking to a default position in a period.
When seeking to the default position in a period, the containing source may
actually return a position in another period. Multi-period live sources can do
this to seek the player to the live edge.

ExoPlayerImplInternal uses the same functionality when the playback position
reaches the end of a period to determine what period/position to play next.
This means that when playback transitions to a multi-period live source from
some other source (playing a concatenation of those two sources), the player
will play the live edge rather than the beginning of the earliest period.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128984355
2016-08-08 11:08:50 +01:00
olly
abd5653dc4 Add Util.getUtf8Bytes to avoid warnings
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128980489
2016-08-08 11:08:11 +01:00
olly
3604d589c1 Deduplication AVC/HEVC config parsing + other TODOs
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128979671
2016-08-08 11:07:29 +01:00
andrewlewis
8d122a101d Use new import ordering.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128967776
2016-08-08 11:06:48 +01:00
olly
846f8e1d46 Enable track blacklisting for DASH and SmoothStreaming
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128721068
2016-07-28 20:04:41 +01:00
olly
f66b90e34b Eliminate cruft from the demo apps's PlayerActivity
Useful functionality promoted to core library:

1. Management of SurfaceHolder.Callback lifecycle
   promoted to SimpleExoPlayer
2. Ability to determine whether audio/video tracks
   exist but are all unsupported promoted to
   MappingTrackSelector.TrackInfo
3. Read external storage permissions check promoted
   to Util
4. SubtitleView given ability to act directly as a
   TextRenderer.Output to remove layer of indirection
5. SubtitleView given ability to configure itself to
   user's platform wide caption styling
6. KeyCompatibleMediaController promoted to library's
   UI package.

Relocation of boring stuff:

1. ID3 frame logging moved to EventLogger.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128714230
2016-07-28 20:04:41 +01:00
olly
3501332dd3 Converge track selection to a single place.
This change merges the duties of FormatEvaluator into
TrackSelection classes, so that both the static and
dynamic parts of track selection are implemented in a
single place.

New feature: Demo app now allows you to enable random
adaptation in the track selection dialog.

Notes:

- It should be quite easy to allow application side
track blacklisting in addition to source side, as an
extension to this. That would effectively allow
applications to do seamless/deferred track selection
by creating a TrackSelection with all tracks enabled,
and then toggling the blacklist flags to select the
ones they want to be active.

- It should be trivial to implement format blacklisting
for DASH and SS as an extension to this. Will do in a
follow up CL.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128707517
2016-07-28 20:04:40 +01:00
eguven
2040615cc8 Support for added and removed DASH periods.
Logic and some code is copied from V1.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128706688
2016-07-28 20:04:40 +01:00
olly
2f20fd7c03 Simple language + Javadoc consistency
- Invoked --> Called
- Gets --> Returns
- "True if X. False otherwise." --> "Whether X."
- Removed some @returns where the Javadoc is in "Returns X" form

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128678638
2016-07-28 20:04:40 +01:00
andrewlewis
dfdb3bbc95 Count buffer ahead periods rather than using their indices.
This is in preparation for allowing MediaSources to skip over periods when one
period ends, which is needed for starting to play a multi-period live stream
that is concatenated on to another period at the live edge.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128674659
2016-07-28 20:04:40 +01:00
aquilescanta
5818409f4e Add viewport size filtering to the DefaultTrackSelector
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128590422
2016-07-28 20:04:40 +01:00
olly
242bdffc80 Fix a few warnings.
- Suppress spurious resource type warnings.
- Make AS happy by making private method non-final.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128584391
2016-07-28 20:04:40 +01:00
olly
ac59bde2be Fix up a bunch more Javadoc.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128565942
2016-07-28 20:04:40 +01:00
olly
3cb5862621 Only pass "throwing" part of Loader to MediaSource children
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128492613
2016-07-28 20:04:40 +01:00
cdrolle
47346c39c1 Fixed minor error that occurred when the manifest was updated.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128472884
2016-07-28 20:04:39 +01:00
olly
dae87b66dd MediaPeriod.getDurationUs must report duration when known.
As per the spec of MediaPeriod.getDurationUs, when a live
stream ends we need to start returning the correct final
duration.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128471183
2016-07-28 20:04:39 +01:00
olly
c5aa376bc4 Rename only part of FormatEvaluator/TrackSelection merge
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128471102
2016-07-28 20:04:39 +01:00
olly
bf0bdd8d7c Move SsMediaPeriod in its own file
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128465118
2016-07-28 20:04:39 +01:00
olly
1722019e0c Move SmoothStreaming manifest refresh to source level.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128461778
2016-07-28 20:04:39 +01:00
cdrolle
1d79c26b34 Added support for RawCC (i.e. out-of-band EIA-608)
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128397367
2016-07-28 20:04:31 +01:00
olly
75e2aee92e Fix janky post-track-selection behavior for HLS
We were forgetting to reset renderers during track
selections where muxed media is used.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128391816
2016-07-28 19:40:54 +01:00
olly
0b4284d060 Remove TrackGroup.adaptive flag.
It's only "needed" for HLS, and this requirement will
go away soon. It's safe to remove the flag ahead of
this because a TrackSelector can/should not attempt to
adapt between multiple audio/text tracks.

Also remove unnecessary restrictions on TrackGroups
being non-empty and only of known types.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128376601
2016-07-28 19:40:15 +01:00
andrewlewis
d657360341 Expose period information from MediaSources.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128357449
2016-07-28 19:39:07 +01:00
andrewlewis
2a70a58f0a Fix non-DRM playback.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128353039
2016-07-28 19:38:30 +01:00
olly
eca3edb940 Small cleanup of Util constants.
- Remove null checks (never happens).
- Use "const".equals(Util.CONST) where possible.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128351654
2016-07-28 19:37:48 +01:00
mishragaurav
1624135c20 Parse widevine tag in manifest for secure decryption.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128345063
2016-07-28 19:37:12 +01:00
olly
abcd10513a Do TODO in HlsChunkSource
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128190311
2016-07-22 22:41:36 +01:00
olly
ba0a4235a0 Consistent Javadoc for text package
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128160177
2016-07-22 22:41:36 +01:00
olly
f0b73e5d5b Consistent Javadoc for upstream package
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128159118
2016-07-22 22:41:36 +01:00
olly
692d756ee6 Simplification: Move common logic to TrackSelection
- TrackSelection now exposes the selected formats, ordered
  by decreasing bandwidth. This removes the need for DASH,
  SS and HLS to do the sorting individually.
- The change also removes the need to reconstruct TrackSelection
  instances with a different group index in various places
  (e.g. MergingMediaPeriod).
- This is also a step toward potentially packaging the
  FormatEvaluator inside of the TrackSelection (TBD).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128159064
2016-07-22 22:41:36 +01:00
olly
6f1b24f10f Add some missing Javadoc from the drm package
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128085240
2016-07-22 22:41:36 +01:00
eguven
0909446133 Don't let renderer input buffer get too big if codec not available.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128082468
2016-07-22 22:41:36 +01:00
aquilescanta
68156ac7a4 Ignore sequence numbers when switching variants in HLS
According to the spec, there is no mandatory relation between segments'
sequence numbers of different variants. This CL ignores sequence numbers
when switching variants:

* In vod, the switching playback position is obtained by adding the
    duration of previous segments.
* In live playback this is not possible. It is assumed that the
    different live media playlists do not drift apart too much, so
    the playback position is obtained by subtracting the duration
    in reverse order.

In later CLs, the described mechanisms will become the fallback methods
by replacing them with the use of EXT-X-PROGRAM-DATE-TIME information
or more reliable sources.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128072663
2016-07-22 22:41:36 +01:00
aquilescanta
98c5b2b8d0 Treat empty stss boxes as absent
ISSUE: #1681

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128071668
2016-07-22 22:41:35 +01:00
cdrolle
5a7b046462 Re-added call to schedule manifest refreshes.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127951757
2016-07-22 22:41:35 +01:00
olly
48f666a0e3 Merge HlsParserUtil into HlsPlaylistParser
It's the only place that uses it.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127927164
2016-07-22 22:41:35 +01:00
olly
722e05b8ba Some brevity/consistency renaming in source package
SmoothStreaming -> Ss
MediaPresentationDescription -> DashManifest
DashSingleSegmentIndex -> SingleSegmentIndex

Moved DASH and Ss manifest classes to matching
manifest packages for consistency. For Hls the
package is called playlist still, since that's
what they're widely known as.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127925961
2016-07-22 22:41:35 +01:00
olly
fc457e4c1b Move default DRM callback implementation to library
This also removes direct use of HttpURLConnection and
allows use of any HttpDataSource for license requests,
which means those using OkHttp can finally use the
same network stack for license requests as they're using
for everything else, without having to implement their
own callback.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127841045
2016-07-22 22:41:35 +01:00
andrewlewis
2ed55d97d1 Work around broken VP8 decoders.
Issue: #548

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127821150
2016-07-22 22:41:35 +01:00
olly
9304cb3f8f Plumb key-rotation and drm-playlist support
With this change, MediaCodecRenderer acquires a session
from its DrmSessionManager whenever the DrmInitData in
the format changes. The DrmSessionManager is permitted
to return the same session if it can be re-used.

This plumbing adds support for:

1. Key-rotation, in the case that a key-rotation-aware
   DrmSessionManager is used. Such an implementation will
   return the same DrmSession for every aquisition, but
   will be making use of multiple MediaDrm instances within
   that session to enable the rotation.

2. Playlists with mixed clear and protected content. One
   final piece to this will be to have each MediaPeriod
   provide its own license URL. We could also allow each
   MediaPeriod to specify the DRM UUID, but switching from
   PlayReady to Widevine in a playlist seems like quite a
   hypothetical thing.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127816046
2016-07-22 22:41:35 +01:00
olly
ba9a610ac2 Put additional Javadoc files under src
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127811486
2016-07-22 22:41:34 +01:00
cushon
0022487746 Avoid "unnecessary boolean expression" warning
This is a no-op change to avoid an error-prone unnecessary
boolean expression warning.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127787709
2016-07-22 22:40:59 +01:00
olly
6c2a967763 BandwidthMeter shouldn't extend TransferListener
There may be other ways to estimate bandwidth that don't
require listening to our own transfers.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127741651
2016-07-22 22:21:54 +01:00
olly
74b43e26bd Allow injection of custom ChunkSources
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127737169
2016-07-22 22:21:06 +01:00
olly
5360ddc519 Allow injection of custom FormatEvaluators
This was possible previously, but now we support things
like multi-period DASH we need to do the injection in
the form of factories rather than concrete instances.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127735816
2016-07-22 22:20:32 +01:00
olly
e7d95aff34 Update Renderer documentation
- Cleaned up documentation
- Removed getIndex from Renderer interface
- Renamed reset to be positionReset

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127731006
2016-07-22 22:19:56 +01:00
eguven
ff914afd7f Propagate MediaSource loading errors to the player.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127551577
2016-07-22 22:19:21 +01:00
olly
98a0c5f05c Fix restoring of position.
This change restores ExoPlayer to its previous behaviour.
I think we'll want a "resetPosition" boolean parameter on
setMediaSource at some point, but no need to add it right
now. Note that this would not always reset to the start
of the source. For a live playback it will reset to the
desired position (normally somewhere slightly behind the
live edge).

Issue: #1667
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127549700
2016-07-15 18:21:40 +01:00
andrewlewis
15631e12a8 Fix seeking to a non-loaded period.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127536151
2016-07-15 18:20:31 +01:00
olly
8a36ce697e Add Renderer.getCapabilities
Renderer no longer extends RendererCapabilities after this
change. Capabilities are instead accessed via a getter.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127532634
2016-07-15 18:19:57 +01:00
olly
dcc1ac56df Make Renderer an interface
In V1 we received complaints that Renderer was too locked down.
In particular, it wasn't possible to implement a Renderer that
wrapped another Renderer, since most of the methods were package
private and final (e.g. enable).

This change defines Renderer as a proper interface, removing
this limitation. A method-reordering-only change will follow
this one, to get things into a nice consistent/sane order in
each of the Renderer classes.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127527995
2016-07-15 18:19:23 +01:00
olly
7c551081f5 Only pass RendererCapabilities to TrackSelectors
We should only give a TrackSelector access to what it
needs, not the whole Renderer. This is particular true
if [] happens, since more Renderer methods
will become publicly visible.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127526473
2016-07-15 18:18:50 +01:00
aquilescanta
97d9c94c1a Fix a typo and variable declaration order in Period
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127441130
2016-07-15 18:18:11 +01:00
olly
553023e63f Fix DASH periods mis-reporting their duration + cleanup
DashMediaPeriod.releasePeriod resets duration to 0, but
instances are currently being re-used through multiple
prepare/release cycles. Hence the duration needs to be
retained. This change fixes this issue, and also makes
variables final in DashMediaPeriod where possible.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127440080
2016-07-15 18:17:36 +01:00
eguven
bc77c3eb82 Call MediaSource prepare/release methods in ExoPlayerImplInternal.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127436600
2016-07-15 18:16:55 +01:00
olly
2d8b51a709 Convert extractor factory classes to static final objects
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127415273
2016-07-15 18:16:18 +01:00
olly
f758082d40 Big (and hopefully near-final) rename.
1. Rename "extensions" package to "decoder". It's used by both
   text and (should be used by) metadata, so it's no longer just
   for extensions.
2. Move Buffer objects move into the decoder package.
3. Rename SubtitleParser and MetadataParser to SubtitleDecoder
   and MetadataDecoder respectively, since they extend Decoder.
   Ditto for all subclasses.
4. Subtitle and Metadata decoders now throw their own exception
   types rather than ParserException.
5. Move MediaCodec classes into a mediacodec package, with the
   exception of the concrete audio and video renderers.
6. Create an audio package to hold the two audio renderer classes
   plus related util classes.
7. Create a video package to hold the one video renderer class
   plus related util classes.

After this change the following nice properties hold:

1. Want a video renderer? Look in the video package. Ditto for
   audio, text and metadata.
2. All TrackRenderer implementations use a decoder of some kind
   to decode buffers received from the source, so we have
   consistent terminology there.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127326805
2016-07-15 18:14:55 +01:00
olly
4f718363b5 Remove BandwidthMeter from SimpleExoPlayer
The BandwidthMeter should only be used by MediaSource
instances and the objects they reference, so there's
really no reason for the player to need to know about it.

This change sacrifices DebugTextViewHelper showing the
estimated bandwidth, but I think that's a price worth
paying.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127316755
2016-07-15 18:14:14 +01:00
eguven
4a5bb55920 Split DashMediaSource MediaPeriod implementation into DashMediaPeriod and support multiple periods.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127315877
2016-07-15 18:13:33 +01:00
aquilescanta
a0c1595725 Add support for CEA608 in MP4 and fMP4
Issue: #1658
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127312721
2016-07-15 18:12:57 +01:00
[]inger
e4a3483d6f Propagate audioSessionId.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127300225
2016-07-15 18:12:20 +01:00
andrewlewis
11e2e0e640 Release Extractors on the loader's thread.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127294338
2016-07-15 18:11:38 +01:00
olly
ea0cfdeeb1 Remove dead code from SmoothStreamingChunkSource
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127232159
2016-07-15 18:10:29 +01:00
andrewlewis
acef34a6f3 Set the output buffer position/limit only if it's non-null.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127196797
2016-07-15 18:09:11 +01:00
olly
d4d1640808 Use extension rather than composition for track selection
It doesn't look like TrackSelectionPolicy is going to be
useful other than with DefaultTrackSelector, and it's kinda
confusing dealing with both "selector" and "policy"
terminology. This change does the following:

DefaultTrackSelector -> selector.MappingTrackSelector
DefaultTrackSelectionPolicy -> selector.DefaultTrackSelector
TrackSelectionPolicy -> [deleted]
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127196326
2016-07-15 18:08:36 +01:00
olly
67be677ddf Move more classes under source package
- Chunk package is only useful to source packages.
- BehindLiveWindowException is a source exception.
- SequenceableLoader is related to sources.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127195307
2016-07-15 18:08:00 +01:00
andrewlewis
e4b08117fc Use adaptation workaround on N7v1.
Also, only enable the workaround when the resolution isn't changing but the
format is changing.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127192637
2016-07-15 18:07:24 +01:00
olly
de27b2e043 TrackStream -> source.SampleStream
Also addded result constants to C to remove the dependency
on TrackStream from extractor.DefaultTrackOutput.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127192488
2016-07-15 18:06:48 +01:00
olly
be9d77c59c Add new UI package.
There aren't really enough classes to justify it right
now, but if we're going to do a VideoView equivalent and
sensible player controls at some point, it's worth making
now to get classes into the correct place.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127184374
2016-07-15 18:06:12 +01:00
andrewlewis
c936aee412 Fix condition for working around broken decoders.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127102633
2016-07-15 18:05:02 +01:00
olly
bcca373f5b Rename DecoderInfo -> MediaCodecDecoderInfo
All other MediaCodec specific classes are prefixed MediaCodec,
and we now have other decoders that aren't not related to
MediaCodec.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127093330
2016-07-15 18:04:19 +01:00
andrewlewis
fdf26d6a1f Work around volantis adaptation issue.
The volantis H.264/AVC decoder could get stuck when adapting between certain
stream formats where there was no change in resolution.

Queue a small Baseline profile SPS, PPS and IDR slice during adaptation on this
device, to force reallocation of reference frames.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127091330
2016-07-15 18:03:45 +01:00
eguven
464869cf57 Fix DASH duration.
As multi period DASH isn't supported yet use the duration of the first period only.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127086808
2016-07-15 18:03:09 +01:00
olly
4e86c55361 Introduce source package for sources
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127073630
2016-07-15 18:02:31 +01:00
olly
a89bf3a477 Allow merging of both periods and sources.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127073129
2016-07-15 18:01:15 +01:00
olly
9558a4cb99 Rename TrackRenderer -> Renderer
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127065122
2016-07-15 18:00:32 +01:00
olly
8e0354c0a6 Finalize class naming
SampleSourceProvider -> MediaSource
SampleSource -> MediaPeriod
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126914964
2016-07-15 17:59:52 +01:00
olly
c9ec7beb92 Add streamType/capabilities for extension audio renderers
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126913487
2016-07-15 17:59:12 +01:00
aquilescanta
a845f1c4cc Add soft video constrains to DefaultTrackSelectionPolicy
Also make filterHdVideoTracks override setMaxVideoSize.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126904080
2016-07-15 17:58:36 +01:00
olly
08bd4546ca Blacklist mp3 decoder on HTC One S
Issue: #377
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126901901
2016-07-15 17:57:46 +01:00