10716 Commits

Author SHA1 Message Date
aquilescanta
78d65818c6 Fix HLS format derivation in traditional preparation
ExoPlayer's traditional HLS preparation works by loading a chunk from each track
group, and then tries to use the sample information plus the master playlist
information to generate the preparation's resulting TrackGroups.

There are 3 possible scenarios:
- Supported case: Each variant has a single codec string per track type. We can
  assign each track the codec string which matches the loaded sample's type.
- Supported case: Each variant has more than one codec string, but each track
  group has a single track. This is the case when different languages use
  different codecs. In this case, we can assign whichever codec matches the
  loaded sample's mime type.
- Unsupported case: Each variant has more than one codec string, and track
  groups contain more than one track. We are not able to safely map tracks to
  codec strings because that would require loading a chunk from each track
  (which would considerably delay preparation).

Broken in:
4783c329cc

PiperOrigin-RevId: 343072201
2020-11-23 09:58:48 +00:00
olly
bb8a2de37d Update Styled Player settings dialogs to respect RTL.
PiperOrigin-RevId: 342672124
2020-11-23 09:58:48 +00:00
olly
1f49867746 Fix CronetDataSource handling of 200 response for range request
Issue: #8090
#minor-release
PiperOrigin-RevId: 342638922
2020-11-23 09:58:48 +00:00
tonihei
5698eadc08 Discard buffer synchronously after seek before cancelling a load.
This ensures the buffer is not full when the `DefaultLoadControl` determines
whether we should continue loading and thus prevents a false warning about
not having enough memory left.

PiperOrigin-RevId: 342616623
2020-11-23 09:58:48 +00:00
insun
82969c823c Increase touch target height of timebar in StyledPlayerControlView
This change also introduces gravity attribute to DefaultTimeBar.

PiperOrigin-RevId: 342573167
2020-11-23 09:58:43 +00:00
olly
bf131ec0d2 Fix 2.12.1 release note
PiperOrigin-RevId: 342512836
2020-11-23 09:55:16 +00:00
christosts
d5f5d311d2 Pass drm_key_request_properties in offline DRM downloads
Pass the drm_key_request_properties specified in the json list
when donwloading thee offline Widevide license in the demo app.

PiperOrigin-RevId: 342243441
2020-11-23 09:55:16 +00:00
olly
1b50071f4f Fix ProgressiveDownloader retry logic
RunnableFutureTask is not reusable. Trying to reuse it meant that a
failure in one doWork() call would cause subsequent download() calls
to (a) not block until the runnable has finished executing (does not
apply when using a direct executor), and (b) throw the same failure
as thrown from the first doWork() call.

This could cause #8078 if the initial failure occurred before the
content length was resolved. Retries are not blocked on their work
completing due to (a), and the download would be marked as failed due
to (b). The work itself could then resolve the content length, which
causes the stack trace in this issue.

Issue: #8078
PiperOrigin-RevId: 343498252
2020-11-20 17:10:14 +00:00
tonihei
bd631a6ce2 Add onEvents callback.
This callback allows listeners to know when all simultanous changes
have been handled and the values reported through callbacks are
again completely consistent with value obtained from Player
getter calls.

PiperOrigin-RevId: 343476639
2020-11-20 17:10:05 +00:00
tonihei
a6b53d24af Add OGG playback tests
PiperOrigin-RevId: 343467276
2020-11-20 17:09:56 +00:00
olly
3981f9f1ae Re-download failed download in demo app
The demo app has two states for downloads, as per DownloadTracker.isDownloaded.
It's either "downloaded or downloading" (isDownloaded returns true, and the UI
shows a blue tick) or it's "not downloaded or failed (isDownloaded returns
false, and the UI does not show a blue tick).

toggleDownload is out of sync in that it treates "failed" as belonging to the
first state rather than the second. This means tapping on the grey tick in the
UI in this case appears to be a no-op (tapping it again will make something
happen).

This change aligns things by making toggleDownload re-download in the case a
previous download failed. In the future we could consider having three states,
so failed downloads could be disambiguated properly. Unclear whether it's a
good complexity/benefit trade-off for the demo app though!

#minor-release

PiperOrigin-RevId: 343464364
2020-11-20 17:09:46 +00:00
tonihei
1d2cf6f270 Fix bug in SampleQueue.discardTo for duplicate timestamps.
When a stream has duplicate timestamps we currently discard to
the last sample with the specified discardTo timestamp, but
it should be the first one to adhere to the method doc and the
intended usage.

#minor-release

PiperOrigin-RevId: 343458870
2020-11-20 11:11:28 +00:00
sungsoo
db48a68456 Fix typo
PiperOrigin-RevId: 343438203
2020-11-20 11:11:18 +00:00
sungsoo
2f1c0a5d0d Allow to remove all playlist items
PiperOrigin-RevId: 343437513
2020-11-20 11:11:08 +00:00
sungsoo
d67b70340e Refactor ComponentListener of PlayerWrapper
PiperOrigin-RevId: 343432873
2020-11-20 11:10:58 +00:00
olly
8c8176647c Minimal fix for playback freezes when enabling tracks #8203
Background:

1. When the player has multiple audio renderers, by default they share a
   single AudioSink.
2. When any new renderer is enabled, all disabled renderers are reset
   prior to the new renderer being enabled. This is to give them a chance
   to free up resources in case the renderer being enabled needs them. These
   reset calls are expected to be no-ops for renderers that have never been
   enabled.

The issue:

The problematic case arises when there are two audio renderers and a third
renderer (e.g., text) is being enabled. In this case, the disabled audio
renderer's reset call ends up resetting the AudioSink that's shared with the
enabled audio renderer. The enabled audio renderer is then unable to make
progress, causing playback to freeze.

This is a minimal fix that directly prevents the mentioned issue. There are
multiple follow-ups that would probably make sense:

1. Having ExoPlayerImplInternal track which renderers need to be reset, and
   only resetting those renderers rather than all that are disabled. This
   seems like a good thing to do regardless, rather than relying on those
   calls being no-ops.
2. If we want to continue sharing AudioSink, we need to formalize this much
   better and make sure we have good test coverage. Messages like
   MSG_SET_VOLUME are also delivered to the AudioSink multiple times via
   each of the renderers, which works currently because DefaultAudioSink
   no-ops all but the first call in each case. This is pretty fragile though!

Issue: #8203
#minor-release
PiperOrigin-RevId: 343296081
2020-11-19 17:13:28 +00:00
bachinger
39f8c77568 Replace cancelled HLS preload parts
Issue: #5011
PiperOrigin-RevId: 343277357
2020-11-19 17:13:19 +00:00
ibaker
31166d41c4 Remove FLAG_SIDELOADED from FragmentedMp4Extractor
This isn't used any more, the last usage was removed in
<unknown commit>

PiperOrigin-RevId: 343266553
2020-11-19 17:13:11 +00:00
olly
622a44dce0 Finish PlayerActivity if cleartext not permitted
This is inline with other show-toast-on-error cases in this method, and avoids
leaving the user on a completely black screen.

Note that the maybeRequestReadExternalStoragePermission is an exception because
it's not actually an error case.

#minor-release

PiperOrigin-RevId: 343264869
2020-11-19 17:12:59 +00:00
olly
2714fb0241 Remove custom speed from StyledPlayerControlView
Real apps probably aren't going to be allowing playback speed to be
set to anything other than the options listed in their UI, and so
this is not worth the complexity.

It also violates the idea that the UI should look the same regardless
of when the player is set on the view, since if it's set and then the
playback speed is changed to a listed option then the custom speed
remains, where-as if the speed is changed to a listed option and then
it's set, the custom speed will not be shown.

PiperOrigin-RevId: 343260450
2020-11-19 17:12:51 +00:00
ibaker
cc665f994c Move metadata retriever release note from 2.12.1 to dev-v2 section
PiperOrigin-RevId: 343253445
2020-11-19 17:12:42 +00:00
tonihei
e5fd2eb088 Rollback of db8356a17c
*** Original commit ***

Suppress warnings in preparation for Checker Framework 3.7.1 upgrade.

LSC: go/checker-lsc

Tested:
    tap_presubmit: http://test/OCL:342788975:BASE:342885903:1605667635149:7731b723
    Some tests failed; test failures are believed to be unrelated to this CL

***

PiperOrigin-RevId: 343251530
2020-11-19 17:12:33 +00:00
olly
0191febbe6 Fix fastforward and rewind color tinting and text alignment
#minor-release
Issue: #7898
PiperOrigin-RevId: 343251455
2020-11-19 17:12:25 +00:00
olly
db8356a17c Suppress warnings in preparation for Checker Framework 3.7.1 upgrade.
LSC: go/checker-lsc

Tested:
    tap_presubmit: http://test/OCL:342788975:BASE:342885903:1605667635149:7731b723
    Some tests failed; test failures are believed to be unrelated to this CL
PiperOrigin-RevId: 343129490
2020-11-19 17:12:16 +00:00
olly
0520c7d337 Remove C.StreamType constant that's not a real stream type
#minor-release

PiperOrigin-RevId: 341833274
2020-11-19 16:55:42 +00:00
olly
12e428ec87 Fix incorrect IntDef usage
#minor-release

PiperOrigin-RevId: 341668326
2020-11-19 16:55:34 +00:00
kimvde
8e638ec753 Work around AudioManager#getStreamVolume crashes
Issue:#8191
PiperOrigin-RevId: 341632732
2020-11-19 16:55:21 +00:00
bachinger
11b09dd58d Add dispatchPrepare(player) to ControlDispatcher
Issue: #7882
PiperOrigin-RevId: 341394254
2020-11-19 16:54:23 +00:00
ibaker
81d68317ac Fix or suppress nullness warnings introduced by checkerframework 3.7.0
PiperOrigin-RevId: 340826532
2020-11-19 16:52:32 +00:00
andrewlewis
3f9488b7cd Fix ImaPlaybackTest
This test is not run in presubmit as it was too flaky, and is currently broken
due to assets moving.

Also migrate off ImaPlaybackTest off deprecated APIs.

#minor-release

PiperOrigin-RevId: 340405666
2020-11-19 16:52:22 +00:00
olly
c9683195c0 Matroska: Support additional PCM codec modes
- Support 32-bit A_PCM/FLOAT/IEEE PCM
- Support 8-bit and 16-bit A_PCM/INT/BIG PCM

Issue: #8142
PiperOrigin-RevId: 340264679
2020-11-19 16:44:18 +00:00
Oliver Woodman
ac1ffa4fc2 Merge pull request #8133 from xufuji456:dev-v2
PiperOrigin-RevId: 340254878
2020-11-19 16:40:03 +00:00
ibaker
07455da2f5 Migrate Tx3gDecoderTest to Guava and SpannedSubject
#minor-release

PiperOrigin-RevId: 340249019
2020-11-19 16:39:53 +00:00
xufuji456
6682e6235c Compat video coding with mpeg1video in Mp4Extractor 2020-11-19 19:31:43 +08:00
andrewlewis
2d022a21b3 Fix buildForAdsResponse
PiperOrigin-RevId: 340198099
2020-11-18 19:16:33 +00:00
olly
379cd8a04f Make defaultLicenseUrl optional
Some content types always provide the license URL in the media.
The PlayReady example in the demo app doesn't provide a default
license URL for this reason, as an example.

#minor-release

PiperOrigin-RevId: 340125784
2020-11-18 19:10:50 +00:00
andrewlewis
e35f7d828d Add sample for testing skippable ads in midrolls
#minor-release

PiperOrigin-RevId: 339447845
2020-11-18 19:10:43 +00:00
andrewlewis
0c9e92136a Fix skipping behavior in ad pods
ImaAdsLoader notified onEnded whenever an ad finished playing, but when an ad
is skipped in an ad pod we'd receive a playAd call before the player
discontinuity for skipping to the next ad. Fix this behavior by checking that
IMA's playing ad matches the player's playing ad before notifying onEnded.

#minor-release

PiperOrigin-RevId: 339424910
2020-11-18 19:10:35 +00:00
andrewlewis
f1126ce514 Improve progress update logs
Add logging for ad progress and switch from deprecated getters to new
millisecond getters.

PiperOrigin-RevId: 339226534
2020-11-18 19:10:09 +00:00
andrewlewis
8759874924 Improve handling of VPAID ads
Issue: #7832
PiperOrigin-RevId: 339087555
2020-11-18 19:09:57 +00:00
ibaker
44c2ddb076 Suppress ProGuard warnings related to Guava's compile-only deps
Without these lines, ProGuard fails on the demo app (R8 works).

Also include some more `-dontwarn` lines from
https://github.com/google/guava/wiki/UsingProGuardWithGuava

Issue: #8103
PiperOrigin-RevId: 339050634
2020-11-18 19:09:41 +00:00
andrewlewis
7cc129d7b7 Upgrade IMA SDK dependency to 3.21.0
Call the new method AdsLoader.release() to allow the IMA SDK to dispose of its
WebView.

Issue: #7344
PiperOrigin-RevId: 339022162
2020-11-18 19:08:38 +00:00
aquilescanta
9ad70246e6 Treat -1000 duration as unknown duration for live streams in Cast
Issue: #7983
#minor-release
PiperOrigin-RevId: 339016928
2020-11-18 19:07:13 +00:00
andrewlewis
1264dbcd36 Handle stream volume register/unregister errors
Issue: #8106
Issue: #8087
PiperOrigin-RevId: 338664455
2020-11-18 19:07:04 +00:00
aquilescanta
da663aa081 Avoid chunkless preparation if the codec mapping is ambiguous
Issue: #7877
PiperOrigin-RevId: 338659937
2020-11-18 18:54:37 +00:00
aquilescanta
806681dd16 Map HLS sample formats to the correct codec string
This change fixes format creation for traditional preparation of streams
where the master playlist contains more than one codec string per track
type.

Issue: #7877
PiperOrigin-RevId: 338538693
2020-11-18 18:50:35 +00:00
aquilescanta
3d8c9b0bf8 Allow multiple codecs with same type in DefaultHlsExtractorFactory
When disabling a TsExtractor track type because of a missing codec
in the master playlist, look through the entire codecs string
instead of checking the first codec with matching type.

Issue: #7877
PiperOrigin-RevId: 338530046
2020-11-18 18:48:46 +00:00
olly
7cf0620231 Rollback of f6928c0ef9
*** Original commit ***

Keep download in completed state if only metadata is updated

Issue: #8116

***

PiperOrigin-RevId: 343102068
2020-11-18 18:40:43 +00:00
tonihei
c529a0b9c7 Rollback of 31430f1ac5
*** Original commit ***

Suppress warnings in preparation for Checker Framework 3.7.1 upgrade.

***

PiperOrigin-RevId: 343100646
2020-11-18 18:40:37 +00:00
ibaker
6d7997e747 Move DataSourceContractTest to the testutil package
PiperOrigin-RevId: 343096974
2020-11-18 18:40:36 +00:00