Commit graph

995 commits

Author SHA1 Message Date
samrobinson
403d92a4d4 Output from the Transformer the average audio & video bitrates.
PiperOrigin-RevId: 426956151
2022-02-08 10:27:15 +00:00
ibaker
4e3d15be87 Remove deprecated ActionFile and ActionFileUpgradeUtil
#minor-release

PiperOrigin-RevId: 426868933
2022-02-07 11:44:22 +00:00
hschlueter
7507da51a0 Make GlProgram an outer class.
This change makes GlUtil.Program an outer class named GlProgram,
and also moves private static helpers as well as the inner classes
Attribute and Uniform which were only used by GlUtil.Program to
GlProgram. Other static utility methods remain in GlUtil.

No functional changes intended.

PiperOrigin-RevId: 426119299
2022-02-04 09:40:51 +00:00
huangdarwin
ab0cbbea47 Transformer Demo: Remove unneeded external storage permission
Tested by confirming transformations still work and write to a output file in a
scoped-storage directory on a:
* Nexus 6P API 23 emulator
* Google Pixel 4 API 31 physical device

PiperOrigin-RevId: 425644266
2022-02-01 18:23:39 +00:00
hschlueter
aec92606a8 Make transformer demo configuration options scrollable.
On devices with a smaller screen / low resolution not all
options fit, so scrolling is needed.

PiperOrigin-RevId: 425635224
2022-02-01 18:22:27 +00:00
tonihei
c5b7e7b258 Fix session demo gradle build when used with a prefix
#minor-release

PiperOrigin-RevId: 425613253
2022-02-01 18:20:19 +00:00
olly
f28de9de60 Rewrite EventLogger to use new track APIs
PiperOrigin-RevId: 425595951
2022-02-01 14:35:06 +00:00
andrewlewis
dd83eca7d4 Add support for experimenting with HDR
- Add a checkbox in the demo app to enable experimental HDR editing.
- Add an `experimental_` method to `TransformationRequest` to enable HDR editing.
- Add fragment/vertex shaders for the experimental HDR pipeline. The main difference compared to the existing shaders is that we sample from the decoder in YUV rather than RGB (because the YUV -> RGB conversion in the graphics driver is not precisely defined, so we need to do this to get consistent results), which requires the use of ES 3, and then do a crude YUV -> RGB conversion in the shader (ignoring the input color primaries for now).
- When HDR editing is enabled, we force using `FrameEditor` (no passthrough) to avoid the need to select another edit operation, and use the new shaders. The `EGLContext` and `EGLSurface` also need to be set up differently for this path.

PiperOrigin-RevId: 425570639
2022-02-01 14:30:16 +00:00
andrewlewis
195d05dabd Switch from valueOf to parse methods
This fixes some warnings that show up in Android Studio (due to using methods
that autobox unnecessarily).

PiperOrigin-RevId: 424892352
2022-02-01 14:08:57 +00:00
andrewlewis
ce4a028829 Publish the transformer demo app
PiperOrigin-RevId: 424850283
2022-01-28 16:48:06 +00:00
olly
d2cc14a98b Fix some lint warnings
PiperOrigin-RevId: 424383900
2022-01-28 08:46:46 +00:00
olly
47fd32f1d4 Fix spurious unsupported tracks toast in demo apps
PiperOrigin-RevId: 424062588
2022-01-25 19:22:30 +00:00
huangdarwin
b7f5b5fac9 GL: Update BitmapOverlayVideoProcessor naming conventions.
To be more readable and consistent with Transformer GL.

Tested by running gl-demo with no crash.

PiperOrigin-RevId: 421815519
2022-01-25 18:20:39 +00:00
huangdarwin
65adbbb745 Transformer GL: Clarify variables and comments.
Simplifying and clarifying variables, and adding comments.

Tested by confirming demo-gl and demo-transformer both
correctly display videos

PiperOrigin-RevId: 421792079
2022-01-25 18:17:15 +00:00
ibaker
b1533980a8 Specify the video ID used in the Widevine DASH samples in the demo app
This value is the default used by widevine_test at
proxy.uat.widevine.com, but it's not easy to find that info so it's
clearer to document it explicitly here for consistency with the "policy
tests" section below where all the URLs contain a video_id parameter.

Issue: google/ExoPlayer#9852
PiperOrigin-RevId: 421781663
2022-01-25 18:15:53 +00:00
ibaker
bfce8f5456 Rename StyledPlayerView to PlayerView
This commit leaves some 'styled' references, specifically:
* exo_styled_XXX dimension names
* exo_styled_controls_XXX drawable IDs
* exo_styled_XXX color names
* ExoStyledControls.XXX style names

PiperOrigin-RevId: 421576554
2022-01-25 18:10:42 +00:00
christosts
63a32e85c5 Session demo: update playlist add/remove icons
PiperOrigin-RevId: 421256149
2022-01-25 17:53:42 +00:00
christosts
152e986c09 Fix typo
PiperOrigin-RevId: 421036800
2022-01-25 17:48:24 +00:00
bachinger
f06c79e441 Merge pull request #24 from PaulWoitaschek:patch-1
PiperOrigin-RevId: 419827570
2022-01-11 13:22:37 +00:00
ibaker
34a1f884dc Add MediaSource.Factory and deprecate MediaSourceFactory
This more closely matches the pattern we have for all implementations
except DefaultMediaSourceFactory (e.g. ProgressiveMediaSource.Factory)
and other factory interfaces like (Http)DataSource.Factory.

PiperOrigin-RevId: 417826803
2022-01-05 10:51:41 +00:00
tonihei
40d9838315 Rename HLS master playlist to multivariant playlist
The spec renamed this type of playlist in the latest revision
to use a more inclusive technical term (see
https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis-10)

PiperOrigin-RevId: 417560274
2022-01-05 10:41:06 +00:00
ibaker
691f9c50cf Migrate usages of deprecated MediaSourceFactory methods
PiperOrigin-RevId: 417428182
2022-01-05 10:40:02 +00:00
ibaker
9dae5fd2c0 Rename PlayerView to LegacyPlayerView in media3
The old name is kept in exoplayer2.

PiperOrigin-RevId: 417378759
2022-01-05 10:38:50 +00:00
ibaker
a24ffbd21b Fix StyledPlayerControlView reference in demo app's PlayerActivity
PiperOrigin-RevId: 416809105
2022-01-05 10:31:28 +00:00
ibaker
35bd0f46a4 Update the session demo app to refer to exo_styled drawables
This app uses the StyledPlayerView, so it should use the styled_
drawables.

PiperOrigin-RevId: 416315889
2022-01-05 10:14:25 +00:00
Paul Woitaschek
b28f5ca413
Refactor unintuitive lateinit usage 2021-12-28 22:54:19 +01:00
olly
6cc7d058a8 Remove stray test stream
PiperOrigin-RevId: 415516400
2021-12-10 16:03:49 +00:00
tonihei
422a003a03 Add some correctness checks to min/max live latency values.
For DASH manifests, we merge min/max live latency values from various
sources and they may not be consistent with each other. To ensure we
use a sensible configuration in all cases, we can add more correctness
checks:
 1. Limit the min/max values to fall into the available live window.
 2. Ensure that maxLatency >= minLatency in all cases.

Issue: google/ExoPlayer#9750
PiperOrigin-RevId: 415282938
2021-12-10 11:22:02 +00:00
Ian Baker
1a1d27aee6 Merge pull request #6 from dturner:add-artwork-images
PiperOrigin-RevId: 411524337
2021-11-22 17:21:14 +00:00
andrewlewis
5b22b06ec4 Encapsulate attributes and uniforms within Program
Document that apps should retain `GlUtil.Program` while the program is in use,
and keep a reference to attributes/uniforms within the program to make sure
they don't get GC'd causing any allocated buffers passed to GL to become
invalid.

Tested manually by running gldemo and transformer.

PiperOrigin-RevId: 411516894
2021-11-22 17:21:14 +00:00
ibaker
67a0e6d11c Fix javadoc reference to StyledPlayerView in cast demo app
This should have been done in
21e659ef8e

PiperOrigin-RevId: 411073049
2021-11-22 17:21:14 +00:00
ibaker
b82bcdd07b Migrate the GL demo app from PlayerView to StyledPlayerView
PiperOrigin-RevId: 411006397
2021-11-19 15:14:30 +00:00
andrewlewis
d49b39bf37 Fix gldemo
The GL program needs to be used before accessing its attributes.

#minor-release

PiperOrigin-RevId: 410768017
2021-11-19 15:08:07 +00:00
ibaker
21e659ef8e Migrate the cast demo app from PlayerView to StyledPlayerView
StyledPlayerControlView can't really be used on its own (like
PlayerControlView was used here), so we instead use the same
StyledPlayerView instance for both local and casted playback,
replacing the content with a cast icon while casting.

PiperOrigin-RevId: 410764338
2021-11-19 15:05:55 +00:00
olly
3b11822fa1 Add backwards compatibility with MediaBrowserService
PiperOrigin-RevId: 409290492
2021-11-19 14:43:22 +00:00
olly
fea552e709 Update dependency versions
Note: Updating androidxTestTruthVersion is required tot
arget API level 31.
PiperOrigin-RevId: 409167744
2021-11-19 14:42:25 +00:00
Don Turner
05a4526e61 Display album artwork in media notifications 2021-11-17 20:12:10 +00:00
ibaker
a06eb54b50 Remove usages of ParserException from the demo app
PiperOrigin-RevId: 408311942
2021-11-09 10:10:11 +00:00
ibaker
fc7b66706f Migrate GL demo from deprecated ExoPlayer.VideoComponent to ExoPlayer
#minor-release

PiperOrigin-RevId: 408304187
2021-11-09 10:10:11 +00:00
ibaker
1f1b12751a Migrate the demo app to use non-deprecated MediaItem Builders
#minor-release

PiperOrigin-RevId: 407843859
2021-11-09 10:10:10 +00:00
ibaker
088f4c5d08 Update the demo app to use the stable ExoPlayer.Builder constructor
The ExoPlayer.Builder constructor overloads are only needed for apps
trying to ensure certain classes are removed by R8/proguard, which isn't
relevant for the demo app.

PiperOrigin-RevId: 407819694
2021-11-09 10:10:10 +00:00
ibaker
8b34d160dc Fix implementations of MediaLibrarySessionCallback to pass params
The documentation makes it clear this value should be propagated
through to the result.

PiperOrigin-RevId: 407085751
2021-11-09 10:09:12 +00:00
ibaker
686f2ca96d Migrate usages of Window-based Player methods
Where this introduced an inconsistency (e.g. assigning to something
called `windowIndex`), I generally renamed the transitive closure of
identifiers to maintain consistency (meaning this change is quite
large). The exception is code that interacts with Timeline and Window
directly, where sometimes I kept the 'window' nomenclature.

#minor-release

PiperOrigin-RevId: 407040052
2021-11-09 10:07:30 +00:00
huangdarwin
7f64a5a1aa Transformer GL: Simplify GL program handling.
Relanding 9788750ddb, with some changes
applied to improve primarily readability, naming,
and nullness checks.

PiperOrigin-RevId: 406101742
2021-11-08 15:15:02 +00:00
ibaker
9a49a9ccda Remove all references to @NonNull
Our package-info.java files are annotated with @NonNullApi which results
in everything being non-null by default, so this annotation is never
needed.

#minor-release

PiperOrigin-RevId: 405864737
2021-10-27 17:48:40 +01:00
Andrew Lewis
933e207b3e Update to androidx.media3
PiperOrigin-RevId: 405656499
2021-10-27 09:12:46 +01:00
olly
f605165430 Add database module
PiperOrigin-RevId: 405626096
2021-10-26 14:19:43 +01:00
andrewlewis
0da494c613 Fix main demo gradle task name
PiperOrigin-RevId: 405592960
2021-10-26 14:04:30 +01:00
ibaker
218e0bf885 Demo: Fix NPE when restoring DRM info of a downloaded item
DrmConfiguration.Builder#setLicenseRequestHeaders now rejects null,
since 8fd1381a84

This private method isn't needed at all, it's extracting the headers
from the item that the DrmConfiguration.Builder is already based on.

PiperOrigin-RevId: 403973523
2021-10-18 17:24:36 +01:00
ibaker
422e68b48d Demo: Fix NPE in SampleChooserActivity
This prevents the demo app loading media.exolist.json. The exception
was introduced by
8fd1381a84

PiperOrigin-RevId: 403973062
2021-10-18 17:19:08 +01:00
olly
18cf01cda6 Move DataSource utils into a DataSourceUtil class
PiperOrigin-RevId: 403910535
2021-10-18 15:25:43 +01:00
ibaker
18b1f3d624 Migrate usages of DrmConfiguration.sessionForClearTypes to new field
The new forcedSessionTrackTypes field was introduced in
<unknown commit>.

These usages are migrated in a follow-up change to add confidence that
the deprecated field continued to work correctly.

PiperOrigin-RevId: 403342893
2021-10-18 14:56:46 +01:00
ibaker
61c8f8c27e Rename DrmConfiguration.sessionForClearTypes to forcedSessionTrackTypes
The previous name is quite easy to misread because it sounds like it
splits up like "(session) for (clear types)" when it's meant to be
"(session for clear) (types)".

The old field is left deprecated for backwards compatibility. The
DrmConfiguration.Builder methods are directly renamed without
deprecation because they're not yet present in a released version of
the library.

PiperOrigin-RevId: 403338799
2021-10-15 12:53:50 +01:00
samrobinson
3c19850ed3 Migrate library usages of SimpleExoPlayer to ExoPlayer.
PiperOrigin-RevId: 402853522
2021-10-14 12:03:11 +01:00
krocard
98ee159df1 Use TracksInfo and selection override in users
Update the UI module, the demos and most other users
to make use of the new player TracksInfo and track
selection override APIs.

PiperOrigin-RevId: 402817857
2021-10-14 11:54:45 +01:00
olly
8a9dcadef3 README updates for misc modules
PiperOrigin-RevId: 402292139
2021-10-12 19:40:44 +01:00
olly
e7c6ed5e7f Mechanical README cleanups
PiperOrigin-RevId: 401767060
2021-10-09 18:14:36 +01:00
olly
b03ebbeb89 Stop setting custom user agent in demo app
PiperOrigin-RevId: 401741202
2021-10-09 17:39:03 +01:00
ibaker
e4221c3844 Rollback of ed23b2905b
*** Original commit ***

Migrate callers of ExoPlayer.Builder#build() to buildExoPlayer()

An upcoming change will update build() to return Player.

PiperOrigin-RevId: 401468532
2021-10-07 21:53:57 +01:00
ibaker
f3fb03e663 Rollback of ce0cf23a7f
*** Original commit ***

Migrate callers of ExoPlayer.Builder#build() to buildExoPlayer()

An upcoming change will update build() to return Player.

***

PiperOrigin-RevId: 401453039
2021-10-07 21:50:01 +01:00
claincly
3eda590c87 Rollback of 9788750ddb
*** Original commit ***

Simplify GL program handling.

***

PiperOrigin-RevId: 400970170
2021-10-05 23:24:48 +01:00
claincly
9788750ddb Simplify GL program handling.
PiperOrigin-RevId: 400697945
2021-10-04 15:34:43 +01:00
ibaker
b192465bba Migrate usages of MediaItem.Subtitle to SubtitleConfiguration
Usages of the (already deprecated) Subtitle constructors were not
migrated, as it would require migrating to the Builder which is a more
involved change.

PiperOrigin-RevId: 400153139
2021-10-01 11:27:30 +01:00
ibaker
ce0cf23a7f Migrate callers of ExoPlayer.Builder#build() to buildExoPlayer()
An upcoming change will update build() to return Player.

PiperOrigin-RevId: 399981901
2021-09-30 21:36:14 +01:00
ibaker
f39dba0c5b Migrate usages of MediaItem.ClippingProperties to ClippingConfiguration
PiperOrigin-RevId: 399471555
2021-09-29 10:10:13 +01:00
ibaker
ed23b2905b Migrate callers of ExoPlayer.Builder#build() to buildExoPlayer()
An upcoming change will update build() to return Player.

PiperOrigin-RevId: 399382297
2021-09-28 16:38:20 +01:00
ibaker
a04f1d1726 Migrate usages of MediaItem.PlaybackProperties to LocalConfiguration
PiperOrigin-RevId: 399206106
2021-09-28 16:35:31 +01:00
ibaker
a194d73c75 Use the new MediaItem.Builder#setAdsConfiguration method
PiperOrigin-RevId: 398185843
2021-09-23 14:53:21 +01:00
ibaker
dd39513a2e Rename MediaItem.DrmConfiguration.requestHeaders to add license
Both license and provisioning requests could be considered 'DRM
requests', and these headers are only sent on license requests, so
rename them to reflect that.

The old field remains deprecated for backwards compatibility.

PiperOrigin-RevId: 397980021
2021-09-23 14:47:13 +01:00
ibaker
e804df8c1f Rename MediaItem.DrmConfiguration.uuid to scheme
The type is already UUID so there's no need to duplicate that info in
the field name, and 'scheme' is a widely used term throughout both
ExoPlayer and android.os.MediaDrm documentation.

The old field remains deprecated for backwards compatibility.

The MediaItem.DrmConfiguration.Builder#setUuid method is renamed
directly (without deprecation) because it's not yet part of a released
ExoPlayer version.

PiperOrigin-RevId: 397961553
2021-09-21 14:23:21 +01:00
ibaker
701be41534 Demo app: Fail fast if parsing invalid DRM config from JSON
These fields can't be used if `drm_uuid` isn't set. Make that case throw
an exception, so it's obvious to a developer what's wrong.

Most of the fields 'obviously' need `drm_uuid` to be set, but it's not
obvious for `drm_session_for_clear_content` (because it might be
reasonable to assume it's possible to play clear content without
specifying a UUID). This tripped me up in
https://github.com/google/ExoPlayer/issues/8842#issuecomment-833659808.

PiperOrigin-RevId: 397328556
2021-09-20 12:54:55 +01:00
ibaker
13827186aa Use the new MediaItem.Builder#setDrmConfiguration method
PiperOrigin-RevId: 397290953
2021-09-17 13:12:53 +01:00
olly
4ff4263af3 DownloadService: Minor improvements
* Avoid ActivityManager log spam by only calling startForeground once,
  and subsequently updating the notification via NotificationManager.
* Tweak demo app service to make it a tiny bit easier to swap the Scheduler.

PiperOrigin-RevId: 397179398
2021-09-17 11:53:39 +01:00
andrewlewis
469c0e756a Use @C.TrackType more widely
Also add `TYPE_USE` target on the @IntDef (and fix @Targets for other
@IntDefs).

#exofixit

PiperOrigin-RevId: 396333212
2021-09-14 12:04:11 +01:00
bachinger
2138bfb396 Add DASH samples with multiple base URLs
PiperOrigin-RevId: 395727438
2021-09-09 18:21:50 +01:00
kimvde
373db56a52 Add method to compile program from shader paths in GlUtil
This method will be useful for adding Open GL to the Transformer.

PiperOrigin-RevId: 394420744
2021-09-02 14:53:20 +01:00
olly
3f16730763 Support generating notifications for paused downloads
- Android 12 will not allow our download service to be
  restarted from the background when conditions that
  allow downloads to continue are met. As an interim
  (and possibly permanent) solution, we'll keep the
  service in the foreground if there are unfinished
  downloads that would continue if conditions were met.
- Keeping the service in the foreground requires a
  foreground notification. Hence we need to be able to
  generate a meaningful notification for this state.

PiperOrigin-RevId: 391969986
2021-08-20 16:25:43 +01:00
krocard
cd297b048a Make Track selection objects Bundleable
Most of those objects needs to be sent to MediaControler.

`TrackSelectior.Parameters` could have stayed Parcelable,
but it needs to be `Bundleable` as it inherit from
`TrackSelectionParameters` that is and needs to be
serializable anyway for the demo app.
As a result it has also been migrated to bundleable.

PiperOrigin-RevId: 391353293
2021-08-19 10:38:51 +01:00
olly
ef0bfa487f Remove previously deprecated DefaultHttpDataSourceFactory
NO_EXTERNAL

PiperOrigin-RevId: 391054962
2021-08-17 15:42:49 +01:00
claincly
21251e69a6 Revert unwanted changes.
PiperOrigin-RevId: 390319457
2021-08-12 16:31:51 +01:00
claincly
4ef0355884 Prototype video transcoding
The prototype is built upon Transformer and took many references from
TransformerAudioRenderer.

Please take a look and we can discuss more details.

PiperOrigin-RevId: 390192487
2021-08-12 16:30:21 +01:00
kimvde
01613a2e55 Remove usages of deprecated SimpleExoPlayer.Builder
PiperOrigin-RevId: 390130681
2021-08-11 17:34:19 +01:00
olly
7e8ba03147 Deprecate final non-nested Factory classes in upstream
PiperOrigin-RevId: 389661768
2021-08-09 20:07:24 +01:00
andrewlewis
9c27cfcda7 Fix parameter names on overridden methods
The dokka javadoc generation tool complains when parameter names don't match between a method and its override. This change updates occurrences where there is currently a mismatch.

Notable renamings that might be controversial:
- `onPlaybackStateChanged(int state)` to `onPlaybackStateChanged(int playbackState)` affected a lot of lines but seems more consistent with other '-Changed' methods.
- `handleMessage(int messageType, Object payload)` to `handleMessage(int messageType, Object message)`
- `ExtractorInput` and `DataSource` inherit `DataReader` which had `read(byte[] target, ...`, while data sources normally called the first parameter `buffer`. I have standardized these all to use `buffer` even though it looks out of place in the `ExtractorInput` interface (which has more `read` methods with `target`).

PiperOrigin-RevId: 387290360
2021-07-28 09:15:29 +01:00
ibaker
fa9a4521ce Remove Big Buck Bunny FLV asset from Demo app media.exolist.json
This URL no longer resolves.

#minor-release

Issue: #9205
PiperOrigin-RevId: 385772688
2021-07-21 14:42:45 +01:00
olly
dea52048cb Bump dependency versions
PiperOrigin-RevId: 382277352
2021-06-30 13:53:01 +01:00
olly
7aaba1ffe5 Migrate usage of Player.EventListener to Player.Listener
PiperOrigin-RevId: 381837274
2021-06-30 13:43:51 +01:00
olly
bcd4bb87e5 Deprecate CronetEngineWrapper
PiperOrigin-RevId: 381239971
2021-06-30 13:32:43 +01:00
aquilescanta
fc26d4eeb1 Remove the last deprecated ParserException constructor
PiperOrigin-RevId: 381221669
2021-06-30 13:27:45 +01:00
aquilescanta
fc1d3dd192 Make onPlayerError take a PlaybackException
PiperOrigin-RevId: 380174672
2021-06-21 22:15:01 +01:00
olly
d68dba6e34 Use relative naming for demo app components
PiperOrigin-RevId: 379506322
2021-06-15 18:46:45 +01:00
aquilescanta
536f7c8dbe Make StyledPlayerView depend on PlaybackException
PiperOrigin-RevId: 377480089
2021-06-08 12:53:22 +01:00
andrewlewis
2260678bee Fix texture transformation in gldemo
`SurfaceTexture` provides a transform matrix with each buffer. Previously
gldemo ignored this but it is important to apply it to have the video render
properly.

The transformation matrix from the surface texture includes flipping so this
change removes the hard-coded flipping from `a_texcoord`.

Issue: #8992

#minor-release

PiperOrigin-RevId: 377271389
2021-06-03 19:59:43 +01:00
bachinger
095e2feb20 Enable source code formatting
PiperOrigin-RevId: 375979170
2021-05-27 10:42:22 +01:00
aquilescanta
6a8b9557cc Use ERROR_CODE_BEHIND_LIVE_WINDOW instead of instanceof checks
PiperOrigin-RevId: 375514509
2021-05-26 11:29:16 +01:00
olly
6d3e9fc251 Include MediaSource deps in all demo apps
This is mainly so that developers can try out RTSP with
the main demo app without having to change the build.gradle
file.

The change also aligns what media can be played across the
different demo apps.

#minor-release

PiperOrigin-RevId: 373591974
2021-05-13 17:26:08 +01:00
samrobinson
2914e574e6 Rename MediaMetadata trackTitle and trackArtist to title and artist.
#minor-release

PiperOrigin-RevId: 372537414
2021-05-07 14:58:03 +01:00
bachinger
4c1a294b2e Format Java source files
PiperOrigin-RevId: 372127633
2021-05-06 13:32:25 +01:00
krocard
ffe31be08b Deprecate component listener in favor of player
All `add*Listener` and `add*Output` methods are
deprecated in favor of `addListener`.

As for the class themselves `VideoListener` and
`AudioListener` are not used internaly by ExoPlayer,
`VideoRendererEventListener`
and `AudioRendererEventListener` are use in their
place.
As a result `VideoListener` and `AudioListener`
can be deprecated in favor `Listener`.

On the other hand `TextOutput` and `MedataOutput`
are used both in the player interface and internally in
renderers.
This means that those class can't be deprecated.
There usage in the public interface are indirectly
deprecated as their is no way to use them without
using the deprecated `add*Output`.
Thus it's not an issue that the class themselves are
not deprecated.

#minor-release

PiperOrigin-RevId: 371318268
2021-04-30 18:55:06 +01:00
samrobinson
3f3d1fb5f2 Change String MediaMetadata.title to CharSequence trackTitle.
PiperOrigin-RevId: 370439509
2021-04-26 18:29:01 +01:00
Andrew Lewis
2a0b45ac77 Merge pull request #8852 from abeljim:dev-v2
PiperOrigin-RevId: 370407108
2021-04-26 18:01:53 +01:00
krocard
08336e372d Rollforward of Move VideoComponent to ExoPlayer
The original cl has been fixed by not implementing
VideoListener but Player.Listener in
StyledPlayerView.

VideoFrameMetadataListener and CameraMotionListener are still part
of the Player interface as a good way to break the UI dependency
on them has not yet been finalised.

PiperOrigin-RevId: 369417682
2021-04-20 14:02:48 +01:00
ibaker
6550ea88ea Rollback of cdebf6c68b
*** Original commit ***

Move VideoComponent in ExoPlayer

VideoFrameMetadataListener and CameraMotionListener are still part
of the Player interface as a good way to break the UI dependency
on them has not yet been finalised.

***

PiperOrigin-RevId: 369194309
2021-04-20 00:09:45 +01:00
krocard
cdebf6c68b Move VideoComponent in ExoPlayer
VideoFrameMetadataListener and CameraMotionListener are still part
of the Player interface as a good way to break the UI dependency
on them has not yet been finalised.

PiperOrigin-RevId: 368863829
2021-04-20 00:08:08 +01:00
olly
3ab344c218 Fix 1 ErrorProneStyle finding:
* The Google Java Style Guide requires that each switch statement includes a default statement group, even if it contains no code. (This requirement is lifted for any switch statement that covers all values of an enum.)
  (see http://go/bugpattern/MissingDefault)

This CL looks good? Just LGTM and Approve it!
This CL doesn’t look good? This is what you can do:
* Suggest a fix on the CL (go/how-to-suggest-fix).
* Revert this CL, by replying "REVERT: <provide reason>"
* File a bug under go/error-prone-bug for category ErrorProneStyle if the change looks generally problematic.
* Revert this CL and not get a CL that cleans up these paths in the future by
replying "BLOCKLIST: <provide reason>". This is not reversible! We recommend to
opt out the respective paths in your CL Robot configuration instead:
go/clrobot-opt-out.

This CL was generated by CL Robot - a tool that cleans up code findings
(go/clrobot). The affected code paths have been enabled for CL Robot in //depot/google3/java/com/google/android/libraries/exoplayer/METADATA which is reachable following include_presubmits from //depot/google3/third_party/java_src/android_libs/exoplayer/METADATA.
Anything wrong with the signup? File a bug at go/clrobot-bug.

#codehealth

PiperOrigin-RevId: 368586454
2021-04-15 10:53:47 +01:00
Ian Baker
e2abc961b2 Merge pull request #8749 from romanofranz:patch-1
PiperOrigin-RevId: 364779790
2021-03-24 18:07:35 +00:00
Francesco Romano
846498287c
Update IntentUtil.java to parse title (metadata)
Added the String title in the Intent so MediaMetadata.title can be populated correctly for single media items. This is useful to query PlayerActivity about what it is currently playing.
2021-03-23 16:09:01 +01:00
tonihei
bc9fb8615e Use correct period-window offset for initial prepare position.
MaskingMediaSource needs to resolve the prepare position set for a MaskingPeriod
while the source was still unprepared to the first actual prepare position.

It currently assumes that the period-window offset and the default position is
zero. This assumption is correct when a PlaceholderTimeline is used, but it
may not be true if the real timeline is already known (e.g. when re-preparing
a live stream after a playback error).

Fix this by using the known timeline at the time of the preparation.
Also:
 - Update a test that should have caught this to use lazy re-preparation.
 - Change the demo app code to use the recommended way to restart playback
   after a BehindLiveWindowException.

Issue: #8675
PiperOrigin-RevId: 361604191
2021-03-12 10:40:15 +00:00
Ian Baker
49c282d6fa Merge pull request #8677 from dlafayet:ttml
PiperOrigin-RevId: 361106701
2021-03-12 10:38:59 +00:00
aquilescanta
1c40c75433 Use a debug signature config for demo apps' release variant
PiperOrigin-RevId: 359724874
2021-03-02 17:02:55 +00:00
bachinger
36cbcb30b6 Set explicit export attributes in all demo apps
Starting with Android 12 all components of an app that have an intent filter need to have an explicit attribute android:export that is set to either true or false. If a component filters for the MAIN or a VIEW action it needs the attribute explicitly set to true. Prior to Android 12 these were exported implicitly.

See https://medium.com/androiddevelopers/lets-be-explicit-about-our-intent-filters-c5dbe2dbdce0

PiperOrigin-RevId: 358368785
2021-02-22 10:34:58 +00:00
olly
0dba806894 Move DebugTextViewHelper to core
It's closely tied to SimpleExoPlayer, so cannot be part of a UI module
that depends only on common.

PiperOrigin-RevId: 357085802
2021-02-12 16:40:05 +00:00
olly
a1f06987eb Replace non-inclusively named constant
Issue: #7565
PiperOrigin-RevId: 353649187
2021-01-25 17:38:26 +00:00
olly
ba1ebe7844 Clarify how cookies are handled (or not) in the demo app
1. Remove cookie manager logic from PlayerActivity, since it has
   no effect when Cronet is used (which is now the default)
2. Add toggle in DemoUtil to use Cronet or the default network
   stack. Configure the cookie manager only when using the default
   network stack

PiperOrigin-RevId: 350922671
2021-01-11 18:04:53 +00:00
olly
2a5f6d8f62 Improve user-agent configuration
- Support setting the user-agent in CronetDataSource
- Support setting the default user-agent in CronetEngineWrapper
- Use the underlying network stack's default user-agent by
  default. Many applications will configure the underlying
  CronetEngine or OkHttpClient with a user-agent that they
  expect to be used throughout their app, so always overriding
  this with our own default, on reflection, is not the best
  thing to do!

Issue: #8395
PiperOrigin-RevId: 350921963
2021-01-11 18:04:43 +00:00
andrewlewis
456622a275 Deprecate stop(boolean)
`stop(true)` is almost the same as `clearMediaItems(); stop();`, except that
any player error isn't cleared. Clearing media items more clearly expresses the
intent.

PiperOrigin-RevId: 350516748
2021-01-07 10:45:02 +00:00
olly
686d11de1b Force PlayReady license URL
The media specifies a URL that uses http rather than https, which the
demo app doesn't permit by default. The URL here is the same except it
uses https instead.

#minor-release

PiperOrigin-RevId: 348445571
2020-12-23 22:51:46 +00:00
bachinger
62720858ed Make CronetDataSourceFactory an inner class of CronetDataSource
#exofixit

PiperOrigin-RevId: 348444280
2020-12-23 22:51:38 +00:00
andrewlewis
4446e2637d Fix unexpected multiline comments
#exofixit

PiperOrigin-RevId: 344517105
2020-11-30 09:32:25 +00:00
olly
1d4d5887c0 Clean up demo app samples
- Retire YouTube streams. They're flaky (e.g., one of them has transformed into
  an audio only stream!). There is also a desire for us to stop relying on special
  non-expiring YouTube URLs.
- Reorganize the remaining streams.

PiperOrigin-RevId: 344421031
2020-11-27 11:08:26 +00:00
olly
2fbad2105e Make special exception for cleartext-not-permitted
#exofixit

PiperOrigin-RevId: 344246408
2020-11-27 11:07:07 +00:00
andrewlewis
866c7f85f8 Allow playing ads in playlists
- Remove restriction on `AdsMediaSource`s in playlists in `ExoPlayerImpl`.
- Allow playing playlists of `AdsMediaSource`s in the demo app.
- Add a sample with ads in a playlist in the demo app.

Issue: #3750
PiperOrigin-RevId: 344018774
2020-11-24 16:03:04 +00:00
tonihei
d4e1904604 Rollback of 483a350e84
*** Original commit ***

Suppress warnings in preparation for Checker Framework 3.7.1 upgrade.

LSC: go/checker-lsc

Tested:
    TAP train for global presubmit queue
    http://test/OCL:342788973:BASE:342817196:1605636478036:6c558c0c

***

PiperOrigin-RevId: 343895651
2020-11-24 16:02:45 +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
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
483a350e84 Suppress warnings in preparation for Checker Framework 3.7.1 upgrade.
PiperOrigin-RevId: 342999390
2020-11-18 18:40:06 +00:00
christosts
dc86b625c5 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-13 14:55:38 +00:00
bachinger
b03df4e8b5 Add dispatchPrepare(player) to ControlDispatcher
Issue: #7882
PiperOrigin-RevId: 341394254
2020-11-11 09:49:32 +00:00
andrewlewis
5fd1601f91 Signal an ads identifier to the AdsLoader
In a later change, the AdPlaybackState will include the playing adsId (set by
the AdsLoader) and the ads loader will use this to determine what ad
information is associated with the playing/next periods, to allow loading ads
in playlists.

Apps can continue to pass just a URI for an ad tag with their MediaItem, in
which case the associated playlist will request that ad tag just and the same
state will be used for all occurrences of the ad tag.

This change has breaking changes to the AdsLoader interface and removes
deprecated ways of passing the ad tag, as it's very likely to go into a major
release anyway and not needing to handle the deprecated cases simplifies
ImaAdsLoader.

Issue: #3750
PiperOrigin-RevId: 340438580
2020-11-06 16:32:31 +00:00
andrewlewis
32a72fa237 Add sample for testing skippable ads in midrolls
#minor-release

PiperOrigin-RevId: 339447845
2020-11-02 22:58:25 +00:00
ibaker
2371b024dd Switch to an 'api' dependency on Guava
The 'implementation' dependency causes problems when resolving
ListenableFuture in contexts that also include the
com.google.guava:listenablefuture:1.0 dependency.

Issue: #7905
Issue: #7997
Issue: #7993
PiperOrigin-RevId: 337093024
2020-10-17 01:34:15 +01:00
andrewlewis
ac782235ca Fix miscellaneous nits/typos
PiperOrigin-RevId: 335642909
2020-10-06 16:57:31 +00:00
andrewlewis
39277ebe95 Pass ad tags via AdsMediaSource
This is in preparation for supporting playlists of ads media sources using
ImaAdsLoader.

Existing ways of passing ad tags should still function but are deprecated (and
won't be supported with playlists).

Issue: #3750
PiperOrigin-RevId: 335618364
2020-10-06 14:31:50 +01:00
Oliver Woodman
19a0258bac Merge pull request #7798 from yoobi:trackSelectionView
PiperOrigin-RevId: 333751261
2020-09-25 17:49:12 +01:00
ibaker
d3639a2b20 Add Japanese subtitle examples to the demo app
These are from https://medium.com/google-exoplayer/improved-japanese-subtitle-support-7598fee12cf4

PiperOrigin-RevId: 333296789
2020-09-25 16:31:11 +01:00
christosts
7b5b8b2d79 Fix bug in offline DRM downloads
PiperOrigin-RevId: 331955966
2020-09-16 13:34:16 +01:00
olly
bff7ac0dbe Clean up some lint warnings
PiperOrigin-RevId: 331162350
2020-09-11 17:31:03 +01:00
olly
cdcb30ed21 Exclude Guava transitive annotation dependencies
PiperOrigin-RevId: 331148067
2020-09-11 16:01:15 +01:00
olly
b2b08ade99 Make User-Agent optional
PiperOrigin-RevId: 330593247
2020-09-09 09:41:51 +01:00
olly
04f67e4adc Simplify DefaultMediaSourceFactory ad configuration
- Use a setter, which is consistent with how other optional
  components are passed.
- Remove nesting where a provider provides another provider.
  Since AdSupportProvider then only provides one thing, it
  can be renamed to AdsLoaderProvider, which more clearly
  expresses what it provides.

PiperOrigin-RevId: 330396334
2020-09-07 20:43:41 +01:00
olly
fe2fc8b73f Add useful DownloadRequest to MediaItem conversion method
PiperOrigin-RevId: 329722775
2020-09-07 20:42:14 +01:00
insun
3ab9bc8e7f Fix internal demo app crash
Internal demo app crashed when device does not support required DRM scheme.
This CL fixes it.

PiperOrigin-RevId: 329653841
2020-09-07 20:40:41 +01:00
olly
440fd1cf62 Some minor tweaks
1. Add EventLogger right away in PlayerActivity, else it doesn't log
   playWhenReady being initially set to true.
2. Remove EventLogger logging for the audio position advancing. It's
   redundant with isPlaying logging unless you're very specifically
   interested in the timing difference.
3. Remove unnecessary comment in Player.
4. Fix Timeline Javadoc.

PiperOrigin-RevId: 328983944
2020-09-07 20:39:36 +01:00
christosts
603dcf4978 Download offline DRM license from non-UI thread
PiperOrigin-RevId: 328904901
2020-09-07 20:38:48 +01:00
Yo Ob
869981a360
Merge branch 'dev-v2' into trackSelectionView 2020-08-28 11:36:59 +02:00
Yoni Obadia
181676d950 dev: adding sorting for TrackSelectionDialog and TrackSelectionDialogBuilder 2020-08-24 15:13:21 +02:00
olly
7588c26b60 Remove support for cbc1 and cens encryptions schemes
PiperOrigin-RevId: 327199833
2020-08-21 12:48:39 +01:00
aquilescanta
fcb263a407 Make DrmSessionManager take a Format instead of DrmInitData
Skipping acquirePlaceholderSession which will be removed
in a following change.

PiperOrigin-RevId: 326402746
2020-08-17 16:11:17 +01:00
olly
6f7524521b Demo app: Update concatenation terminology to use "playlist"
PiperOrigin-RevId: 326401528
2020-08-17 16:11:08 +01:00
olly
5220c70c5e Demo app: Rename drm_license_url to drm_license_uri
It's quite hard to document drm_force_default_license_uri when the
actual license URI uses "url" terminology. This brings the two in
line.

PiperOrigin-RevId: 326283162
2020-08-17 16:10:22 +01:00
olly
a7b1b56064 Demo app: Remove is_live from exolist.json
It's not used in the public exolist.json file. It's only use is to
disable the download icon for live content, but it's quite easy to
forget (there are live samples in our internal exolist.json files
that omit this property!).

It's better just to show a clear error message toast when the
download actually fails for this reason.

PiperOrigin-RevId: 326281649
2020-08-17 16:10:13 +01:00
olly
a8a32d6bec Demo app: Minor simplifications
- Simplify the ability to use placeholder DRM sessions to a boolean
- Remove unused IS_LIVE entry in the intent

PiperOrigin-RevId: 326280149
2020-08-17 16:10:03 +01:00
andrewlewis
a7a364d567 Remove unused local intent
PiperOrigin-RevId: 326216921
2020-08-17 16:09:28 +01:00
olly
361e5d9326 Demo app: Fix DRM support check for ClearKey
Issue: Issue: #7735
PiperOrigin-RevId: 325900705
2020-08-17 16:08:15 +01:00
olly
805cfb0259 Revert spurious sample update
PiperOrigin-RevId: 325419476
2020-08-07 19:04:28 +01:00
christosts
a5e6e3054d Offline DRM in main demo app
PiperOrigin-RevId: 325413035
2020-08-07 19:04:09 +01:00
olly
b9612bc338 Fix codec initialization data for Opus in MP4
PiperOrigin-RevId: 325327466
2020-08-07 19:03:40 +01:00
olly
be88143fcd Remove deprecated parts of demo app IntentUtil
PiperOrigin-RevId: 324604419
2020-08-07 18:59:11 +01:00
christosts
33fe3a47e3 Remove references to Downloads from IntentUtil
PiperOrigin-RevId: 324599130
2020-08-07 18:59:01 +01:00
christosts
abfe7a2314 Support clip start/end points in demo app
Demo app supports clip start/end points and demonstrates manual
ad insertions.

PiperOrigin-RevId: 324574358
2020-08-07 18:58:41 +01:00
ibaker
132cff1e47 Add an example of tx3g subtitles in an MP4 container
Issue: #7677
PiperOrigin-RevId: 324180797
2020-08-01 12:56:48 +01:00
christosts
6054bda028 Statically import assertions
PiperOrigin-RevId: 323769467
2020-08-01 12:55:27 +01:00
olly
4b3463ab45 Simplify internal demo app
- Enable cleartext by default for the internal demo app
- Remove "external" variant of the internal demo app

PiperOrigin-RevId: 322987978
2020-07-27 23:58:49 +01:00
aquilescanta
0f346c8c2f Fix withDecoderExtensions flavor detection in internal demo app
PiperOrigin-RevId: 322781213
2020-07-24 10:47:58 +01:00
olly
d77ce9eda0 Remove deprecated calls to external APIs
PiperOrigin-RevId: 322346067
2020-07-24 10:43:44 +01:00
claincly
73df8e4a26 Removes spherical stereo play back mode
- Removed corresponding playback examples in the resouce JSON files.
- Removed the spherical style declaration.
- Removed spherical stereo mode related Intent settings, and
- Removed code to play back media in spherical stereo mode

BUG=160460714
(grafted from 595fe17a480d5bc64d0198130150d8e8a5daa679)
PiperOrigin-RevId: 322206314
2020-07-24 10:42:03 +01:00
claincly
811921e618 Removes random ABR support in demo app
- Removed random ABR option from popup menu
- Remvoed intent parameter regarding random abr, default to
   AdaptiveTrackSelection. Removed logic for getting track selection
   mode from an intent
- Remvoed string definition regarding random ABR

PiperOrigin-RevId: 322167816
2020-07-24 10:41:45 +01:00
andrewlewis
9594aa45ff Move functionality from DemoApplication to DemoUtil
https://developer.android.com/reference/android/app/Application recommends
against subclassing application.

PiperOrigin-RevId: 322163812
2020-07-24 10:41:27 +01:00
olly
0cd15d9158 Proactively check listener arguments are non-null
PiperOrigin-RevId: 322143359
2020-07-24 10:40:24 +01:00
claincly
72728ba054 Remove Media Tunneling support in demo app
- Removed Tunneling option from popup menu
- Removed intent parameter regarding tunneling
- Removed string definition regarding tunneling

PiperOrigin-RevId: 322123578
2020-07-24 10:39:48 +01:00
andrewlewis
7fce04a67f Depend on the IMA extension in noExtensions variant
Also use the cronet extension in the demo app.

PiperOrigin-RevId: 322108530
2020-07-24 10:39:03 +01:00
andrewlewis
a8b64f9530 Remove extra MediaItem in demo app
PiperOrigin-RevId: 322094331
2020-07-24 10:38:53 +01:00
tonihei
3b26c218e1 Deduplicate clear playlist code for stop(true) calls.
The logic to clear the playlist is currently duplicated in various
reset methods so that calls to player.stop(true) can clear the playlist.

This can be deduplicated by clearing the playlist as a seperate
operation that reuses the existing code.

PiperOrigin-RevId: 321578759
2020-07-24 10:37:50 +01:00
insun
79c14cb801 Renamed PlayerActivity2 to InternalPlayerActivity and refactored
- Rename PlayerActivity2 to InternalPlayerActivity.
- Reduced code duplications.

PiperOrigin-RevId: 321515231
2020-07-24 10:36:56 +01:00
insun
aa67685071 Apply StyledPlayerView into default demo app
PiperOrigin-RevId: 321280295
2020-07-24 10:35:06 +01:00
ibaker
2f19b63ca0 Add package-info files to packages that only exist in tests
This doesn't affect the nullness checker or Kotlin, but it does make
weird warnings appear in Android Studio. It seems mildly preferable to
have the same spurious warnings in these files that we have in other
tests, rather than different spurious warnings.

PiperOrigin-RevId: 321173760
2020-07-24 10:34:12 +01:00
ibaker
e9a8335381 Migrate callers to pass MediaItem to createMediaSource()
createMediaSource(Uri) is deprecated.

PiperOrigin-RevId: 321121383
2020-07-24 10:31:22 +01:00
olly
21e56f571d Misc analysis fixes
PiperOrigin-RevId: 320921457
2020-07-13 14:04:29 +01:00
aquilescanta
968a0baa8d Fix handling of intents with no license server URI
PiperOrigin-RevId: 319497156
2020-07-03 15:31:20 +01:00
olly
5be6eaa88c Make GL demo easier to understand
PiperOrigin-RevId: 319007693
2020-07-03 09:00:28 +01:00
olly
314bc65d62 Enable download parallelisation in demo app
- Deprecate constructors that don't take an executor, to direct
  developers toward the new ones. Callers can trivially pass
  Runnable::run to one of the new ones if they want old behaviour.
- Add comment explaining warning suppression added in the CL that
  added parallelised download support.

Issue: #5978
PiperOrigin-RevId: 318803296
2020-06-29 14:38:51 +01:00
insun
d5f029315c Cleanup deprecated SimpleExoPlayerView and PlaybackControlView
PiperOrigin-RevId: 318152038
2020-06-26 11:14:13 +01:00
ibaker
06c17f5152 Redefine numeric Cue.line in terms of viewport lines, ignore lineAnchor
Numerical lines conceptually map to a grid of lines in the viewport,
with the Cue text lines being aligned to one of the viewport lines.

It doesn't make sense to position a single-line cue differently based
on lineAnchor when it's expected to 'snap' to a particular line on the
viewport grid. So we redefine the position to be in terms of the cue
lines rather than the bounds of the cue box.

It's also not possible to always handle ANCHOR_TYPE_MIDDLE when
lineType=NUMBER (as it relies on the number of lines in the cue being
odd), so it's easier to ignore lineAnchor completely.
PiperOrigin-RevId: 318034664
2020-06-26 11:13:33 +01:00
tonihei
1836f1df36 Update Checkerframework.
The compat dependency is no longer maintained and we need to keep
it at its old version.

PiperOrigin-RevId: 317658349
2020-06-23 11:07:34 +01:00
andrewlewis
aec5ff8be1 Fix incorrect rounding of ad cue points
We currently get float ad cue points from IMA, but store these as
longs in microseconds. The cast from double to long would take the
floor of the value, which could lead to stored ad cue points being
off-by-one. Use Math.round to avoid this.

ImaAdsLoader also has code to map a double AdPodInfo position (which
should match a cue point) onto the corresponding ad group index by
searching the long ad cue points. Match the calculation used where we
map float cue points, including narrowing the position to a float
first to avoid regressions if IMA SDK behavior changes to represent
positions in more than float precision later, and also remove the
requirement that the ad positions match exactly as a defensive
measure.

PiperOrigin-RevId: 317607017
2020-06-23 11:06:49 +01:00
Oliver Woodman
2fcd759edb Merge pull request #7479 from sravan1213:dev-v2
PiperOrigin-RevId: 315794031
2020-06-11 10:11:30 +01:00
sravan1213
c3282c9a37 Propagate download exception through onDownloadChanged callback 2020-06-08 18:51:54 +05:30
andrewlewis
c13be44f68 Add one hour on-demand test video
PiperOrigin-RevId: 314100932
2020-06-01 14:59:56 +01:00
andrewlewis
eddc2b0b33 Enable multidex for demos
This is necessary now we have Guava in debug (no-minified) apps.

Also switch to AndroidX multidex to remove the support library dependency.
Temporarily we need to add an Application class, as internal jetification
doesn't seem to handle declaring MultiDexApplication in AndroidManifest.xml.

issue:#7421
PiperOrigin-RevId: 313145023
2020-05-27 18:59:43 +01:00
olly
03d9375872 Fix demo app persistent sample selection
It currently crashes if the samples change such that the persisted
position is no longer within bounds.

PiperOrigin-RevId: 312554337
2020-05-21 17:09:32 +01:00
olly
f38a1015ae Adding instructions on how to build and run ExoPlayer demo apps
Issue:#7338
PiperOrigin-RevId: 312470913
2020-05-21 17:08:53 +01:00
bachinger
d233c04582 Simplify DownloadHelper
PiperOrigin-RevId: 312467496
2020-05-21 17:08:43 +01:00
olly
b9abe2d0d6 Clean up samples list
- Add Widevine AV1 streams
- Remove SD and HD only Widevine streams (we don't need so many!)
- Simplify naming

PiperOrigin-RevId: 311697741
2020-05-15 10:59:07 +01:00
bachinger
fefb2a03c2 Provide a constructor that does not require a context
The only reason to require a context for creating an instance of
DefaultMediaSourceFactory is creating a user agent. DownloadHelper
has a bunch of static methods that need to instantiate a
DefaultMediaSourceFactory without a Context. By adding a setter for
the user agent we can remove that restriction and use a default user
agent.

PiperOrigin-RevId: 311291603
2020-05-14 22:22:42 +01:00
bachinger
66fd81401b Add forceDefaultLicenseUri to MediaItem.DrmConfiguration
ISSUE: #7114
PiperOrigin-RevId: 311115835
2020-05-14 22:21:58 +01:00
bachinger
b22783f895 Rename sourceUri to uri
PiperOrigin-RevId: 308918151
2020-05-01 19:46:04 +01:00
andrewlewis
008d38d832 Reattach player to ads loader on resume
When pausing and resuming a playback using an AdsLoader
it is necessary to call setPlayer again. This fixes an
issue where playback was stuck in the buffering state
when pausing and resuming an ad playback in the demo app.

PiperOrigin-RevId: 308582143
2020-04-27 11:34:29 +01:00
bachinger
1323dd63d5 Remove Sample from SampleChooserActivity
Unmarshal from json to MediaItem instead of Sample. Further the playlist
of MediaItems is converted to Intent extras which are read by the
PlayerActivity.

PiperOrigin-RevId: 308141231
2020-04-27 10:41:33 +01:00
olly
4abaaf138c Remove DownloadConstructorHelper
Something that helps a constructor always seemed a bit strange.
It's now possible to use CacheDataSource.Factory directly instead.

PiperOrigin-RevId: 307661930
2020-04-27 10:39:34 +01:00
bachinger
628234fd1f Read media items from intent
PiperOrigin-RevId: 307442976
2020-04-27 10:18:41 +01:00
bachinger
8ea33e2315 Support ad tag with default media source
This is the missing attribute to support all features of the Sample with MediaItem. Hence PlayerActivity can use the setMediaItems() method directly without creating actual media sources in the app code.

PiperOrigin-RevId: 307102036
2020-04-20 13:28:56 +01:00
bachinger
d7280f096f Add custom cache key to media item
This is required to migrate the PlayerActivity away from Sample to MediaItem. It hence needs adding buildUpon to MediaItem to mix in the customCacheKey and streamKeys before playback.

PiperOrigin-RevId: 306710643
2020-04-17 10:44:16 +01:00
olly
a99288a6fa Pass UriSample to DownloadTracker
PiperOrigin-RevId: 306469450
2020-04-15 17:42:18 +01:00
olly
2e51182f53 Update misc dependencies
PiperOrigin-RevId: 305503804
2020-04-08 21:49:03 +01:00
olly
376d02ac3f Upgrade cast dependency
Issue: #7191
PiperOrigin-RevId: 305502293
2020-04-08 21:48:45 +01:00
bachinger
4e2a0f6032 simplify PlayerActivity towards using the media item only
PiperOrigin-RevId: 305300409
2020-04-08 21:47:48 +01:00
olly
8d2bc7d182 Audio focus: Re-request audio focus if in a transient loss state
This avoids cases where audio focus is never successfully acquired
because another app is holding on to transient audio focus indefinitely.

Issue: #7182
PiperOrigin-RevId: 305108528
2020-04-07 13:38:42 +01:00
bachinger
dc4118da7b add clearTrackTypes and playClearContentWithoutKey to DrmConfiguration
With these additional properties, we can declare the behaviour for clear tracks and clear content on a media item level.

PiperOrigin-RevId: 304351716
2020-04-06 13:26:29 +01:00
olly
ce297d40b1 Fix external build
PiperOrigin-RevId: 303757995
2020-03-30 17:35:08 +01:00
bachinger
315ba6f324 add subtitle to the media item
PiperOrigin-RevId: 303753642
2020-03-30 17:17:44 +01:00
olly
e90fdf36fb Handle orientation changes in GL demo
Issue: #7141
PiperOrigin-RevId: 303334072
2020-03-27 23:32:58 +00:00
bachinger
777d99da8a simplify PlayerManager
PiperOrigin-RevId: 303170259
2020-03-27 23:31:29 +00:00
bachinger
d0fc83ed8a Playlist API: move media item based API to Player
This moves the playlist API methods to the Player interface. Implementation is moved from ExoPlayerImpl to BasePlayer where possible.

Further the CastPlayer is changed to implement the Player interface. Proper migration of the Playermanager to not use the ConcatenatingMediaSource anymore follows in a separate, future CL.

PiperOrigin-RevId: 302937779
2020-03-27 23:30:46 +00:00
olly
c3cbccbbf8 Update Activity and fragment libraries from aosp-androidx-master-dev with build id #6325864(2020-03-23) to google3
LSC doc: go/android-sdk-lsc , go/androidx-lsc

Global presubmit: https://tap.corp.google.com/ui#id=OCL:300623192:BASE:302596264:1585028366422:76f628fd

PiperOrigin-RevId: 302749181
2020-03-25 13:05:50 +00:00
olly
af00d91f79 Request storage permission if missing
PiperOrigin-RevId: 302345647
2020-03-25 13:02:36 +00:00
aquilescanta
aa9eb5abc9 Remove generics from DRM components
PiperOrigin-RevId: 301798563
2020-03-20 12:48:50 +00:00
bachinger
510f5edd1d Remove cast media item
PiperOrigin-RevId: 301224632
2020-03-19 00:48:22 +00:00
olly
0d230d517a Miscellaneous cleanup related to recent changes
PiperOrigin-RevId: 300067561
2020-03-11 16:26:41 +00:00
bachinger
a5f0eb1e10 replace extension with mime type
This change uses mime types in a functionally equivalent way to how we used the extension hint so far.

Using a mimeType instead of the extension has some advantages. Most importantly mimeTypes are used by the cast SDK with which we want to achieve interoperability in the cast extension.

Using a mimeType instead of the extension hint further appears to be a bit more clear (which might be opinionated). Further mime types are a well known and widely used concept to identify file type on the internet and it provides asterix based generalizations (audio/*, */*) which could express the media type OTHER that ExoPlayer is using internally (no usage of asterix required so far though).

PiperOrigin-RevId: 300058945
2020-03-11 16:26:23 +00:00
bachinger
041a0696b7 remove UriBundle
PiperOrigin-RevId: 299361095
2020-03-10 10:20:47 +00:00
krocard
1f4156ce6d Restore the demo list position on start
It's quite anoying to have to search in the list
the last item played everytime the demo is restarted.

Fix that by saving and restoring it.

PiperOrigin-RevId: 299109261
2020-03-10 10:19:53 +00:00
bachinger
4517829610 add DefaultMediaSourceFactory and use it in PlayerActivity
PiperOrigin-RevId: 298879027
2020-03-10 10:19:27 +00:00
bachinger
d1bbd3507a add media item to create media sources
This change adds the createMediaSource(MediaItem mediaItem) method to the MediaSourceFactory interface. It doesn't deprecate createMediaSource(Uri uri) to keep the cl smaller. Deprecation and removing calls to the deprecated method from within the library and extension follow in a separate CL.

PiperOrigin-RevId: 298352442
2020-03-10 10:17:03 +00:00
olly
c6a6e0d6f3 Migrate various call sites to Format.Builder
PiperOrigin-RevId: 297562889
2020-02-27 17:15:34 +00:00
olly
7e6a1418e3 Demo apps: Annotate @NonNull where necessary
Because we now annotate not-null by default in ExoPlayer
library modules, we're seeing warnings in the demo apps where
we override a method and don't explicitly specify an equivalent
@NotNull annotation.

It's probably confusing to use not-null by default for the
demo apps, so this change uses @NonNull where necessary to fix
the warnings.

PiperOrigin-RevId: 296000044
2020-02-25 21:21:54 +00:00
olly
54283746be Fix lint errors
PiperOrigin-RevId: 295953956
2020-02-25 21:21:29 +00:00
christosts
1f905434d2 Add 60fps test assets in demo app
PiperOrigin-RevId: 295946028
2020-02-25 21:21:21 +00:00
olly
7a849e11f7 Fix demo app download notification
PiperOrigin-RevId: 294503035
2020-02-11 22:10:44 +00:00
aquilescanta
278e1aff4d Revert accidental change in media.exolist.
PiperOrigin-RevId: 294193213
2020-02-11 17:11:43 +00:00
aquilescanta
ac8a2e80e1 Prepare and release DrmSessionManager in Renderers
Issue: #6951
PiperOrigin-RevId: 294187695
2020-02-11 17:11:35 +00:00
andrewlewis
0dd8e6a7c1 Add GL demo app
Demonstrates rendering to a GLSurfaceView while applying a GL shader.

Issue: #6920
PiperOrigin-RevId: 293551724
2020-02-11 17:08:53 +00:00
bachinger
4bb6036cf6 add playback state changed listener
This change deprecates Player.onPlayerStateChanged(boolean pwr, int state). It removes deprecation for trivial cases. I'll remove other deprecated usages (mostly in ui module) in follow-up CLs to not bloat this CL.

PiperOrigin-RevId: 292917872
2020-02-11 17:07:03 +00:00
ibaker
d64388a075 Ensure the demo app requests local-file permissions for subtitle files
Currently we only do this for the main sample URI, not for subtitles.
So pairing a web-based video file with a local subtitle file on a fresh
install just throws a 'permission denied' exception.

PiperOrigin-RevId: 290794091
2020-01-24 11:10:21 +00:00
tonihei
cf7b908e94 Fix demo app NPE when selecting unsupported samples.
PiperOrigin-RevId: 290027772
2020-01-16 13:51:58 +00:00
olly
d7643acd52 Deprecate DownloadService state change methods
As discovered whilst investigating #6798, there are cases
where these methods are not correctly. They were added as
convenience methods that could be overridden by concrete
DownloadService implementations, but since they don't work
properly it's preferable to require application code to
listen to their DownloadManager directly instead.

Notes:

- The original proposal to fix #6798 stored the state change
events in memory until they could be delivered. This approach
is not ideal because the events still end up being delivered
later than they should be. We also want to fix the root cause
in a different way that does not require doing this.
- This change does not fix #6798. It's a preparatory step.

Issue: #6798
PiperOrigin-RevId: 289418555
2020-01-13 19:57:36 +00:00
bachinger
36fa9d5a43 add top-level playlist API
Design doc: https://docs.google.com/document/d/11h0S91KI5TB3NNZUtsCzg0S7r6nyTnF_tDZZAtmY93g/edit

Issue: #6161, #5155
PiperOrigin-RevId: 286020313
2019-12-18 18:52:51 +00:00
bachinger
74faa3aa9f rename setMediaItem to setMediaSource
PiperOrigin-RevId: 284514142
2019-12-09 16:30:56 +00:00
aquilescanta
d1d43d62e6 Add demo app support for attaching DrmSessions to clear content
Issue:#4867
PiperOrigin-RevId: 284262626
2019-12-09 16:30:32 +00:00
olly
aa2e9ffc10 Fix casting to not need warning suppression
Also remove getRendererCapabilities arg that's now always null.

PiperOrigin-RevId: 283966795
2019-12-06 19:20:06 +00:00
olly
cb873dd1ee Use play and pause convenience methods
PiperOrigin-RevId: 283949259
2019-12-06 19:19:18 +00:00
aquilescanta
61c43c30ac Make DownloadHelper pass DrmSessionManager to MediaSources
PiperOrigin-RevId: 283795201
2019-12-05 10:20:32 +00:00
olly
d12c7235f9 Bump targetSdkVersion to 29 for demo apps only
PiperOrigin-RevId: 283324612
2019-12-04 09:58:47 +00:00
ibaker
35237e658f Add SSA test file to the demo app
I wrote this myself

PiperOrigin-RevId: 281942685
2019-11-22 15:10:24 +00:00
kimvde
a7d962bf27 Downgrade targetSdkVersion back to 28
- The upgrade to version 29 made Robolectric version 4.3 fail.
- Upgrading Robolectric to 4.3.1 requires Java 9, which requires manual
  configuration in Android Studio.

PiperOrigin-RevId: 281753915
2019-11-22 15:09:54 +00:00
olly
5abb4ff8c1 Fix broken Enc/Clear playlist in media.exolist.json
- DRM properties need to be on individual playlist items.

PiperOrigin-RevId: 281718153
2019-11-22 15:09:24 +00:00
olly
f6853e4751 Bump targetSdkVersion to 29
- Enabling legacy storage for our demo app so that playing
  slideloaded media is still easy.
- Apps are still free to specify a lower targetSdkVersion

PiperOrigin-RevId: 281537041
2019-11-22 15:09:09 +00:00
kimvde
9b2917a9ae Add Java FLAC extractor
Seeking, live streams support and exposure of vorbis and ID3 data
are not part of this commit.

Issue: #6406
PiperOrigin-RevId: 281083332
2019-11-18 17:55:28 +00:00
bachinger
cd2c1f2f24 Playlist API: Add setMediaItem() and prepare()
PiperOrigin-RevId: 278867153
2019-11-15 05:11:45 +00:00
olly
0a27d7b482 Don't use DRM prior to API level 18
PiperOrigin-RevId: 278660557
2019-11-15 05:11:26 +00:00
olly
f51f7bd405 Fix SurfaceControl demo app layout
The fixes sizes could end up being wider than the screen (e.g on Pixel 3a)

PiperOrigin-RevId: 278642828
2019-11-05 18:36:14 +00:00
olly
02a83a5377 Delete unused theme
PiperOrigin-RevId: 278638978
2019-11-05 18:35:56 +00:00
ibaker
15f8d8668e Select exolist-specified subtitles by default
If a sample has a subtitle file listed, it makes sense to show it by
default.

PiperOrigin-RevId: 277934597
2019-11-05 16:17:08 +00:00
ibaker
07e93c15f9 Add support for subtitle files in the demo app
issue:#5523
PiperOrigin-RevId: 277927555
2019-11-05 16:16:53 +00:00
andrewlewis
656556b828 Clean up naming for GLSurfaceViews
PiperOrigin-RevId: 277896757
2019-11-05 16:15:29 +00:00
andrewlewis
a3d1ab6900 Add explicit dependency on appcompat for demo app
The demo app was using this via its dependency on the material library,
but it's preferable to list dependencies explicitly (otherwise the build
would break if we removed the material dependency).

PiperOrigin-RevId: 277316175
2019-10-30 08:51:50 +00:00
olly
7ccbc4c436 Remove VR code
- Leaving GvrAudioProcessor for now.
- Removing GvrPlayerActivity because it was never released. Also removing
  related UI classes. These were released, but it's unlikely anyone would
  have been using them directly.

PiperOrigin-RevId: 275822516
2019-10-30 08:47:06 +00:00
bachinger
e6e2dcc58d Rollback of 36f8bd78f7
*** Original commit ***

Rollback of 4ad4e3e4fc

*** Original commit ***

Rollback of 3b22db33ba

*** Original commit ***

add top-level playlist API to ExoPlayer

Public design doc:
https://docs.google.com/document/d/11...

***

PiperOrigin-RevId: 275813737
2019-10-30 08:46:42 +00:00
krocard
6841d40bc7 Demo app: Do not allow tunneling on API < 21
Without this patch, enabling tunneling on an API < 21 device
would result in an method not existing exception and the
app would crash.

PiperOrigin-RevId: 275428851
2019-10-18 17:42:50 +01:00
bachinger
0c0a67bb93 Fail at preparation when trying to download live content.
PiperOrigin-RevId: 275293735
2019-10-18 17:42:11 +01:00
bachinger
36f8bd78f7 Rollback of 4ad4e3e4fc
*** Original commit ***

Rollback of 3b22db33ba

*** Original commit ***

add top-level playlist API to ExoPlayer

Public design doc:
https://docs.google.com/document/d/11h0S91KI5TB3NNZUtsCzg0S7r6nyTnF_tDZZAtmY93g

Issue: #6161

***

***

PiperOrigin-RevId: 275276158
2019-10-18 17:42:03 +01:00
krocard
9af8511aef Introduce tunneling checkbox in test app
It makes observing differences without and with tunneling
much faster than recompiling.

PiperOrigin-RevId: 275216567
2019-10-17 11:52:42 +01:00
olly
7dede17d97 Make GvrPlayerActivity call its subclass to instantiate a player
It's more explicit and simpler than having the subclass call up into
the activity.

PiperOrigin-RevId: 274881350
2019-10-15 23:08:38 +01:00
olly
a2900992c3 Remove dead code
PiperOrigin-RevId: 274848191
2019-10-15 23:08:30 +01:00
olly
34c531764e Remove filter for intents that aren't handled
PiperOrigin-RevId: 274834663
2019-10-15 23:08:15 +01:00
bachinger
ce6252151a disable download button for live content in demo app
PiperOrigin-RevId: 274585052
2019-10-15 23:07:07 +01:00
olly
4ae79105de Make FileDataSourceFactory an inner class
This is a proof of concept for cleanup we should do for all of
our DataSource implementations as we move toward stabilizing
parts of the API.

- Move all XDataSourceFactory classes to be inner classes.
- Remove chained constructors for XDataSourceFactory classes. Keep
  required args going through constructors. Use setters for the
  rest.
- Not applicable in this case, but we probably want to deprecate
  all but the no-arg method for instantiating eac XDataSource
  instance (with the all-arg method kept but with the intention
  of making it package private).

PiperOrigin-RevId: 274162076
2019-10-13 12:41:39 +01:00
andrewlewis
be23995100 Remove ineffective copybara strip directive
PiperOrigin-RevId: 274161845
2019-10-13 12:41:31 +01:00
sofijajvc
62618f24ec Remove copybara exclusions and add extension to the demo app
Issue: #3353
PiperOrigin-RevId: 273949689
2019-10-10 14:46:16 +01:00
andrewlewis
e6fe80fa88 Improve sample naming consistency
PiperOrigin-RevId: 273712563
2019-10-10 14:44:30 +01:00
sofijajvc
70abbb9689 Add test AV1 video to demo app
PiperOrigin-RevId: 273706425
2019-10-10 14:44:20 +01:00
andrewlewis
a7db26c352 Delete the IMA demo
This doesn't offer anything on top of the functionality in the main demo app.
There's less code but we have a blog post and presentations that walk through
how to use the extension, so it seems fine to delete the code so we don't need
to maintain it. This also avoids potential confusion about what the demo app
means on IMA-related GitHub issues.

PiperOrigin-RevId: 273501720
2019-10-08 20:55:07 +01:00
andrewlewis
48bfb37e93 Fix surfacedemo nullness issues
PiperOrigin-RevId: 273296545
2019-10-07 16:32:42 +01:00
andrewlewis
fed89d76ca Migrate surfacedemo to new DRM APIs
PiperOrigin-RevId: 273296461
2019-10-07 16:32:34 +01:00
andrewlewis
8d7f474fa6 Fix surfacedemo build
PiperOrigin-RevId: 273296236
2019-10-07 16:32:26 +01:00
aquilescanta
433526e034 Deprecate DefaultDrmSessionManager factory methods and migrate main demo app
PiperOrigin-RevId: 272643202
2019-10-04 13:31:56 +01:00
aquilescanta
9f78187678 Migrate Cast demo app to use DefaultDrmSessionManager.Builder
PiperOrigin-RevId: 272444896
2019-10-02 21:30:00 +01:00
bachinger
4ad4e3e4fc Rollback of 3b22db33ba
*** Original commit ***

add top-level playlist API to ExoPlayer

Public design doc:
https://docs.google.com/document/d/11h0S91KI5TB3NNZUtsCzg0S7r6nyTnF_tDZZAtmY93g

Issue: #6161

***

PiperOrigin-RevId: 270728267
2019-10-02 21:25:39 +01:00
andrewlewis
258fff422a Publish SurfaceControl demo
Issue: #677
Issue: #5428
PiperOrigin-RevId: 270466031
2019-09-22 00:16:15 +01:00
bachinger
3b22db33ba add top-level playlist API to ExoPlayer
Public design doc:
https://docs.google.com/document/d/11h0S91KI5TB3NNZUtsCzg0S7r6nyTnF_tDZZAtmY93g

Issue: #6161
PiperOrigin-RevId: 269584512
2019-09-18 23:23:13 +01:00
olly
a564c8011f Remove seemingly unused dependency
PiperOrigin-RevId: 266802447
2019-09-05 10:45:16 +01:00
olly
2d0b10a73a Use constant to define androidx annotation version
PiperOrigin-RevId: 266801762
2019-09-05 10:45:08 +01:00
olly
a02237de20 Fix imports
PiperOrigin-RevId: 266676413
2019-09-01 22:03:52 +01:00
olly
2451211294 Tweak TrackSelectionDialog
PiperOrigin-RevId: 266216274
2019-08-30 14:41:52 +01:00
tonihei
cd4571161a Add builders for SimpleExoPlayer and ExoPlayer.
The current ExoPlayerFactory is growing too big and usage becomes increasingly
complicated because it's not possible to set individual components without
specifying many other defaults.

Adding new builder classes makes building easier and more future-proof.

PiperOrigin-RevId: 263339078
2019-08-15 14:41:51 +01:00
olly
fb0481c520 Bump annotations dependency + update release notes
PiperOrigin-RevId: 261353271
2019-08-02 19:04:56 +01:00
olly
90ab05c574 Add DRM samples to Cast demo app
PiperOrigin-RevId: 261312509
2019-08-02 17:15:08 +01:00
aquilescanta
79b86de619 Use per-media source DRM in the Cast demo app
PiperOrigin-RevId: 261125341
2019-08-01 20:39:14 +01:00
aquilescanta
46855884f5 Fix samples' text in Cast demo app
PiperOrigin-RevId: 260553467
2019-07-29 21:29:04 +01:00
olly
961adb7e36 Cast: Add MediaItemConverter
For now this just moves some code from the demo app to the extension.
Eventually the goal would be to have CastPlayer playlist methods take
MediaItem, have CastPlayer convert them internally to MediaQueueItem
for sending to the Cast SDK, and also allow reverse conversion so we
can reconstruct MediaItems from the Cast SDK's queue.

PiperOrigin-RevId: 260548020
2019-07-29 21:28:45 +01:00
aquilescanta
06f9481505 Support different drm schemes in playlists in the demo app
This CL changes PlayerActivity's VIEW_LIST action intent contract:
Each media item configuration is provided by indexing the entries.
For example, the URI of the first item is passed as "uri_0", the
second one is "uri_1", etc. Optionally, the extra parameters, like
the extensions, are passed as "extension_1", where the intent extras
with matching indices, refer to the same media sample.

The VIEW action's contract remains unchanged.

PiperOrigin-RevId: 260518118
2019-07-29 21:28:26 +01:00
olly
d77d661e52 Default viewport constraints to match primary display
PiperOrigin-RevId: 260479923
2019-07-29 21:27:46 +01:00
olly
596be3b71b Cast: Simplify MediaItem/Sample to a single MediaItem class
PiperOrigin-RevId: 260021990
2019-07-26 16:34:20 +01:00
olly
223cc5f179 Cast extension: Remove unused parts of MediaItem
PiperOrigin-RevId: 259586520
2019-07-23 23:18:08 +01:00
olly
2c318d7b84 Cast: Remove obsolete flavor dimension
PiperOrigin-RevId: 259582498
2019-07-23 23:17:50 +01:00
aquilescanta
e5b3c32c98 Remove DrmSessionManager from Renderer creation in the main demo app
PiperOrigin-RevId: 259529691
2019-07-23 23:17:11 +01:00
aquilescanta
2a8cf2f5ef Plumb DrmSessionManager into HlsMediaSource
PiperOrigin-RevId: 259520431
2019-07-23 23:16:33 +01:00
Oliver Woodman
0e7f015020 Merge pull request #6042 from Timbals:dev-v2
PiperOrigin-RevId: 258812820
2019-07-18 19:40:36 +01:00
aquilescanta
510f1883b0 Plumb DrmSessionManager into ProgressiveMediaSource
PiperOrigin-RevId: 257777513
2019-07-14 16:24:59 +01:00
aquilescanta
b9ab0cf137 Plumb DrmSessionManager into SsMediaSource
PiperOrigin-RevId: 257624043
2019-07-14 16:23:19 +01:00
aquilescanta
91750b8009 Plumb DrmSessionManager into DashMediaSource
PiperOrigin-RevId: 257576791
2019-07-14 16:22:22 +01:00
bachinger
49a2e5a5cb add manifest to Timeline.Window
- Remove manifest argument from callbacks of Player.EventListener and
  SourceInfoRefreshListener. Instead make it accessible through
  Player.getCurrentManifest() and Timeline.Window.manifest.
- Fix all MediaSource implementation to include the manifest in the
  Timeline instead of passing it to the SourceInfoRefreshListener.
- Refactor ExoPlayerTestRunner, FakeTimeline, FakeMediaSource to
  reflect these changes and make tests pass.

PiperOrigin-RevId: 257359662
2019-07-14 16:20:45 +01:00
Oliver Woodman
47bc70d480 Merge pull request #6119 from eneim:patch-1
PiperOrigin-RevId: 256147742
2019-07-02 17:49:05 +01:00
olly
7798c07f64 Remove ExoCast
PiperOrigin-RevId: 255964199
2019-07-02 17:48:22 +01:00
aquilescanta
0ddd3c2bd0 Implement DecryptableSampleQueueReader.isReady
PiperOrigin-RevId: 254746146
2019-07-02 17:43:00 +01:00
Nam Nguyen Hoai
a5fd774647
Update TrackSelectionDialog.java
Fix a super tiny typo.
2019-07-02 18:04:08 +09:00
tonihei
3bff79f56f Wrap MediaCodec exceptions in DecoderException and report as renderer error.
We currently report MediaCodec exceptions as unexpected exceptions instead of
as renderer error. All such exceptions are now wrapped in a new DecoderException
to allow adding more details to the exception.

PiperOrigin-RevId: 252054486
2019-06-14 16:33:47 +01:00
aquilescanta
3490bea339 Simplify re-creation of the CastPlayer queue in the Cast demo app
PiperOrigin-RevId: 251617354
2019-06-06 17:35:44 +01:00
eguven
e4feaa68f2 Add VR player demo
PiperOrigin-RevId: 251460113
2019-06-06 17:35:06 +01:00
eguven
2c4eb1cd9b Demo app change.
PiperOrigin-RevId: 250248268
2019-05-30 15:22:58 +01:00
olly
3afdd7ac5a Put @Nullable annotation in the right place
PiperOrigin-RevId: 249828748
2019-05-30 15:10:55 +01:00
aquilescanta
3314391932 Add basic DRM support to CastPlayer's demo app
PiperOrigin-RevId: 249624829
2019-05-30 15:09:52 +01:00
eguven
4ca670bed3 Use MediaSourceFactory interface to simplify DownloadHelper
PiperOrigin-RevId: 248367983
2019-05-15 20:13:59 +01:00
tonihei
7d1ce3b13e Change legacy support UI dependency to more specific ViewPager dependency.
PiperOrigin-RevId: 247902405
2019-05-15 18:11:21 +01:00
olly
95495328cf ...Androidx Migration...
PiperOrigin-RevId: 247499141
2019-05-15 18:09:49 +01:00
tonihei
7d5558881d Fix two ad insertion related bugs in DefaultPlaybackSessionManager.
1. A content session after an ad has been played was not re-marked as active,
   leading to new ad session being marked as active too early.
2. Switching from content to post-roll ended the content session because
   the return value of getAdGroupTimeUs of C.TIME_END_OF_SOURCE was not
   handled. Using the nextAdGroupIndex instead.

PiperOrigin-RevId: 246977327
2019-05-15 18:07:49 +01:00
aquilescanta
ad5948f3ed Fix SmoothStreaming links
NOTE: Streams are working on ExoPlayer but querying them from
other platforms yields "bad request".

The new links:
+ Match Microsoft's test server.
+ Allow querying from clients other than ExoPlayer, like curl.

PiperOrigin-RevId: 246289755
2019-05-02 13:06:10 +01:00
tonihei
c480818249 Fix some random AndroidStudio warnings.
PiperOrigin-RevId: 245956915
2019-04-30 22:08:07 +01:00
tonihei
0bb32a8f09 Add IntDef for Player states.
PiperOrigin-RevId: 245925254
2019-04-30 22:07:47 +01:00
eguven
708cad6b28 Add DownloadHelper.createMediaSource utility method
PiperOrigin-RevId: 245243488
2019-04-26 18:33:02 +01:00
eguven
03313fb5e2 Add option to add entries in an ActionFile to DownloadIndex as completed
PiperOrigin-RevId: 244864742
2019-04-26 18:30:27 +01:00
olly
748a29e8f5 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:45:49 +01:00
olly
e9413b0d41 Simplify DownloadManager constructors
PiperOrigin-RevId: 244223870
2019-04-18 23:23:33 +01:00
eguven
f9f009645d Add missing DownloadService build*Intent and startWith* methods
PiperOrigin-RevId: 244196081
2019-04-18 23:22:35 +01:00
olly
d656782bd4 Don't start download if user explicitly deselects all tracks
PiperOrigin-RevId: 244003817
2019-04-18 15:15:01 +01:00
tonihei
e62da368d2 Use player.retry in demo app instead of manual position tracking.
We currently do manual position tracking while the player is in error mode.
This is to allow an initial seek to the new position when trying to re-prepare.

Instead, we can just use our player.retry method and remove the tracking code.

PiperOrigin-RevId: 243819580
2019-04-18 15:12:26 +01:00
eguven
5856e75781 Rename DownloadAction to DownloadRequest
PiperOrigin-RevId: 243806888
2019-04-16 16:41:29 +01:00
olly
77b78b96df DownloadTracker shouldn't depend on DefaultDownloadIndex
- It can work with any DownloadIndex
- Also simplify things to not require that it's registered
  as a DownloadManager listener by someone else

PiperOrigin-RevId: 243697352
2019-04-16 15:28:20 +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
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
olly
b84c51434f Deprecate ActionFile and simplify upgrading
PiperOrigin-RevId: 243085292
2019-04-13 01:40:24 +01:00
eguven
8688bd2d88 Rename DownloadState to Download
PiperOrigin-RevId: 242839480
2019-04-13 01:38:25 +01:00
olly
d3b63a97ad Remove DownloadAction serialization
Implement Parcelable instead, which is a more intented way of
passing structured data via Intents.

PiperOrigin-RevId: 242646441
2019-04-13 01:36:46 +01:00
olly
18dcad9b8d Simplify DownloadState to contain its DownloadAction
This makes sense now that DownloadAction is only for downloading,
and not also for removal.

PiperOrigin-RevId: 242561575
2019-04-13 01:36:07 +01:00
olly
0daaba443c Get rid of DownloadState.STATE_REMOVED
It's a transient state whose only use is when passing a removed
download to onDownloadStateChanged. It's a bit strange to have it
as a proper state, since we end up asserting that it's an invalid
value in other places.

This change adds an explicit onDownloadRemoved, which allows
removal of the transient STATE_REMOVED, related assertions, and
uncertainty when dealing with an @State variable whether it's
necessary to handle it being STATE_REMOVED.

PiperOrigin-RevId: 242444128
2019-04-13 01:32:08 +01:00
aquilescanta
be61715517 Fix Cast demo app
Broken in 399aa706a7

PiperOrigin-RevId: 242112068
2019-04-05 21:14:28 +01:00
olly
9471d61183 Fix ExoPlayer's demo app
PiperOrigin-RevId: 241811732
2019-04-05 21:13:31 +01:00
aquilescanta
9c0819001d Fix ExoPlayer's demo app gradle build
Broken by 399aa706a7.

PiperOrigin-RevId: 241770676
2019-04-05 21:12:54 +01:00
olly
399aa706a7 Remove usages of the widget package and migrate to new packages.
PiperOrigin-RevId: 241656157
2019-04-05 20:54:09 +01:00
olly
9aacef47ad Allow TrackSelectionDialog to indicate whether it has any content
PiperOrigin-RevId: 241523313
2019-04-05 20:49:25 +01:00
tonihei
28ea31cd4c Use Closeable interface for DownloadStateCursor to simplify closing.
PiperOrigin-RevId: 240775823
2019-03-29 16:50:57 +00:00
eguven
d4f5c9c721 Remove DownloadHelper.getRemoveAction
PiperOrigin-RevId: 240444051
2019-03-29 16:48:40 +00:00
eguven
3919f3843d Make DownloadManager use DownloadIndex
PiperOrigin-RevId: 240320220
2019-03-26 13:18:11 +00:00
eguven
b5e4523b58 Remove index modifier methods from DownloadIndex interface
PiperOrigin-RevId: 239045412
2019-03-20 23:26:49 +00:00
eguven
d85ee01ae7 Convert DownloadManager.Listener methods no-op default methods
PiperOrigin-RevId: 239019504
2019-03-20 23:26:49 +00:00
olly
07702cecdd Allow exoplayer/v2/ mockito2
PiperOrigin-RevId: 238625384
2019-03-20 23:26:10 +00:00
tonihei
d93ee00d19 Add convenience method to DownloadHelper to add selection for single renderer.
This simplifies the DownloadHelper code in the demo app and is generally
useful for more specific updates with SelectionOverrides.

PiperOrigin-RevId: 238228276
2019-03-15 04:53:29 +00:00
olly
ab5dae64b9 Make sure we handle SQLiteException and other IO errors properly
SQLiteException is a runtime exception, which makes it easy to
forget to handle it. This change converts SQLiteExceptions into
a checked exception, which is then handled appropriately.

PiperOrigin-RevId: 237038793
2019-03-06 17:29:18 +00:00
olly
a4754bb741 Don't show track selection tabs if there's only one
PiperOrigin-RevId: 237025639
2019-03-06 17:29:18 +00:00
tonihei
3500f07be6 Use theme overlay for track selection dialog.
We currrently just inherit the acitivity's alertDialogTheme style (which
is equivalent to ThemeOverlay.AppCompat.Dialog.Alert). Using the theme
overlay directly and also force-enable the title such that the title is
shown even if the activity disabled the title.

PiperOrigin-RevId: 237012601
2019-03-06 17:29:18 +00:00
tonihei
641c1d2af4 Properly release DownloadHelper and TrackSelectionDialog.
The release needs to post to the MediaSource thread and also needs to post
back to the DownloadHelper thread to prevent sending updates after release has
been called. The point where we release the downloadHelper also needs to
dismiss the dialog in case the creation has already been queued before the
release.

PiperOrigin-RevId: 236652309
2019-03-06 17:29:18 +00:00
olly
d68c861b21 Remove duplicate layout file
PiperOrigin-RevId: 236645446
2019-03-06 17:29:18 +00:00
tonihei
0624046a7b Stop using deprecated method in demo app.
PiperOrigin-RevId: 236133636
2019-03-06 17:29:18 +00:00
tonihei
f87cb81f35 Enable caching in internal demo app.
So far it's only enabled in the external demo app.

PiperOrigin-RevId: 236122825
2019-03-06 17:29:18 +00:00
tonihei
cde6189c14 Repair progressive downloads in DownloadTracker.
They are currently broken because we ignore downloads without periods.
As the DownloadHelper doesn't create periods for progressive media, we don't
download them. Fixing by starting download automatically without showing
track selection dialog.

PiperOrigin-RevId: 236120202
2019-03-06 17:29:18 +00:00
tonihei
84c8842dfa Prevent multiple track selection dialogs in PlayerActivity.
PiperOrigin-RevId: 236119640
2019-03-06 17:29:18 +00:00
olly
bfc60e1694 Set vertical orientation by default in TrackSelectionView
Horizontal orientation doesn't make sense. I thought about
overriding the setter to throw something, but it's probably
not worth the extra lines.

PiperOrigin-RevId: 234632530
2019-02-20 13:55:33 +00:00
olly
0622afe170 Migrate to androidx
Issue: #5489
PiperOrigin-RevId: 234507428

Add missing annotation dependency

Issue: #5489
PiperOrigin-RevId: 234566177
2019-02-19 13:22:54 +00:00
andrewlewis
f3bd93394b Fix copybara stripping
PiperOrigin-RevId: 234496529
2019-02-18 18:45:55 +00:00
tonihei
cedfa19988 Prevent using view state and use state saved in fragment instead.
The system may destroy views at any time and may not have created the view
at all. Use the state saved in the fragment to be independant of the existance
of the view.

PiperOrigin-RevId: 234156285
2019-02-18 17:40:48 +00:00
tonihei
c6195dbbaf Handle recreation of TrackSelectionView instances.
TrackSelectionView requires an initialization with a call to init(...).
That's why we shouldn't let the view retain its view hierarchy automatically
as the views won't be backed by data if restored. Instead add a listener
which lets the containing activity/fragment save and restore the state if
needed.

PiperOrigin-RevId: 234152491
2019-02-18 17:40:48 +00:00
tonihei
eae09c67e7 Release download helper if new download track selection is started.
PiperOrigin-RevId: 234128521
2019-02-18 17:40:48 +00:00
tonihei
1c38b226ea Stop using AlertDialog for TrackSelectionDialog.
AlertDialog owns its view, which causes problems with TabLayout on API 21
and 22. Now using AppCompatDialog instead so that we can own the view
ourselves.

Also:
 - Renamed layout files from download_xyz to track_selection_xyz.
 - Added OK and Cancel buttons to the view.
 - Applied alert dialog style to the "normal" dialog to get a nicer UI.
PiperOrigin-RevId: 233944647
2019-02-18 17:40:48 +00:00
aquilescanta
73d9b2d21a Hide ExoCastPlayer components again
This CL is effectively a rollback of cr/233072247.

PiperOrigin-RevId: 233793032
2019-02-18 17:40:48 +00:00
aquilescanta
5c2aa4bd9e Automated g4 rollback of changelist 233073011.
*** Reason for rollback ***

Pending discussions about cast

*** Original change description ***

Remove default-receiver-related classes from Cast demo app

***

PiperOrigin-RevId: 233790699
2019-02-18 17:40:48 +00:00
aquilescanta
cc153cfca3 Use floating action button in the cast demo app
PiperOrigin-RevId: 233723028
2019-02-18 17:40:48 +00:00
tonihei
ca67c0c2e5 Extend TrackSelectionDialog for usage in PlayerActivity.
We need additional initial selection settings and a configurable title.
The update logic for the track selection parameters moved to a static helper
method in TrackSelectionDialog.

PiperOrigin-RevId: 233713788
2019-02-18 17:40:48 +00:00
olly
c7788c18db Fix / cleanup some layout in the Cast demo
PiperOrigin-RevId: 233587404
2019-02-18 15:59:22 +00:00
tonihei
1dd36ae391 Add TrackSelectionDialog (with swipe tabs) to demo app.
PiperOrigin-RevId: 233582549
2019-02-18 15:59:07 +00:00
aquilescanta
00c31265cd Move depended below dependant as per usual
PiperOrigin-RevId: 233578341
2019-02-18 15:59:02 +00:00
aquilescanta
55e6d1d708 Prevent concurrent queue modifications from breaking the cast demo app UI
PiperOrigin-RevId: 233577854
2019-02-18 15:58:57 +00:00
olly
a21572f0dd Fix minor issues and lint errors
PiperOrigin-RevId: 233428556
2019-02-18 15:58:37 +00:00
olly
de720fef77 Add missing permission to IMA demo app
PiperOrigin-RevId: 233418784
2019-02-18 15:58:22 +00:00
andrewlewis
56944caa21 Allow registration of control overlays for ad viewability
Switch from passing an ad UI ViewGroup to passing an object that can also
provide information about controls overlays.

Also switch to using a dedicated overlay for ads instead of the overlay frame
layout, which apps have easy access to.

PiperOrigin-RevId: 233393500
2019-02-18 15:58:06 +00:00
olly
8401097ead Upgrade gradle plugin and friends
PiperOrigin-RevId: 233390513
2019-02-18 15:57:55 +00:00
aquilescanta
905927554a Fix Cast demo app's blaze build and enable proguarding
PiperOrigin-RevId: 233372668
2019-02-18 15:57:49 +00:00
tonihei
abb53d7ce7 Support multiple overrides in TrackSelectionView and factor out Builder.
Supporting multiple overrides allows to select tracks from multiple groups, if
enabled. As more options are added, the creation of the dialog is moved to a
separate builder class.

PiperOrigin-RevId: 233366282
2019-02-18 15:57:44 +00:00
aquilescanta
fc2710498a Handle player errors more gracefully in the Cast demo app
PiperOrigin-RevId: 233090773
2019-02-18 15:57:39 +00:00
aquilescanta
3d822bd228 Rename ExoCastPlayerManager to PlayerManager
PiperOrigin-RevId: 233089799
2019-02-18 15:57:34 +00:00
aquilescanta
a263fb1631 Remove default-receiver-related classes from Cast demo app
PiperOrigin-RevId: 233073011
2019-02-18 15:57:24 +00:00
aquilescanta
6f1daff3f1 Remove copybara scrubbing of ExoCast components
PiperOrigin-RevId: 233072247
2019-02-18 15:57:19 +00:00
andrewlewis
589af35c65 Set player on ads loader in IMA demo
Issue: #5476
PiperOrigin-RevId: 232503736
2019-02-06 15:45:34 +00:00
olly
e3981ec484 Fix notifications to avoid flicker on KitKat
On KitKat you need to reuse the same notification builder when
generating a notification that's intended to replace a previous
one. See:

https://stackoverflow.com/questions/6406730/updating-an-ongoing-notification-quietly

PiperOrigin-RevId: 232503682
2019-02-06 15:45:24 +00:00
eguven
a5d64463c7 Make DownloadTracker use DownloadIndex
DownloadTracker will stop updating DownloadIndex when DownloadManager
starts using the same DownloadIndex.

PiperOrigin-RevId: 232306803
2019-02-04 19:39:34 +00:00
aquilescanta
c61c0bd1ac Cast demo: Fix a few miscellaneous bugs
PiperOrigin-RevId: 231801562
2019-02-04 19:38:49 +00:00
olly
45433869e5 Rename ExtractorMediaSource to ProgressiveMediaSource
It better describes what the class does. More importantly, we've had
inconsistent class names since we added offline support, for which we
added ProgressiveDownloader ("ExtractorDownloader" doesn't make any
sense). We could really do with aligning the names for clarity.

(Sorry)

PiperOrigin-RevId: 231387268
2019-01-29 16:45:42 +00:00
tonihei
71d77d7fa0 Remove DownloadHelper subclasses and use static methods instead.
The subclasses only call specific constructor combinations and can easily
replaced by static methods.

PiperOrigin-RevId: 231385606
2019-01-29 16:45:10 +00:00
tonihei
0a8ae74217 Update DownloadHelper to use MediaSource and MediaPeriod directly.
This requires to prepare the media source and the periods in a small helper similar
to the metadata retriever. It also gets rid of the need to have abstract protected
methods to load the manifest, to extract the track groups and to convert to stream keys,
as this can now be handled by the media period.

PiperOrigin-RevId: 231385590
2019-01-29 16:44:56 +00:00
olly
355b3d6334 Increase minSdkVersion to 16
The combination of pre-16 API levels accounting for ~0.5% of the device
population, and that the most important components in ExoPlayer (e.g.
the MediaCodec renderers) have always required API level 16, mean it's
very unlikely this will negatively impact on anyone.

PiperOrigin-RevId: 230701808
2019-01-29 16:41:45 +00:00
aquilescanta
fd081d49c7 Make the Cast demo app absorb remote queue changes
Necessary in two scenarios:
+ When the demo app starts casting to a receiver app that already
  had a queue.
+ When two demo apps are connected to the same receiver app and
  both make modifications.

PiperOrigin-RevId: 230546851
2019-01-29 16:41:02 +00:00
aquilescanta
52f25f6ea8 Add HLS stream and remove non-working content from Cast demo app
PiperOrigin-RevId: 230496581
2019-01-29 16:40:31 +00:00
olly
de3a749b97 Fix scheduler NPE in DownloadService
PiperOrigin-RevId: 230260266
2019-01-29 16:40:09 +00:00
aquilescanta
6a55fda66d Add DRM protected content to the Cast demo APP
Allows testing DRM-protected content in the receiver app.

Includes the DRM-related data to the media items, but does not
add support for DRM content in the local player yet.

PiperOrigin-RevId: 229932329
2019-01-21 12:56:53 +00:00
eguven
ec77f737ee Make DownloadManager watch requirements directly
PiperOrigin-RevId: 229544734
2019-01-17 14:37:12 +00:00
tonihei
e4ad90efd0 Set Player separately in AdsLoader interface.
Passing the player through MediaSource.prepare is only needed for the AdsLoader
and complicates other usages of MediaSource. Providing the player directly to
the AdsLoader is also in line with the usage pattern of PlayerView and other
components.

Also rename methods to start/stop to better reflect their usage.

PiperOrigin-RevId: 227682112
2019-01-08 07:33:52 +00:00
eguven
7ae768376c Prepare DownloadState for upcoming changes
Made DownloadState top level class.
Replaced action field DownloadAction fields.
Added removing, removed and restarting states.
Renamed started state to downloading.

PiperOrigin-RevId: 227664735
2019-01-08 07:33:23 +00:00
aquilescanta
f4fd3b12e6 Handle failure to get Cast context more gracefully
Issue:#4160
Issue:#4743
PiperOrigin-RevId: 225813243
2018-12-18 19:45:48 +00:00
tonihei
173ddd6ee7 Add simplified adaptive media source stream key filter to factory classes.
This change only simplifies the API by using the ManifestParser internally.

PiperOrigin-RevId: 225516193
2018-12-14 15:42:36 +00:00
eguven
41f76bdb53 Convert DownloadState id to String
For now this id can not be set by client but auto generated using
content cache key and uri.

PiperOrigin-RevId: 225356645
2018-12-14 15:41:18 +00:00
eguven
4bf42bd2ad Rename TaskState to DownloadState
PiperOrigin-RevId: 225145311
2018-12-14 15:40:16 +00:00
tonihei
defbd04675 Update StartDownloadDialogHelper to use TrackSelectionView.
This is now possible as the download helper uses a track selector.

PiperOrigin-RevId: 225014517
2018-12-14 15:39:43 +00:00
tonihei
272a5e59f2 Use download icon instead of play icon for download notification.
PiperOrigin-RevId: 225001681
2018-12-14 15:39:24 +00:00
tonihei
6a6b211233 Update DownloadHelper constructors and their usage in the demo app.
PiperOrigin-RevId: 224797598
2018-12-10 18:17:52 +00:00
aquilescanta
73da205279 Add receiver flavor to CastDemo
PiperOrigin-RevId: 224310086
2018-12-10 18:17:41 +00:00
aquilescanta
891961d5e1 Revert usage of MediaItems for Cast demo sample list
PiperOrigin-RevId: 224308973
2018-12-10 18:08:56 +00:00
andrewlewis
19a6f904e5 Reformat cast DemoUtil
PiperOrigin-RevId: 222978255
2018-11-27 15:46:04 +00:00
olly
e317305909 Remove custom data from remove actions
A remove action will eventually just be the unique ID of the download
that should be removed. This is a step toward that goal.

PiperOrigin-RevId: 222832456
2018-11-27 15:45:38 +00:00
olly
03101444af Update content url for IMA demo app
The existing one seems to be dead, and isn't https.

PiperOrigin-RevId: 222795996
2018-11-26 11:05:44 +00:00
tonihei
f8a3c135e5 Use overflow-save add operation for blacklisting duration.
This allows to specify open-ended blacklisting with Long.MAX_VALUE.

PiperOrigin-RevId: 222550939
2018-11-23 12:31:12 +00:00
olly
6ebb6124bb Offline refactor step 1a - Make DownloadAction concrete
1. Pull up all subclasses of DownloadAction into DownloadAction
2. Add DownloaderFactory for Downloader instantiation, and DefaultDownloaderFactory
   to replace the instantiation logic being removed from the DownloadAction
   subclasses.

This change will upgrade existing action files gracefully (i.e. it does not
lose compatibility with the existing offline implementation, other than some
minor breaking changes to the API).

TODOs:

1. Move test methods from the XDownloadActionTest classes into DownloadActionTest.
   This will be done in a subsequent CL. There's a lot of consolidation that can
   be done here, including de-duplicating some of the test code added in this CL.
2. Look at merging DownloaderConstructorHelper into DefaultDownloaderFactory.
3. Use customCacheKey in DASH/HLS/SS Downloaders, for completeness.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=222258983
2018-11-22 12:39:37 +00:00
andrewlewis
bc5e12013b Remove executable bit from some resources
Copybara propagates this bit on the files, so removing it avoids some
unnecessary changes in the first migrated commit.

Also losslessly optimize two PNG files.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=220268951
2018-11-07 17:57:42 +00:00
aquilescanta
80e9c84a9e Remove RemotePlayer
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=217708323
2018-10-18 23:39:51 +01:00
tonihei
0a7745bc03 Fix some random Android Studio warnings.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215904019
2018-10-15 09:26:36 +01:00
aquilescanta
34c286682e Extract PlayerManager interface in the Cast demo app
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215389291
2018-10-03 22:04:20 +01:00
aquilescanta
2a50621118 Use media item in the cast demo app
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214750185
2018-09-27 17:46:27 +01:00
aquilescanta
776ad20a50 Add a MediaQueue abstraction to the cast extension
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214598078
2018-09-27 17:41:10 +01:00
tonihei
e25b7d2148 Add wrapper for Log messages to allow settig the log level.
Currently there is no way to disable (or reduce) the logcat output generated
by ExoPlayer.

Issue:#4665

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=213421072
2018-09-20 12:12:21 +01:00
olly
62532f9a2e Revert accidental change to media.exolist.json
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212790665
2018-09-13 18:41:51 +01:00
olly
a5a7e988e3 Clip DASH periods to their durations
Issue: #4185

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=212619419
2018-09-12 15:30:47 +01:00
aquilescanta
da88b34687 Fix HLS advanced TS and fMP4 sample streams
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=211976724
2018-09-12 15:01:29 +01:00
olly
924a76d532 Clean up use of deprecated APIs
- Add @Deprecated on overrides of deprecated method.
- Suppress deprecation warnings where appropriate.
- Use non-deprecated alternatives where appropriate.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=210092434
2018-08-24 16:12:44 +01:00
eguven
14c7c2995c Add android.permission.FOREGROUND_SERVICE
Apps targeting P or later now must request this permission in order to
use foreground services.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209762160
2018-08-24 15:51:58 +01:00
eguven
02a8964fe2 Support VR180 videos
If available parse and use spherical metadata:
https://github.com/google/spatial-media/blob/master/docs/spherical-video-v2-rfc.md

RELNOTES=true

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209754080
2018-08-24 15:44:24 +01:00
aquilescanta
8927993b03 Prevent a Demo app NPE on Android TV
The options menu is not available on Android TV, which triggers a
null pointer exception whenever a sample is chosen.

This CL is a temporary fix until we rework the UI to not use
an options menu.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209742076
2018-08-24 15:38:17 +01:00
aquilescanta
f64ec43acd Remove usage of deprecated method from the Demo app
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209390036
2018-08-24 15:22:40 +01:00
olly
bd8a956d53 Use lamdas everywhere
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=209162373
2018-08-24 15:19:30 +01:00
olly
ab72dd44ed Move decoder and ABR preferences to overflow menu
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208977806
2018-08-16 16:43:26 +01:00
andrewlewis
5f75d6ea13 Target API 28
Apps targeting API 28 by default do not grant permission for cleartext traffic,
so update the demo app to show a warning if loading an HTTP URI will fail. See
https://developer.android.com/about/versions/pie/android-9.0-changes-28 for
information on behavior changes in API 28.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208204937
2018-08-13 14:04:14 +01:00
olly
bac597cb07 Update dependencies + misc fixes
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208195761
2018-08-13 14:02:51 +01:00
andrewlewis
93f591be3e Release ads loader on new intent in the demo app
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208056265
2018-08-13 13:56:28 +01:00
eguven
fc9c851601 Fix media.exolist.json format
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=208006056
2018-08-13 13:47:05 +01:00
andrewlewis
9eff531c08 Use only HTTPS for external demo app media
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207881679
2018-08-13 13:44:29 +01:00
olly
4558eb4e99 Update moe equivalence
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207556225
2018-08-06 17:26:23 +01:00
hoangtc
b3d52f5d80 Add MetadataRetriever demo.
Add a demo app that shows case how to use APIs from MetadataRetriever to
retriever track groups and frames from some media.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207269221
2018-08-06 11:29:27 +01:00
eguven
45c1e9eef3 Add missing Nullable annotation Player.EventListener.onTimelineChanged
Issue: #4593

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206911927
2018-08-01 13:49:21 +01:00
andrewlewis
5715960304 Add Context to SimpleExoPlayer factory methods
This is needed for implementing (optional) support for audio focus handling in a
later change.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206899837
2018-08-01 13:49:21 +01:00
eguven
02e9972630 Add 360 video samples to the demo app
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=206747144
2018-08-01 13:49:20 +01:00
eguven
9c337c8806 Add monoscopic 360 surface type to PlayerView
Using this surface it's possible to play 360 videos in a non-VR Activity that is
affected by phone and touch input.

RELNOTES=true

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205720776
2018-07-24 14:54:05 +01:00
tonihei
5933d92394 Add simplified Dash and Ss media source factory constructors.
As the manifest and media data sources can be the same now, we can provide
a simplified constructor with just one data source factory.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205658046
2018-07-23 15:55:57 +01:00
tonihei
c24a699b34 Update demo apps to use player-provided default bandwidth meter.
This simplifies the player setup and prevents using deprecated methods in the demo.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205642981
2018-07-23 13:35:08 +01:00
eguven
7b2da629ea Make it possible to disable DownloadService notifications
Issue: #4389

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=204728270
2018-07-17 20:27:30 +01:00
eguven
93cbae5bff Use default Deserializers if non given to DownloadManager
Also moved shared code to SegmentDownloadAction between its subclasses.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=202294880
2018-06-28 16:18:50 +01:00
tonihei
156e2317cc Deprecate Player.DefaultEventListener in favor of default no-ops in interface.
The DefaultEventListener was added for selective overrides. Now that Java 8
support is enabled, these selective listener overrides can be implemented
more easily and more flexible using default methods.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=201695490
2018-06-22 17:49:25 +01:00
eguven
fb00221d7d Fix demo app multi period stream track selection for downloading
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=199791722
2018-06-18 11:02:46 +01:00
eguven
a406dc8bee Use TrackKey in place of RepresentetionKey, StreamKey, RenditionKey
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=199767518
2018-06-18 10:58:52 +01:00
aquilescanta
645363059b Fix leak in the demo app
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=199448766
2018-06-06 18:58:37 +01:00
eguven
810e06c338 Fix starting the download service in the background throw exception
This happens when the device screen is locked.

This fixes a previous attempt to fix the problem.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=199130325
2018-06-05 12:43:03 +01:00
eguven
536bd68294 Fix starting the download service in the background throw exception
This happens when the device screen is locked.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=198875192
2018-06-05 12:37:24 +01:00
tonihei
27f009d239 Enable Java 8 support.
This enables compiler support for Java 8 features.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=198709705
2018-06-05 12:29:14 +01:00
tonihei
e162d35689 Fix permissions in demo app.
The ACCESS_NETWORK_STATE permission is only included indirectly which doesn't
work in all build systems.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=197399274
2018-05-22 09:11:32 +01:00
olly
94ffbee7e5 Fix demo app playlist playbacks
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=195752969
2018-05-08 02:06:39 +01:00