Commit graph

1854 commits

Author SHA1 Message Date
olly
7bbe213e57 Add option to select track that exceeds renderer capabilities
Leaving disabled by default for now, but we may want to consider
enabling it by default. Note that in V1 for ExtractorSampleSource
the behaviour was equivalent to this option being enabled, since
we didn't perform capabilities checks. For DASH/SS/HLS the V1
behaviour was equivalent to this option being disabled.

The type in PlayerActivity has been changed just to make it
easier to add a line that calls setParameters.

Issue: #2034
Issue: #2007
Issue: #2078

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140477568
2016-11-30 21:58:13 +00:00
cdrolle
2753664c6b Fixed an error in the date and time parser's handling of time zones.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140400905
2016-11-30 21:57:29 +00:00
olly
73220be19b drainOutputBuffer return false on EOS
I can't see how this would ever make a difference, but there's no
point in returning true. Either we've really reached EOS (in which
case outputStreamEnded will be true and the next drainOutputBuffer
will be turned into a no-op) or we've re-initialized the codec (in
which case there wont be anything to drain since we wont have fed
anything to the codec yet).

This change should also prevent the hypothetical NPE described in
issue #2096, although we're unsure how that NPE would occur unless
MediaCodecRenderer has been extended in an unusual way.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140338581
2016-11-30 21:55:25 +00:00
aquilescanta
c3c176d93c Move HLS extractor construction to HlsMediaChunk
This allows ID3 PRIV timestamp extraction and Extractor Sniffing.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140209568
2016-11-25 20:18:32 +00:00
olly
2e3ffe1e94 Assume support for vertical video if rotated resolution supported
Issue: #2034

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140209306
2016-11-25 20:18:32 +00:00
olly
ee9b7be2fa Fix issue with seeking before timeline available
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140204054
2016-11-25 20:18:32 +00:00
andrewlewis
76c58a34d3 Clarify createPeriod javadoc.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140202942
2016-11-25 20:18:32 +00:00
aquilescanta
9c612f94c5 Chose timestamp adjustment master based on track selection
Select the timestamp master depending on track availability. If
a variant is being loaded, then that is the timestmap master.
Otherwise, if an audio track is being loaded, then the responsible
chunk source is the timestmap master. If no variant or audio
rendition is enabled, then a subtitle chunk source is selected as
timestamp master. This CL will become specially relevant once
ID3 PRIV timestamps are used for audio renditions.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140201385
2016-11-25 20:18:32 +00:00
olly
ce9ec79e59 Make Timeline always non-null from ExoPlayer
Note that we still have null timelines in ExoPlayerImplInternal.
This is deliberate; and is likely necessary to distinguish between
the no-timeline-yet and timeline-is-empty cases (we want to try
and process a pending seek for the latter, but not the former).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140200980
2016-11-25 20:18:32 +00:00
aquilescanta
97a23ce572 Fix main thread playlist refreshes in HlsPlaylistTracker
The refresh handler in HlsPlaylistTracker was being instantiated in the
same thread as the MediaSource (i.e. Main thread).

Issue:#2108

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140197553
2016-11-25 20:18:32 +00:00
olly
894ae1a310 Improve SimpleExoPlayer flexibility
- Allow extension and overriding of renderer creation.
  Several developers have asked for this, so that they
  can use their own renderers (typically extensions to
  the core ones) without losing the ability to use
  SimpleExoPlayer.
- Add option to not attempt extension renderer creation,
  for efficiency.
- Align build variants for internal and external demo
  apps. This is slightly unfortunate, but convergence
  seems necessary for useExtensionRenderers.
- Fix DASH playback tests to use the debug video
  renderer.

Issue #2102

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140140915
2016-11-25 20:18:32 +00:00
olly
62bdb1b93a Fix failure when a seek is performed with no enabled tracks
This issue affects ExtractorMediaSource only. We shouldn't
start loading in the case that we're prepared and have no
enabled tracks, since there's nothing that we need to load.
This was causing an assertion failure in startLoading.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140030650
2016-11-25 20:18:32 +00:00
aquilescanta
a7dff14d3c Keep TS packets with no continuity counter increase and no payload
This behavior is defined in ISO-13818-1, section 2.4.3.3(continuity_counter).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140029161
2016-11-25 20:18:32 +00:00
olly
eb62d00ea4 ExoPlayerImplInternal cleanup
- Fix handling of the currently playing period being
  removed. This didn't do the right thing at all.
- Relax rule on seekToPeriodPosition re-using an
  existing holder.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140014791
2016-11-25 20:18:32 +00:00
olly
b3726cf761 Support DASH multi-segment fetches
Note that multi-segment fetching is only possible in the
case that segments in a representation are defined to have
the same Uri and adjacent ranges (this is very rarely true
for live streams, but is quite often true for on-demand).
In the case that merging is requested but not possible,
the implementation will request one at a time.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140012443
2016-11-25 20:18:32 +00:00
eguven
b29ff0cf51 Make CacheDataSink use ReusableBufferedOutputStream
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=140010664
2016-11-25 20:18:32 +00:00
eguven
fa3d129b14 Fix some of the issues pointed by android lint tool
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139915885
2016-11-25 20:18:32 +00:00
aquilescanta
6101450302 Merge initialization chunk into HlsMediaChunk
This will allow creating the extractor in the HlsMediaChunk.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139915713
2016-11-25 20:18:32 +00:00
aquilescanta
9ac7f64c84 Fix search to end of stream in HLS
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139905590
2016-11-25 20:18:32 +00:00
andrewlewis
77715fbfbe Fix some analysis warnings.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139901449
2016-11-25 20:18:32 +00:00
eguven
e84fa5835d Use ReusableBufferedOutputStream for cache index file write operation
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139889957
2016-11-25 20:18:32 +00:00
olly
42fadfe083 Allow SsMediaSource to take an optional SsManifest
Also allow custom SsManifestParser injection.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139813660
2016-11-25 20:18:32 +00:00
olly
81ce6bba7a Allow DashMediaSource to take an optional DashManifest
Also allow custom DashManifestParser injection, to
support parsing of custom elements and attributes that
service providers may wish to include in their manifests
(e.g. #2058).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139813108
2016-11-25 20:18:32 +00:00
olly
4f3ab7b22d ExoPlayerImplInternal: Some more minor cleanup
- This should be a no-op change
- Inline attemptRestart
- Clean up processing of pending seeks

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139804630
2016-11-21 19:15:13 +00:00
olly
9d7d8adc9c Allow changing of video scaling mode
Issue #2016

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139803888
2016-11-21 19:14:39 +00:00
andrewlewis
ae0ac55b8d Add support for resetting the AudioTrack stream type.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139797714
2016-11-21 19:13:34 +00:00
olly
060ca4aecc ExoPlayerImplInternal cleanup
- Make handleSourceInfoRefreshed clearer.
- Remove bufferAheadPeriodCount. Seems error prone.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139774580
2016-11-21 19:13:02 +00:00
dsantoro
adc9dd1c75 Add null checks to closeQuietly calls.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139738429
2016-11-21 19:12:26 +00:00
ccwu
6dbfdecbe0 Let the mp4 extractor support "camm" metadata tracks.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139626848
2016-11-21 19:11:43 +00:00
olly
4a30dff524 Fix NPE in TextTrackRenderer
Issue: #2081

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139566990
2016-11-18 12:54:36 +00:00
aquilescanta
cafe603694 Allow regressing media sequence numbers in HLS media playlists
This is techically not allowed by the spec[1] but might still occur in
certain scenarios. New playlists with older media sequence numbers are
ignored.

[1]: HLS draft version 20, section-6.2.1

Issue:#2059

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139564889
2016-11-18 12:54:03 +00:00
olly
d890c2f48f Fix infinite loop -> ANR at end of HLS playbacks
continueLoading shouldn't return true unless it's done
something. Always returning true if endOfStream was
causing CompositeSequenceableLoader.continueLoading to
loop forever.

It looks like the same issue exists in ChunkSampleStream
as well, although I can't seem to provoke DASH or SS
playbacks into doing anything bad as a result.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139559834
2016-11-18 12:53:24 +00:00
eguven
35054f8f7c Added ReusableBufferedOutputStream.
ReusableBufferedOutputStream is a subclass of BufferedOutputStream with a reset(OutputStream) that allows an instance to be re-used with another underlying output stream.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139505999
2016-11-18 12:52:46 +00:00
olly
f57434006f Fix potential NPE in ExoPlayerImplInternal
I'll have a more thorough refactor of some of this class
fairly soon!

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139451693
2016-11-18 12:51:22 +00:00
olly
61c9c16954 Make sure we report video size after Surface is set
Issue: #2077

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139451511
2016-11-18 12:50:41 +00:00
eguven
051be5c588 Use buffers to speed up cache index file io.
Use BufferedOutputStream and BufferedInputStream while writing / reading.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139446039
2016-11-18 12:50:04 +00:00
aquilescanta
a8a2ef4a24 Blacklist HLS media playlists that return 4xx error codes
Issue:#87

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139443476
2016-11-18 12:49:24 +00:00
yutingtseng
2add12d5f7 Update CacheDataSink to optionally use a BufferedOutputStream for writing
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139381958
2016-11-18 12:48:41 +00:00
cblay
92d34cd877 Add flag to CacheDataSource to disable caching unset length requests.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139377417
2016-11-18 12:48:09 +00:00
aquilescanta
d6eb9cb79f Allow playlists of different size in HlsPlaylistTracker playlist adjustment
Issue:#2059

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139331670
2016-11-18 12:47:36 +00:00
andrewlewis
0effffb89f Add support for reading .mp3 boxes in stsd.
This is used by Quicktime for MP3 tracks.

Issue: #2066

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139209989
2016-11-18 12:47:02 +00:00
aquilescanta
21e3361dfe Move 3 private methods to the end of the class
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139204000
2016-11-18 12:46:31 +00:00
andrewlewis
348b58021d Move underrun detection into AudioTrack.
This removes duplication from SimpleDecoderAudioRenderer and
MediaCodecAudioRenderer.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=139187254
2016-11-18 12:45:58 +00:00
andrewlewis
bcc6c9ef43 Fix a typo.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138871293
2016-11-18 12:44:21 +00:00
eguven
92a98d1ce2 Encrypt SimpleCache index file.
Clean up AtomicFile and make it return a custom FileOutputStream
for writing which handles IOException automatically during write
operations.

It also syncs the file descriptor and deletes the backup file on
close() call. This fixes the order of flush and close operations
when the fileoutputstream is wrapped by another OutputStream.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138779187
2016-11-10 21:15:35 +00:00
cblay
16ddc84d93 Make PriorityTaskManager constructor public.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138759164
2016-11-10 21:15:35 +00:00
olly
8cc7dfda7d Fix threading issues between ExoPlayerImpl/ExoPlayerImplInternal
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138758739
2016-11-10 21:15:35 +00:00
olly
7ac1cab2d5 Set language to null unless explicitly defined as "und" in container
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138758504
2016-11-10 21:15:35 +00:00
olly
2620045b0d Add debug logging when codec support checks fail
Issue: #2034

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138698239
2016-11-10 21:15:35 +00:00
olly
aefc5165fd Fix cache upgrade
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138687623
2016-11-10 21:15:28 +00:00
aquilescanta
b1fe274df3 Replace java.text.ParseException for ExoPlayer's ParserException
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138628300
2016-11-10 21:15:20 +00:00
andrewlewis
8236efe6a5 Provide an overlay FrameLayout in SimpleExoPlayerView.
This can be used by the app for showing arbitrary UI on top of the player (for
example, UI elements associated with an ad).

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138610733
2016-11-10 21:15:20 +00:00
olly
d5cbb101ed SimpleExoPlayerView: Remove a bit of dead code
These variables are never read, since the underlying control
view reads them directly from the attrs.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138528246
2016-11-10 21:15:20 +00:00
olly
7b0effc2d0 Project default start pos to fix VOD->Live transitions
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138493584
2016-11-10 21:15:20 +00:00
olly
89ad5e6db3 Fix ExoPlayerImplInternal timestamp conversions
This fixes VOD->Live transitions, with the caveat that
the Live portion still ends up further behind the live
edge than intended. This will be fixed in a following
change.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138407066
2016-11-10 21:15:20 +00:00
olly
3c8db3b9cb Pass Timeline back with seek position
This change fixes the race condition where the internal
timeline is different to the externally visible timeline
when a seek is performed. We now resolve the seek position
using the externally visible timeline, then adjust the
period index as required for the internal timeline. If the
period is missing we follow similar logic for the existing
case where the playing period is removed.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138402076
2016-11-10 21:15:20 +00:00
cdrolle
a4935a9ba0 Added support for multiple RawCC (CEA-608/CEA-708) tracks in DASH.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138392065
2016-11-10 21:14:57 +00:00
aquilescanta
0354ef24d4 Add support for splice info section reading in TS
This CL adds a SpliceInfoDecoder for the most common SCTE35 commands for splcing.
So far, it only includes TransportStreams, but porting it to HLS and DASH should be
fairly easy.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138389807
2016-11-10 21:14:57 +00:00
hoangtc
4cd8c77053 Add layer of indirection for DRM.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138383979
2016-11-10 21:14:29 +00:00
eguven
a6e2770116 Upgrade SimpleCacheSpan files during createCacheEntry call.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138379386
2016-11-10 21:14:29 +00:00
eguven
ff77d1e72c Add index file to hold header information for cached content.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138373878
2016-11-10 21:14:29 +00:00
aquilescanta
992cfdecc2 Feed timestamps from loaded chunks back to the playlist tracker
This is the first step towards allowing discontinuities in the
playlist tracking. Also changed durationSecs for durationUs in
MediaPlaylist.Segment.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138207732
2016-11-10 21:14:29 +00:00
olly
a5a2bc89f4 Push window->period seekTo conversions into ExoPlayerImplInternal
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138185910
2016-11-10 21:14:29 +00:00
olly
3e2cb9f89a Fix incorrect renderer reset enable position
handlePeriodPrepared
->setPlayingPeriodHolder
->enableRenderers

passes rendererPositionUs to renderer.enable(), but
this value is not set correctly.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138176114
2016-11-10 21:14:29 +00:00
zhihuichen
e2081f40fb move baseUrl from segments to representations: V2
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138136090
2016-11-10 21:14:29 +00:00
olly
6c7ead5d0c Document all the ways our new UI components can be customised.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138082864
2016-11-10 21:14:28 +00:00
cdrolle
d9421f4fb9 Fixed issue when VOD-style period is present in a dynamic manifest
A VOD-style period in a dynamic manifest would result in a NullPointerException.
Also fix another issue in which an unrecognized mime type would also result in
NullPointerException.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138075137
2016-11-10 21:13:28 +00:00
aquilescanta
aaf38adc26 Add support for HLS live seeking
In order to expose the live window, it is necessary (unlike before) to refresh
the live playlists being played periodically so as to know where the user can
seek to. For this, the HlsPlaylistTracker is added, which is basically a map
from HlsUrl's to playlist. One of the playlists involved in the playback will
be chosen to define the live window. The playlist tracker it periodically.
The rest of the playilst will be loaded lazily. N.B: This means that for VOD,
playlists are not refreshed at all. There are three important features missing
in this CL(that will be added in later CLs):

* Blacklisting HlsUrls that point to resources that return 4xx response codes.
    As per [Internal: b/18948961].
* Allow loaded chunks to feed timestamps back to the tracker, to fix any
    drifting in live playlists.
* Dinamically choose the HlsUrl that points to the playlist that defines the
    live window.

Other features:
--------------

The tracker can also be used for keeping track of discontinuities. In the case
of single variant playlists, this is particularly useful. Might also work if
there is a that the live playlists are aligned (but this is more like working
around the issue, than actually solving it). For this, see [Internal: b/32166568]
and [Internal: b/28985320].

Issue:#87

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=138054302
2016-11-10 20:54:03 +00:00
olly
7b3690a0a6 Fix onLoad* event media times for multi-period case
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137932100
2016-11-10 20:53:20 +00:00
olly
488c2d8270 Fixes for Issue #1962
- Use A/V tracks only for buffering position when available
  in ExtractorMediaPeriod.
- Fix layering of exo_simple_player_view so that subtitles
  are above album art. The test stream provided has both.
- Make album art in SimpleExoPlayer view respect the resize
  mode, like we do for video.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137698473
2016-10-31 19:49:54 +00:00
aquilescanta
daf7b948a1 Fix buffering state when selecting VTT track with no cues
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137697023
2016-10-31 19:49:54 +00:00
Oliver Woodman
c4b4e84579 Add artwork support to SimpleExoPlayerView + misc improvements 2016-10-27 12:47:26 +01:00
Oliver Woodman
8a89abcbf1 Merge branch 'dev-v2-id3' into dev-v2 2016-10-27 12:37:22 +01:00
olly
2c54363204 Report track groups and selections through ExoPlayer
TrackSelector no longer has a listener. Instead, tracks
change events are reported through ExoPlayer.EventListener.
Applications interested in retrieving the selection info
should retrieve it directly from the TrackSelector by
calling an exposed getter.

Pretty sure the ref'd issue is fixed as a side effect of
this change.

Issue: #1942

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137183073
2016-10-27 12:27:55 +01:00
aquilescanta
0b8e9754ca Pass initialization parameters to section readers
Unlike with PesReaders, sections don't have a standard way
of providing timestmaps or even generating tracks. We need
to pass this information so that readers decide what to do
with it.

Issue:#726

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137162494
2016-10-27 12:27:21 +01:00
aquilescanta
1809836c21 Provide a method for creating a reader for a particular PID
This allows the user to create section readers(usually) for reserved pids,
like SDT, EIT, CAT, etc.

Issue:#726

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137150853
2016-10-27 12:26:32 +01:00
[]inger
8b3025d450 Make control view layout resource customizable.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137145209
2016-10-27 12:25:52 +01:00
andrewlewis
ba6368a07a Don't try to access the caption manager when in edit mode.
Issue: #1991

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137131819
2016-10-27 12:25:10 +01:00
Oliver Woodman
8caaf0b5d9 Big cleanup of mp4 metadata extraction 2016-10-26 23:45:50 +01:00
Oliver Woodman
1b39d21ed4 Fix indentation and missing javadoc 2016-10-24 19:22:41 +01:00
Oliver Woodman
6dbce88102 Merge branch 'dev-v2-id3' of persistent-https://github.com/google/ExoPlayer into dev-v2-id3 2016-10-24 18:50:35 +01:00
Oliver Woodman
929620c189 Merge branch 'dev-v2' into dev-v2-id3 2016-10-24 18:49:43 +01:00
olly
99503e6e3a Fix playback of OGG with only a single payload page
Issue: #1976

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137044583
2016-10-24 18:43:49 +01:00
olly
5c83c28a1f Blacklist another non-OMX decoder
Issue: #1986

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137035576
2016-10-24 18:43:15 +01:00
olly
819ebf703a Assign track type TEXT for CEA708
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137011920
2016-10-24 18:42:02 +01:00
Oliver Woodman
00f9fc6728 Don't propagate GaplessInfoHolder when parsing mp4 metadata 2016-10-24 18:01:48 +01:00
aquilescanta
6e69b98517 Avoid throwing an exception when an ID3 header is not found
Issue:#1966

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136836332
2016-10-24 11:44:49 +01:00
aquilescanta
eeb37d73e7 Create the SectionPayloadReader interface
SectionPayloadReaders are provided to a SectionReader to
get whole sections(crc checked). This allows the injection
of custom section readers. E.G: SCTE35 messages.

Issue:#726

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136816612
2016-10-24 11:44:49 +01:00
andrewlewis
a0fe258e8d Fix/suppress some analysis warnings.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136710546
2016-10-24 11:44:49 +01:00
aquilescanta
862552c2ed Convert ElementaryStreamReaderFactory into TsPayloadReaderFactory
In this CL:

* PesReader moves out of TsExtractor and becomes public.
* ElementaryStreamReaderFactory becomes TsPayloadReaderFactory and is
    moved to TsPayloadReader.
* The TsPayloadReaderFactory is in charge of wrapping any
    ElementaryStreamReaders with a PesReader.

Incoming:
* Extract SectionReader supperclass (analog to PesReader, but for
    sections) from Pat and Pmt readers.
* Add a ScteReader, wrapped by a section reader, and include it in
    the DefaultTsPayloadReaderFactory.

Issue:#726

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136707706
2016-10-24 11:44:49 +01:00
vitekn
b2222f8cb7 Null pointer exception fixed
pesPayloadReader can be null here because DefaultStreamReader.init() can return null on unknown streamId. If we have a junk transport stream in our content an exception will be thrown.
2016-10-21 13:07:08 +03:00
ojw28
6673483aca Merge pull request #1971 from google/dev-v2
Update dev-v2-id3
2016-10-20 12:43:38 +01:00
olly
f56b05f0d7 Bump version to r2.0.4
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136697697
2016-10-20 12:20:10 +01:00
aquilescanta
bebbf29a78 Fix NPE when trying to play H265 in Ts files
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136607848
2016-10-20 12:20:10 +01:00
Oliver Woodman
3e3248d712 Yet more misc ID3 improvements 2016-10-19 17:18:17 +01:00
olly
586e6257cd Add explicit TargetApi annotation to remove lint error
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136597149
2016-10-19 17:00:33 +01:00
olly
3a5cb43541 Fix use of API level 19 method
Issue: #1965

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136595233
2016-10-19 17:00:33 +01:00
olly
aa1002a0d6 Rollback "Add REQUIRE_HTTPS flag"
*** Reason for rollback ***

Flag doesn't enforce what it says it enforces, due to redirects

*** Original change description ***

Add REQUIRE_HTTPS flag

Note that it's not possible for the library to enforce that
the flag is adhered to, since it's possible for applications
to inject custom implementations of DataSource (there's no
requirement they even extend HttpDataSource for network
requesting implementations). It's possible for applications
to replace pretty much anything in the library, so there's
no other place we could put the flag where we could make
this guarantee. Hence this is a best-effort that will work
when...

***

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136583459
2016-10-19 17:00:03 +01:00
aquilescanta
aecbbdd36c Replace IndexOutOfBounds Exception for BehindLiveWindowException
This is a problem when two invocations of getNextChunk that retrieve
chunks (i.e. not playlists) occur too apart in time. In that case
the last loaded chunk has a media sequence that is behind the current
playlist.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136501291
2016-10-19 17:00:03 +01:00
olly
1cfc432bb8 Add REQUIRE_HTTPS flag
Note that it's not possible for the library to enforce that
the flag is adhered to, since it's possible for applications
to inject custom implementations of DataSource (there's no
requirement they even extend HttpDataSource for network
requesting implementations). It's possible for applications
to replace pretty much anything in the library, so there's
no other place we could put the flag where we could make
this guarantee. Hence this is a best-effort that will work
when using HttpDataSource implementations that we provide.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136500947
2016-10-19 17:00:03 +01:00
eguven
06fb29c939 Support caching of multi segment DASH, HLS and Smooth Streaming.
Use sha1 of content uri if a custom cache key or content id isn't provided.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136351830
2016-10-19 16:58:09 +01:00
Oliver Woodman
7e352295d7 Propagate ID3 data for MP3 2016-10-18 15:17:01 +01:00
Oliver Woodman
7594f5b78b Further enhance ID3 decoder + support 2016-10-18 15:02:35 +01:00
ojw28
e2ff401ea1 Merge pull request #1958 from google/dev-v2
Merge dev-v2 into dev-v2-id3
2016-10-17 22:52:12 +01:00
Oliver Woodman
66652f65bb Make Id3Util final 2016-10-17 22:47:03 +01:00
Oliver Woodman
4391014a7a Split genres into separate util class 2016-10-17 22:45:09 +01:00
Oliver Woodman
110c8f6f1f Improvements to ID3 decoder 2016-10-17 22:35:21 +01:00
olly
cecb1f5f76 Bump version + update release notes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136339035
2016-10-17 15:43:57 +01:00
aquilescanta
e873b4b6ab Change prepare() for maybePrepare() in HlsSampleStreamWrapper
This will allow asynchronous preparation.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136176854
2016-10-17 15:43:57 +01:00
Oliver Woodman
50aeb20cc2 Make Id3Decoder stateless again
One issue with the previous implementation was that
isUnsynchronized would not be set back to false if
previously set to true and if the next header has
majorVersion >= 4. In general, having the decoder be
stateless is clearer (and thread safe, albeit that
this property is not required).
2016-10-17 14:38:56 +01:00
klampert
dca4d16bef Release surfaces created to wrap SurfaceTextures
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136163292
2016-10-14 18:57:30 +01:00
olly
6acf59c4fc Fix Widevine L3 provisioning in V2
1. HttpMediaDrmCallback.executeProvisionRequest needs to specify
   an empty byte[], else we do a GET instead of a POST.
2. Content-Type should not be set when making the provision
   request, since there's no body.
3. DataSource implementations must correctly handle a non-null
   body with zero length. CronetDataSource was not handling this
   case. DefaultHttpDataSource was, but made a code modification
   to make it a little clearer. OkHttpDataSource seems to handle
   the case correctly, and it doens't look like the code can be
   made clearer.

Issue #1925

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136042641
2016-10-14 10:42:43 +01:00
olly
a22390c29b Parse CEA-708 codec for rawCC
Note that actually handling CEA-708 is not yet implemented,
and so this is a no-op change from a behavior point of view.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136038439
2016-10-14 10:42:43 +01:00
aquilescanta
e685edc179 Make interface implementation consistent among ExtractorOutputs
The method track(int id) currently has different behaviours across
implementations. This CL maps ids to track outputs, which means
that successive calls with the same id will return the same
TrackOutput instance. Also fixes TsExtractor inconsistent behavior
after a seek.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136026721
2016-10-14 10:42:43 +01:00
aquilescanta
ff712aead5 Try not adapting before failing with BehindLiveWindowException in Hls
Issue:#1782

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=136025847
2016-10-14 10:42:43 +01:00
olly
64262085a7 Block when surface being replaced is non-null
A blocking call is necessary where we want to guarantee that
the player wont access the surface after the method call has
returned. We currently only do this for the case:

Surface->Null

But we should also do it for the case:

SurfaceA->SurfaceB

Since the caller may reasonably do something like destroy
SurfaceA immediately after it's been replaced.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135921296
2016-10-14 10:42:43 +01:00
aquilescanta
f18373eeb2 Decouple TsExtractor's readers from TrackOutputs
This allows the injectable reader factory to be a stateless factory, allows
the seeking to be consistent and will allow multiple CC channel support later
on.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135909712
2016-10-14 10:42:43 +01:00
Oliver Woodman
bffffb0fac Minor ID3 tweaks 2016-10-12 17:27:54 +01:00
ojw28
f4b8d9490a Merge pull request #1935 from google/dev-v2
Update dev-v2-id3 with dev-v2
2016-10-12 17:05:09 +01:00
olly
996fe47f8c Fix NPE releasing HlsMediaPeriod
Issue: #1907

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135798950
2016-10-11 18:16:28 +01:00
olly
29f3eb5e5a Fixes for retries
- Fix issue in ExoPlayerImpl where the timeline was null'd
  but onTimelineChanged was not fired.
- Add the ability to not reset the timeline. This is useful
  for retries where you know the timeline will be the same
  as it was previously.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135797577
2016-10-11 18:16:28 +01:00
olly
83107cc25d Fix missing release calls on loadingPeriodHolder
playingPeriodHolder can be null in the case that the first
period is still being prepared. We need to make sure we
release the period that's being prepared in such cases,
which is loadingPeriodHolder.

Issue: #1914

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135793472
2016-10-11 18:16:28 +01:00
olly
907b9bf4f6 Sanitize threading in CronetDataSource
- Move nearly all logic onto the calling thread (i.e. the thread
  calling open/read/close), to make threading correctness more
  obvious.
- Document which variables are read/written from which thread, and
  why the call sequences are safe.
- Fix thread safety issue that I think could probably cause data
  corruption in the case of a read timeout followed by another
  request into the DataSource.

Also:

- Relaxed content length checking to be consistent with the other
  http DataSource implementations, and avoided parsing the headers
  where they're not used.
- Fixed missing generics in CronetDataSourceFactory.
- Added TODO to work with servers that don't support partial range
  requests.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135702217
2016-10-11 18:16:28 +01:00
olly
4fab402274 Fix missing generics
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135700280
2016-10-11 18:16:28 +01:00
olly
d922a21160 Select the cenc sinf atom explicitly
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135692709
2016-10-11 18:16:28 +01:00
olly
91f8328a5f UI component improvements
- Make sure no events are posted on PlaybackControlView
  if it's not attached to a window. This can cause leaks.
  The target hide time is recorded if necessary and
  processed when the view is re-attached.
- Deduplicated PlaybackControlView.VisibilityListener
  invocations.
- Fixed timeouts to be more intuitive (I think).
- Fixed initial visibility of PlaybackControlView when
  used as part of SimpleExoPlayerView.
- Made some more attributes configurable from layout xml.

Issue: #1908
Issue: #1919
Issue: #1923

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135679988
2016-10-11 18:16:28 +01:00
Oliver Woodman
97e7fb85a7 ID3: Clean up logging + only add to audio track for MP4 2016-10-09 18:00:59 +01:00
Oliver Woodman
ba1da140c6 Further modifications to ID3 support
- Lots of misc cleanup
- Remove GaplessInfo from Metadata. IMO it doesn't quite belong there,
  and means it ends up being represented twice inside Format.
- Note: Changes untested, but will be tested in due course!
2016-10-09 16:27:58 +01:00
Oliver Woodman
3b34f850f2 Clean up ID3 frame implementations 2016-10-09 14:58:12 +01:00
Oliver Woodman
6a3b66987a Revert unrelated ContentDataSource change 2016-10-09 14:52:38 +01:00
Oliver Woodman
5a097a4c9d Merge branch 'albumMetadataV2.1' of git://github.com/cbfiddle/ExoPlayer into cbfiddle-albumMetadataV2.1 2016-10-09 14:47:48 +01:00
olly
6c12ec629a Some minor UI refinements
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135353593
2016-10-06 15:05:34 +01:00
[]inger
08965c03d0 Avoid memory leaks by removing callbacks from surface when SimpleExoPlayer is released.
Without this developers which reuse a SurfaceHolder with multiple instances of
SimpleExoPlayer need to call simpleExoPlayer.setVideoSurfaceHolder(null) to get
the SimpleExoPlayer.ComponentListener removed from the surface holder. If they
don't, the component listener is still registered and as a member class leaks
an instance of simpleExoPlayer.

Issue #1855

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135292439
2016-10-06 15:04:57 +01:00
olly
d334dfdcba Fix merging of selected streams.
Playback would fail if a renderer is toggled from consuming from
one child to another in a single step.

Issue: #1900

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135270356
2016-10-05 21:21:47 +01:00
[]inger
053dc27a3e Introduce resize mode for AspectRatioFrameLayout.
https://github.com/google/ExoPlayer/issues/1827

Three different modes available: fit (default), fixed_width, fixed_height
Developers need to use wrap_content for the dimension which is not fixed:

app:resize_mode="fixed_width"
android:layout_width="320dp"
android:layout_height="wrap_content"

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135264861
2016-10-05 21:21:13 +01:00
olly
2cf339e095 Bump version to 2.0.2 + document inclusion of OkHttp extension
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135260806
2016-10-05 21:20:34 +01:00
olly
89c438078e Fix retry crash in edge case
Configuration of retry currently fails if all of the
following are true, which is highly unlikely but does
occur in the ref'd issue.

1. Loading/extraction fails
2. Neither length of stream of a seek map is known
3. At least one track has been output by the extractor

Issue: #1899

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135228687
2016-10-05 18:07:48 +01:00
olly
7c3fe15426 Add convenience getPlayer methods to UI components
Issue: #1895

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135211179
2016-10-05 18:06:34 +01:00
olly
b3c6f1caae Finish cleaning DataSource implementations.
- Enfroce read returns 0 if readLength==0 everywhere.
- Fixes and simplifications for CronetDataSource.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135138232
2016-10-04 23:42:55 +01:00
olly
f8ed4cfdee Clean up some DataSource implementations
- Make read return 0 if readLength==0
- Return RESULT_END_OF_INPUT properly in the case that
  bytesRemaining is unset (this was broken previously,
  but only applies for assets > 2^31 bytes, so it's
  unlikely anyone ever hit this issue)

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135136541
2016-10-04 23:42:20 +01:00
aquilescanta
e288880aaf Fix Ac3 extractor sniff
Issue:#1875

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135100986
2016-10-04 23:40:53 +01:00
olly
b29b4f7e1a MergingMediaPeriod + subtitle fixes
- Correctly null out streams[j] in the case that a renderer
  is being disabled.
- Read discontinuities from all children, not just enabled
  ones. This fixes a failure when reading a discontinuity
  with all renderers disabled.
- Add in some assertions to make incorrect stream selection
  failures obvious and immediate.
- Relocate subtitles so they're above the shutter (needed so
  they continue to be visible when video is disabled but
  text is still enabled).

Issue: #1854

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=135089944
2016-10-04 23:39:24 +01:00
aquilescanta
6306c26988 Add support for fragmented MP4 in HLS
This CL adds support for initialization segments in HLS. This is required mainly for(but not limited to) usage of fMP4. The fMP4 support only consists in creating the required extractor if the extension is .mp4, provided the initialization segment is correctly
loaded and passed to the extractor.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134997636
2016-10-04 23:38:47 +01:00
olly
69af389730 Trim allocator on stop/reset by default
This prevents a large amount of memory from being held
in the case that a player instance is released, but the
application is holding dangling references to the player
that are preventing it from being garbage collected.

Issue: #1855

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134992945
2016-10-03 17:44:01 +01:00
olly
f75f3d75b2 Fix sideloaded subtitles
- Fix NPE issue in SingleSampleMediaPeriod.
- Delay handling of EOS in TextRenderer until the last
  subtitle is fully played out.

Issue: #1882

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134979286
2016-10-03 17:43:28 +01:00
cdrolle
37806ee792 Added Basic CEA-708 caption support to ExoPlayer V2, roughly equivalent to the current state of CEA-608. It's still missing window (and the associated positioning and formatting) support, emulating a 3-line rollup.
Currently this has only been tested with the RawCC container, though it should work with anything that makes use of SeiReader (i.e. MPEG2-TS) with minimal changes to SeiReader.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134781660
2016-10-03 17:42:49 +01:00
andrewlewis
c381093a48 Update variable name in comment.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134776852
2016-09-30 14:40:38 +01:00
andrewlewis
ee4d297f22 Fix seeking in the last period.
When reading the last period, the readingPeriodHolder was set to null in
updatePeriods if it was the last period. (This would occur almost immediately
when playing a single-period source.) seekToPeriodPosition suppresses reusing a
loaded/prepared period if the reading period and playing period did not match,
which meant that the whole timeline was recreated when seeking in the last
period.

Leave readingPeriodHolder non-null. This means that at all times either
playingPeriodHolder == readingPeriodHolder (and they could be null or
non-null), or playingPeriodHolder and readingPeriodHolder differ and are both
non-null.

Also fix an issue where streams were never forced to be recreated during track
reselection when reading ahead.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134774238
2016-09-30 14:40:06 +01:00
olly
7971a18a83 Revert back to default cue parameters until we support positioning
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134673236
2016-09-30 14:39:25 +01:00
olly
21626c417e Bump version to 2.0.1
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=134662367
2016-09-29 16:30:10 +01:00