Commit graph

4620 commits

Author SHA1 Message Date
tonihei
b9f3fd429d Make parallel adaptive track selection more robust.
Using parallel adaptation for Formats without bitrate information currently
causes an exception. Handle this gracefully and also cases where all formats
have the same bitrate.

Issue:#5971
PiperOrigin-RevId: 250682127
2019-05-31 22:46:13 +01:00
olly
9860c486e0 Keep controller visible on d-pad key events
PiperOrigin-RevId: 250661977
2019-05-31 22:45:24 +01:00
aquilescanta
9da9941e38 Fix TTML bitmap subtitles
+ Use start for anchoring, instead of center.
+ Add the height to the TTML bitmap cue rendering layout.

Issue:#5633
PiperOrigin-RevId: 250519710
2019-05-31 22:41:10 +01:00
andrewlewis
082aee692b Allow passthrough of E-AC3-JOC streams
PiperOrigin-RevId: 250517338
2019-05-31 22:40:25 +01:00
andrewlewis
8bc14bc2a9 Allow enabling decoder fallback in DefaultRenderersFactory
Also allow enabling decoder fallback with MediaCodecAudioRenderer.

Issue: #5942
PiperOrigin-RevId: 250301422
2019-05-31 22:38:32 +01:00
aquilescanta
42ffc5215f Fix anchor usage in SubtitlePainter's setupBitmapLayout
According to Cue's constructor (for bitmaps) documentation:
+ cuePositionAnchor does horizontal anchoring.
+ cueLineAnchor does vertical anchoring.

Usage is currently inverted.

Issue:#5633
PiperOrigin-RevId: 250253002
2019-05-31 22:37:14 +01:00
olly
9b104f6ec0 Reset upstream format when empty track selection happens
PiperOrigin-RevId: 249819080
2019-05-31 22:36:16 +01:00
olly
2e1ea379c3 Fix IndexOutOfBounds when there are no available codecs
PiperOrigin-RevId: 249610014
2019-05-31 22:34:50 +01:00
tonihei
cf93b8e73e Release DownloadHelper automatically if preparation failed.
This prevents further unexpected updates if the MediaSource happens to
finish its preparation at a later point.

Issue:#5915
PiperOrigin-RevId: 249439246
2019-05-31 22:34:01 +01:00
olly
94c10f1984 Propagate attributes to DefaultTimeBar
Issue: #5765
PiperOrigin-RevId: 249251150
2019-05-31 22:31:53 +01:00
andrewlewis
1d0618ee1a Update surface directly from SphericalSurfaceView
The SurfaceListener just sets the surface on the VideoComponent, but
SphericalSurfaceView already accesses the VideoComponent directly so it seems
simpler to update the surface directly.

PiperOrigin-RevId: 249242185
2019-05-31 22:30:30 +01:00
andrewlewis
e4d66c4105 Update a reference to SimpleExoPlayerView
PiperOrigin-RevId: 249068395
2019-05-31 22:29:56 +01:00
bachinger
b4d72d12f7 Add ProgressUpdateListener
Issue: #5834
PiperOrigin-RevId: 249067445
2019-05-31 22:29:40 +01:00
andrewlewis
9ec330e7c7 Fix platform scheduler javadoc
PiperOrigin-RevId: 248503971
2019-05-17 11:35:38 +01:00
olly
15b319cba2 Bump release to 2.10.1 and update release notes
PiperOrigin-RevId: 248503235
2019-05-17 11:35:22 +01:00
olly
7f89fa9a8c Add simpler HttpDataSource constructors
PiperOrigin-RevId: 248350557
2019-05-15 20:03:52 +01:00
aquilescanta
6e9df31e7d Add links to the developer guide in some READMEs
PiperOrigin-RevId: 248221982
2019-05-15 20:03:46 +01:00
olly
3ce0d89c56 Allow empty values in ICY metadata
Issue: #5876
PiperOrigin-RevId: 248119726
2019-05-15 20:03:39 +01:00
bachinger
cea3071b33 Fix rendering DVB subtitle on API 28.
Issue: #5862
PiperOrigin-RevId: 248112524
2019-05-15 20:03:25 +01:00
olly
48de1010a8 Allow line terminators in ICY metadata
Issue: #5876
PiperOrigin-RevId: 247935822
2019-05-15 20:02:34 +01:00
tonihei
1b9d018296 Fix Javadoc links.
PiperOrigin-RevId: 247630389
2019-05-15 20:00:06 +01:00
tonihei
6ead14880b Add setCodecOperatingRate workaround for 48KHz audio on ZTE Axon7 mini.
Issue:#5821
PiperOrigin-RevId: 247621164
2019-05-15 19:59:40 +01:00
tonihei
ac07c56dab Fix NPE in HLS deriveAudioFormat.
Issue:#5868
PiperOrigin-RevId: 247613811
2019-05-15 19:58:44 +01:00
andrewlewis
29add854af Update player accessed on wrong thread URL
PiperOrigin-RevId: 247418601
2019-05-15 19:55:30 +01:00
tonihei
ee5981c02d Ensure messages get deleted if they throw an exception.
If a PlayerMessage throws an exception, it is currently not deleted from the
list of pending messages. This may be problematic as the list of pending
messages is kept when the player is retried without reset and the message is
sent again in such a case.

PiperOrigin-RevId: 247414494
2019-05-15 19:55:20 +01:00
andrewlewis
85a86e434a Increase gapless trim sample count
PiperOrigin-RevId: 247348352
2019-05-15 19:55:07 +01:00
tonihei
0698bd1dbb Add option to clear all downloads.
Adding an explicit option to clear all downloads prevents repeated database
access in a loop when trying to delete all downloads.

However, we still create an arbitrary number of parallel Task threads for this
and seperate callbacks for each download.

PiperOrigin-RevId: 247234181
2019-05-15 19:54:27 +01:00
eguven
b626dd70c3 Add DownloadHelper.createMediaSource utility method
PiperOrigin-RevId: 245243488
2019-05-15 19:47:43 +01:00
Oliver Woodman
7d430423d7 Merge pull request #5760 from matamegger:feature/hex_format_tags_in_url_template
PiperOrigin-RevId: 246733842
2019-05-05 11:44:11 -07:00
olly
90cb157985 Update translations
PiperOrigin-RevId: 246729123
2019-05-05 18:24:21 +01:00
olly
8b2d436d7c Prevent CachedContentIndex.idToKey from growing without bound
PiperOrigin-RevId: 246727723
2019-05-05 18:24:04 +01:00
Oliver Woodman
ce37c79968 Fix Javadoc 2019-05-03 21:12:02 +01:00
olly
71d7e0afe2 Add a couple of assertions to DownloadManager set methods
PiperOrigin-RevId: 246491511
2019-05-03 19:44:54 +01:00
olly
116602d8c0 Minor download documentation tweaks
PiperOrigin-RevId: 246333281
2019-05-03 19:44:49 +01:00
tonihei
241ce2df49 Post-submit fixes for eed5d957d8.
One wrong return value, a useless assignment, unusual visibility of private
class fields and some nullability issues.

PiperOrigin-RevId: 246282995
2019-05-02 13:14:05 +01:00
olly
9f9cf316bd Remove unnecessary logging
As justification for why we should not have this type of logging,
it would scale up to about 13K LOC, 1800 Strings, and 36K (after
pro-guarding - in the case of the demo app) if we did it through
the whole code base*. It makes the code messier to read, and in
most cases doesn't add significant value.

Note: I left the Scheduler logging because it logs interactions
with some awkward library components outside of ExoPlayer, so is
perhaps a bit more justified.

* This is a bit unfair since realistically we wouldn't ever add
  lots of logging into trivial classes. But I think it is fair
  to say that the deltas would be non-negligible.

PiperOrigin-RevId: 246181421
2019-05-02 13:13:59 +01:00
olly
214a372e06 Periodically persist progress to index whilst downloading
PiperOrigin-RevId: 246173972
2019-05-02 13:13:53 +01:00
olly
d215b81167 Rework DownloadManager to fix remaining TODOs
- Removed DownloadInternal and its sometimes-out-of-sync
  duplicate state
- Fixed downloads being in STOPPED rather than QUEUED state
  when the manager is paused
- Fixed setMaxParallelDownloads to start/stop downloads if
  necessary when the value changes
- Fixed isWaitingForRequirements

PiperOrigin-RevId: 246164845
2019-05-02 13:13:38 +01:00
aquilescanta
6c1065c6d2 Prevent index out of bounds exceptions in some live HLS scenarios
Can happen if the load position falls behind in every playlist and
when we try to load the next segment, the adaptive selection logic
decides to change variant.

Issue:#5816
PiperOrigin-RevId: 245923006
2019-04-30 22:13:47 +01:00
olly
4a5b8e17de DownloadManager improvements
- Do requirements TODO
- Add useful helper method to retrieve not met requirements
- Fix WritableDownloadIndex Javadoc

PiperOrigin-RevId: 245922903
2019-04-30 22:13:41 +01:00
olly
6b34ade908 Rename DownloadThread to Task
This resolves some naming confusion that previously existed
as a result of DownloadThread also being used for removals.
Some related variables (e.g. activeDownloadCount) would refer
to both download and removal tasks, whilst others
(e.g. maxParallelDownloads) would refer only to downloads.
This change renames those that refer to both to use "task"
terminology.

This change also includes minor test edits.

PiperOrigin-RevId: 245913671
2019-04-30 22:13:35 +01:00
Oliver Woodman
590140c1a6 Fix bad merge 2019-04-26 20:41:29 +01:00
Oliver Woodman
cb13f2df0f Merge branch 'dev-v2-r2.10.0' of https://github.com/google/ExoPlayer into dev-v2-r2.10.0 2019-04-26 18:48:06 +01:00
eguven
0128cebce1 Add simpler DownloadManager constructor
PiperOrigin-RevId: 245397736
2019-04-26 18:45:52 +01:00
tonihei
9463c31cde Update default min duration for playbacks with video to match max duration.
Experiments show this is beneficial for rebuffers with only minor impact
on battery usage.

Configurations which explicitly set a minimum buffer duration are unaffected.

Issue:#2083
PiperOrigin-RevId: 244823642
2019-04-26 18:45:07 +01:00
andrewlewis
f62fa434dd Log warnings when extension libraries can't be used
Issue: #5788
PiperOrigin-RevId: 245440858
2019-04-26 18:43:58 +01:00
olly
56520b7c73 Move DownloadManager internal logic into isolated inner class
There are no logic changes here. It's just moving code around and removing
the "internal" part of names where no longer required.

PiperOrigin-RevId: 245407238
2019-04-26 18:41:46 +01:00
olly
d187d9ec8f Post maxParallelDownload and minRetryCount changes
PiperOrigin-RevId: 245405316
2019-04-26 18:41:40 +01:00
olly
9d03ae4109 Add missing getters and clarify STATE_QUEUED documentation
PiperOrigin-RevId: 245401274
2019-04-26 18:41:30 +01:00
eguven
fc35d5fca6 Add simpler DownloadManager constructor
PiperOrigin-RevId: 245397736
2019-04-26 18:41:17 +01:00
eguven
c97ee9429b Allow content id to be set in DownloadHelper.getDownloadRequest
PiperOrigin-RevId: 245388082
2019-04-26 18:41:03 +01:00
eguven
4da14e46fa Add DownloadService SET_REQUIREMENTS action
PiperOrigin-RevId: 245014381
2019-04-26 18:38:56 +01:00
eguven
f7f6489f57 Add option to add entries in an ActionFile to DownloadIndex as completed
PiperOrigin-RevId: 244864742
2019-04-26 18:38:24 +01:00
tonihei
6155139856 Fix bug which logs errors twice if stack traces are disabled.
Disabling stack trackes currently logs messages twice, once with and once
without stack trace.

PiperOrigin-RevId: 244853127
2019-04-26 18:38:16 +01:00
tonihei
3d6407a58e Always update loading period in handleSourceInfoRefreshed.
This ensures we keep the loading period in sync with the the playing period in
PlybackInfo, when the latter changes to something new.

PiperOrigin-RevId: 244838123
2019-04-26 18:37:43 +01:00
Oliver Woodman
6473d46cbd Fix tests 2019-04-19 16:05:04 +01:00
olly
0d8146cbca Further improve DownloadService action names & methods
- We had buildAddRequest and sendNewDownload. Converged to
  buildAddDownload and sendAddDownload.
- Also fixed a few more inconsistencies, and brought the
  action constants into line as well.

PiperOrigin-RevId: 244274041
2019-04-18 23:47:19 +01:00
olly
b8cdd7e40b Fix lint warnings for 2.10
PiperOrigin-RevId: 244268855
2019-04-18 23:43:07 +01:00
olly
b30efe968b Clean up database tables for launch
PiperOrigin-RevId: 244267255
2019-04-18 23:43:02 +01:00
olly
54a5d6912b Improve progress reporting logic
- Listener based reporting of progress allows the content length
  to be persisted into the download index (and notified via a
  download state change) as soon as it's available.
- Moved contentLength back into Download proper. It should only
  ever change once, so I'm not sure it belongs in the mutable part
  of Download.
- Made a DownloadProgress class, for naming sanity.

PiperOrigin-RevId: 244242487
2019-04-18 23:42:57 +01:00
olly
7d67047e94 Support multiple DefaultDownloadIndex instances
PiperOrigin-RevId: 244226680
2019-04-18 23:42:51 +01:00
olly
38c5350c2c Simplify DownloadManager constructors
PiperOrigin-RevId: 244223870
2019-04-18 23:42:45 +01:00
olly
8c62408120 Rename start/stopDownloads to resume/pauseDownloads
PiperOrigin-RevId: 244216620
2019-04-18 23:42:40 +01:00
olly
138da6d519 Rename manualStopReason to stopReason
PiperOrigin-RevId: 244210737
2019-04-18 23:42:33 +01:00
eguven
6d8bd34590 Add missing DownloadService build*Intent and startWith* methods
PiperOrigin-RevId: 244196081
2019-04-18 23:42:20 +01:00
aquilescanta
b6337adc47 Avoid selecting a forced text track that doesn't match the audio selection
Assuming there is no text language preference.

PiperOrigin-RevId: 244176667
2019-04-18 23:41:15 +01:00
eguven
a501f8c245 Fix flaky DownloadManagerDashTest
PiperOrigin-RevId: 244170179
2019-04-18 23:41:04 +01:00
aquilescanta
be0acc3621 Add test for HlsTrackMetadataEntry population in the HlsPlaylistParser
PiperOrigin-RevId: 244168713
2019-04-18 23:40:58 +01:00
andrewlewis
c2bbf38ee8 Extend Bluetooth dead audio track workaround to Q
PiperOrigin-RevId: 244139959
2019-04-18 23:40:36 +01:00
olly
0748566482 Remove TODOs we're not going to do
1. customCacheKey for DASH/HLS/SS is now asserted against
   in DownloadRequest
2. Merging of event delivery in DownloadManager is very
   tricky to get right and probably not a good idea

PiperOrigin-RevId: 244048392
2019-04-18 23:38:43 +01:00
eguven
289a8ffe4c Small javadoc fix for DownloadManager constructors
PiperOrigin-RevId: 244009343
2019-04-18 23:38:37 +01:00
olly
afd72839dc Disable cache span touching for offline
Currently SimpleCache will touch cache spans whenever it reads
from them. With legacy SimpleCache setups this involves a potentially
expensive file rename. With new SimpleCache setups it involves
a more efficient but still non-free database write.

For offline use cases, and more generally any use case where the
eviction policy doesn't use last access timestamps, touching is
not useful. This change allows the evictor to specify whether it
needs cache spans to be touched or not. SimpleCache will only touch
spans if the evictor requires it.

Note: There is a potential change in behavior in cases where a
cache uses an evictor that doesn't need cache spans to be touched,
but then later switches to an evictor that does. The new evictor
may temporarily make sub-optimal eviction decisions as a result.
I think this is a very fair trade-off, since this scenario is
unlikely to occur much, if at all, in practice, and even if it
does occur the result isn't that bad.
PiperOrigin-RevId: 244005682
2019-04-18 23:38:30 +01:00
olly
e15e6212f2 Fix playback of badly clipped MP3 streams
Issue: #5772
PiperOrigin-RevId: 243987497
2019-04-18 23:37:36 +01:00
olly
721e1dbfaf Add WritableDownloadIndex interface
One goal we forgot about a little bit was to allow applications
to provide their own index implementation. This requires the
writable side to also be defined by an interface.

PiperOrigin-RevId: 243979660
2019-04-18 23:37:28 +01:00
andrewlewis
6b0fd51378 Reset playback info but not position/state in release
ImaAdsLoader gets the player position after the app releases
the player to support resuming ads at their current position
if the same ads loader is reused.

PiperOrigin-RevId: 243969916
2019-04-18 23:37:06 +01:00
eguven
dcb8417a3c Assert customCacheKey is null for DASH, HLS and SmoothStreaming downloads
PiperOrigin-RevId: 243954989
2019-04-18 23:36:08 +01:00
tonihei
8e7a2ba958 Don't reset masking position when prepare fails.
The removed condition only applies when prepare fails and no timeline was or
is known. We should keep a pending seek position in such a case. The internal
player does the same thing already.

PiperOrigin-RevId: 243819466
2019-04-18 15:12:07 +01:00
olly
ee08e7dcac Fix key and accessibility scrubbing
Issue: #5767
PiperOrigin-RevId: 243811443
2019-04-16 16:42:08 +01:00
eguven
5856e75781 Rename DownloadAction to DownloadRequest
PiperOrigin-RevId: 243806888
2019-04-16 16:41:29 +01:00
eguven
c2c7c43a36 Remove redundant proguard files
PiperOrigin-RevId: 243781000
2019-04-16 15:28:39 +01:00
olly
9c759a867b Prepare SimpleCache for 2.10.0 release
- Expose constructors that take DatabaseProvider. Deprecate those
  that do not.
- Expose Cache.getUid. This will likely be used for naming of the
  tables accessed by DefaultDownloadIndex .

PiperOrigin-RevId: 243637786
2019-04-16 15:28:01 +01:00
andrewlewis
45348a97a9 Fix Atom ConstantCaseForConstant suppression
PiperOrigin-RevId: 243636923
2019-04-16 15:27:41 +01:00
aquilescanta
68bd5da3cb Fix DecryptionResource.Owner#onLastReferenceReleased type
PiperOrigin-RevId: 243632134
2019-04-16 15:27:22 +01:00
olly
7b84a1ead7 DownloadManager.getCurrentDownloads: Return list instead of array
- Allows enforcing immutability, which in a future CL will allow
  avoiding allocating a new array/list on every call.
- Also some left over doc cleanup from the DownloadState rename.

PiperOrigin-RevId: 243627352
2019-04-16 15:27:03 +01:00
aquilescanta
9ddd39c1c0 Add the HlsMetadataEntry from the Master playlist to the Hls tracks
PiperOrigin-RevId: 243624081
2019-04-16 15:26:44 +01:00
eguven
ba91501751 Add DownloadService.invalidateForegroundNotification
ISSUE: #4563
PiperOrigin-RevId: 243616444
2019-04-16 15:26:05 +01:00
olly
18dd3fdb46 Bump release to 2.10.0 and update release notes
PiperOrigin-RevId: 243592790
2019-04-16 15:25:47 +01:00
tonihei
1ee51518ae Use new exoplayer.dev domain everywhere.
The old domain automatically forwards to the new one. For consistency, change
all doc and code references regardless.

Also adds GitHub CNAME config file which configures our page for the custom
domain.

PiperOrigin-RevId: 243592110
2019-04-16 15:25:27 +01:00
tonihei
75238e5e4f Remove duplications from handleSourceInfoRefreshed.
handleSourceInfoRefreshed checks for various conditions which may trigger a
change in position. In all cases, we need to resolve the new position for ads,
and if the corresponding MediaPeriods already exist, perform the seek to the new
position.

This change simplified the code by
 1. Moving all conditions in a single if-else structure which just determines
    the new playback position. This makes it easier to read and to follow.
 2. Doing the subsequent seek and position update in one final step to remove
    duplicated code.

As a side effect, it also improves some edge cases. For example when skipping
an ad to an already prebuffered period, we now properly update the existing
prebuffered period.

PiperOrigin-RevId: 243588014
2019-04-16 15:25:08 +01:00
aquilescanta
1bf1790edc Extract factory method for FragmentedMp4Extractor in DefaultHlsExtractorFactory
PiperOrigin-RevId: 243582468
2019-04-16 15:24:48 +01:00
olly
2e3eac25b7 Cleanly detach DownloadThreads on release
- Make a best effort to avoid posting MSG_DOWNLOAD_THREAD_STOPPED
  if the internal thread has already quit. Doing so is harmless,
  but causes an error in Logcat. We used to generate this warning
  quite a bit in ExoPlayerImplInternal as well, and we got quite
  a few issues filed about it, so best to avoid it if possible.
- Null out the back reference DownloadThread holds to its manager
  on release. This avoids a potential issue where a download thread
  can prevent GC of its manager if it doesn't cancel quickly.
  There's similar logic (with a similar comment) in Loader.LoadTask.

PiperOrigin-RevId: 243365143
2019-04-13 01:45:59 +01:00
aquilescanta
97acc681d1 Add HlsMetadataEntries to HlsMasterPlaylist's variants and renditions
PiperOrigin-RevId: 243304549
2019-04-13 01:43:21 +01:00
olly
b2c29da6b3 Finalize DownloadManager interface
- Rename getAllDownloads to getCurrentDownloads to make it clear
  that it doesn't include completed and failed downloads
- Change getDownloadCount to isWaitingForRequirements, which is
  what it's used for. Added TODO to make it returns the right thing

PiperOrigin-RevId: 243257856
2019-04-13 01:43:02 +01:00
tonihei
c1e25f7768 Add check for retryDelayMs==C.TIME_UNSET in DASH and SS manifest onLoadError.
If the returned retry delay is unset, we should use a DONT_RETRY_FATAL action
instead and dispatch the event with the "canceled" flag.

PiperOrigin-RevId: 243251554
2019-04-13 01:42:42 +01:00
olly
a588717b46 Move download state transitions into DownloadManager
Non-trivial download state transitions are currently split across
DownloadManager and Download. These transitions are part of the
same state machine, so it's clearer if they're all in the same place
(i.e. DownloadManager, since this is the component that transitions
downloads between states).

PiperOrigin-RevId: 243249915
2019-04-13 01:42:22 +01:00
olly
f623a9dea0 Reduce use of DownloadInternal in DownloadManager
The only state DownloadInternal holds is duplicate of state contained
in Download, but can confusingly be temporarily out of sync. This is
error prone because it's easy to use the wrong variable (e.g.
download.state vs state). DownloadInternals methods are called into
and call out into DownloadManager, which makes some code paths that
are quite hard to follow.

It's possible to simplify DownloadManager quite a lot by removing the
duplicated state in DownloadInternal, at which point DownloadInternal's
methods flatten into DownloadManager, which can just hold an internal
list of Downloads directly.

This is a first step, which makes it clear that DownloadThready only
needs its immutable DownloadAction + an isRemove flag.

PiperOrigin-RevId: 243245288
2019-04-13 01:42:02 +01:00
aquilescanta
bd841b18f2 Add DecryptionResource to FormatHolder
PiperOrigin-RevId: 243243975
2019-04-13 01:41:42 +01:00
aquilescanta
936bc244b6 Add an HLS metadata entry sublcass to populate HLS track formats
Include information to facilitate adaptive track selection in HLS.

PiperOrigin-RevId: 243238232
2019-04-13 01:41:23 +01:00
aquilescanta
9cfac7ea07 Rename CryptoResource to DecryptionResource
PiperOrigin-RevId: 243237265
2019-04-13 01:41:03 +01:00
andrewlewis
53934c13b2 Select non-primary tunneling decoder
Issue: #3100
Issue: #5547
PiperOrigin-RevId: 243181217
2019-04-13 01:40:43 +01:00