5183 Commits

Author SHA1 Message Date
bachinger
c9151c23a2 Include audio metadata with DefaultMediaItemConverter for Cast
This change adds more standard metadata fields to Cast metadata including the artwork URL that makes the cast device show the artwork in the Cast route dialog (https://screenshot.googleplex.com/uj4n4Jqd7it9bob) and the Cast device.

This change also discriminates between media with an audio MIME type and others. For audio MIME type the Cast metadata is set to MEDIA_TYPE_MUSIC_TRACK which changes the layout and shows artwork and additional audio meta data to be displayed (https://screenshot.googleplex.com/ASy3KDcsTdJDM2T).

Issue: google/ExoPlayer#9663
PiperOrigin-RevId: 422589957
2022-01-25 18:51:57 +00:00
claincly
38cdbbffb4 Support encoding square videos.
PiperOrigin-RevId: 422585277
2022-01-25 18:50:48 +00:00
claincly
123a3c2731 Throw NPE instead of IAE when sampleMimeType is null.
PiperOrigin-RevId: 422550627
2022-01-25 18:49:30 +00:00
bachinger
05e23996fa Split ad playback state and recalculate window and period duriations
This change enables the ImaServerSideAdInsertionMediaSource for multi-period content. The global ad playback state is split into pieces for each period and the window and period durations are calculated accordingly in the ServerSideAdInsertionTimeline.

For multi-period live content (DASH), the ad playback state is not set with this change. This is deferred to a follow up CL. Splitting is very tricky. For each timeline update the windowStartTimeUs may vary for some milliseconds relative to the start of the period.positionInWindowUs. This requires to either introduce some fuzzy logic or to choose a different approach than for multi-period VOD. Because mistakes within the playback states of subsequent moving live windows produces crashes, it seems sensible to defer this for now and keep this change in a separate future CL (unblock further work, easy to rollback).

In this state, live DASH stream are working and the ad overlay is placed over the player correctly bu the SDK. However, ads are not reported by the position discontinuity event. Similarly, the player.isPlayingAd() does never returns true when a ad period is playing.

PiperOrigin-RevId: 422539770
2022-01-25 18:48:11 +00:00
claincly
05d5937855 Use encoder output format for configuring the Encoder.
This CL implements fixing the input format to the encoder spec. Fixed
parameters include:
- MIME type
- Profile & level
- Resolution
- frame rate, and
- bitrate

PiperOrigin-RevId: 422513738
2022-01-25 18:46:46 +00:00
aquilescanta
f9170b89c4 Remove last SampleQueue.release allocation
By making AllocationNode fields non-final

PiperOrigin-RevId: 422403816
2022-01-25 18:45:42 +00:00
huangdarwin
ace1988a35 Transformer GL: Add image diff in test.
PiperOrigin-RevId: 422392959
2022-01-25 18:44:22 +00:00
huangdarwin
9ef376e4cb Transformer GL: Add pixel tests for transformation.
Rotation, translation, and scale tests on a normal video.

PiperOrigin-RevId: 422383176
2022-01-25 18:43:11 +00:00
tonihei
005d8560b7 Use Util method to infer stream type instead of just mime type.
The MediaMetricsListener currently just looks at the mime type and
doesn't use the inference based on the URI if no mime type is set.

Also change default type to OTHER to avoid classifying streams from
URLs without clear file extension as progressive.

PiperOrigin-RevId: 422373381
2022-01-25 18:41:51 +00:00
jaewan
9f2f33657f Fix missing notification of session service release
PiperOrigin-RevId: 422352302
2022-01-25 18:39:54 +00:00
tonihei
3cfd24a912 Limit adaptive selections to same level of decoder support
Adaptive video and audio selections will be limited to formats with
the same level of DecoderSupport and HardwareAccelatationSupport, unless
specifically allowed by new flags.

If different levels of decoder support are available, prefer primary
over fallback decoders and hardware-accelerated over software decoders
(in this order). For video, also prefer more efficient codecs, if both
are supported by hardware-accelerated primary decoders.

Issue: google/ExoPlayer#4835
Issue: google/ExoPlayer#9565
PiperOrigin-RevId: 422345048
2022-01-25 18:38:26 +00:00
hschlueter
a62a189b41 Revise TransformationRequest MIME type validation.
PiperOrigin-RevId: 422333929
2022-01-25 18:37:21 +00:00
jaewan
86fdbd6f6b Only unsubscribe from specified parentId
PiperOrigin-RevId: 422331961
2022-01-25 18:35:46 +00:00
jaewan
cd56084b3e Fix flaky MediaBrowserListenerTest
MediaNotificationHandler tries to connect session in the same
process, so tests should be aware MediaControllers from the
MediaNotificationHandler.

PiperOrigin-RevId: 422330424
2022-01-25 18:34:25 +00:00
hschlueter
a18b64d20d Add javadoc to TransformationRequest's public fields.
PiperOrigin-RevId: 422325859
2022-01-25 18:33:01 +00:00
ibaker
61a0bf3f8c Add an anchor tag for the IMA compat URL in ImaAdsLoader javadoc
The naked URL is not hyperlinked by the javadoc compiler, meaning a user
is forced to awkwardly copy it into the address bar of their browser:
https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ext/ima/ImaAdsLoader.html

#minor-release

PiperOrigin-RevId: 422320571
2022-01-25 18:31:42 +00:00
tonihei
919b8d3776 Reorder adaptive video track preferences.
This change moves the video track selection to the generic
selection method introcuced for audio and text. This ensures
we can apply the same criteria for fixed and adaptive video
track selections. Implicitly, this reorders the preferences
for adaptive tracks to give non-quality preferences (like
preferred MIME type or preferred role flags) a higher priority
than number of tracks in the selection.

Issue: google/ExoPlayer#9519
PiperOrigin-RevId: 422310902
2022-01-25 18:30:25 +00:00
tonihei
e98b846884 Reset readingPositionUs in BaseRenderer.enable
This does currently only happen by chance in replaceStream (called from
enable) if the stream previosly played read until C.TIME_END_OF_SOURCE.

enable already makes all changes done in resetPosition (except resetting
the reading position), so it's less error-prone and makes the intention
clearer if the same code is called from both enable and resetPosition.

The effect of this bug was quite limited because the numerical value
of readingPositionUs was only relevant for periods with changing
durations and server-side inserted ads.

PiperOrigin-RevId: 422300690
2022-01-25 18:29:14 +00:00
jaewan
3c8a2c4e2e Stop using vector drawable on Notification for API<21
This fixes flaky failure when posting notification,
although why it's not crashing 100% is unknown.

PiperOrigin-RevId: 422168452
2022-01-25 18:28:08 +00:00
jaewan
e95b15100b Use MediaController to control sessions
This is a small refactoring toward merging
MediaNotificationHandler and PlayerNotificationManager

In detail, this CL includes following changes:
  - Use MediaController to dispatch commands to sessions in
    MediaSessionService, rather than media key events.
  - Use MediaController to monitor changes in MediaSession's
    underlying Player, rather than ForegroundServiceEventCallback.
    Removed the callback interface as well.

PiperOrigin-RevId: 422049265
2022-01-25 18:25:46 +00:00
olly
9e4d68ecb6 Don't sample VSYNC when not started
PiperOrigin-RevId: 421855453
2022-01-25 18:24:39 +00:00
bachinger
c6e5ace310 Inherit parent properties for manifests with dvb profile only
Issue: google/ExoPlayer#9856
PiperOrigin-RevId: 421842579
2022-01-25 18:23:20 +00:00
hschlueter
4ab10484ad Add FallbackListener.
The app will be notified about fallback using a callback on
Transformer.Listener. Fallback may be applied separately for
the audio and video options, so an intermediate internal
FallbackListener is needed to accumulate and merge the track-specific
changes to the TransformationRequest.

PiperOrigin-RevId: 421839991
2022-01-25 18:21:56 +00:00
tonihei
a9e75d8e3a De-duplicate track selection code.
We currently run (almost) the same code for all track types.
De-duplicate this by using a single method that takes functional
interfaces for track-type dependent logic.

This has the benefit that all track-type dependent logic is
contained within their subclasses and the generic logic doesn't
need to make any assumption about the eligibility of tracks for
selection or adaptation, and doesn't need to access Parameters.

Make this change for audio and text only for now. Video can
be updated in a subsequent change.

PiperOrigin-RevId: 421811411
2022-01-25 18:19:21 +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
fca783bb57 Fix deprecation suppression in RendererCapabilities
This string is case-sensitive.

PiperOrigin-RevId: 421781437
2022-01-25 18:14:31 +00:00
ibaker
78c07b56a7 Reword javadoc of TracksInfo.isTypeSupportedOrEmpty
The existing wording would be correct if prefixed with
"Returns false if [...]", but it seems confusing to a document a boolean
method in terms the condition it returns false - so I reworded it in
terms of when it returns true.

#minor-release

PiperOrigin-RevId: 421682584
2022-01-25 18:13:17 +00:00
ibaker
379b6bb7e1 Promote MappedTrackInfo.RendererSupport IntDef to public
This is referred to from the public API surface, so it should also be
public: https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/trackselection/MappingTrackSelector.MappedTrackInfo.html#getRendererSupport(int)

#minor-release

PiperOrigin-RevId: 421578232
2022-01-25 18:12:03 +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
hschlueter
4d5bf7c065 Use specific error code for exceptions during encoding/decoding.
After this change exceptions throw by MediaCodec during
encoding/decoding will result in TransformationExceptions with
ERROR_CODE_ENCODING_FAILED/ERROR_CODE_DECODING_FAILED.
Before this change ERROR_CODE_FAILED_RUNTIME_CHECK was used.

PiperOrigin-RevId: 421560396
2022-01-25 18:09:19 +00:00
huangdarwin
4ea08d5117 Transformer GL: Add pixel test instructions for physical devices
Expected images are taken on emulators, so a larger acceptable
difference from expected images must be accepted on physical devices.

PiperOrigin-RevId: 421543441
2022-01-25 18:08:12 +00:00
aquilescanta
1022812dab Remove Allocator.release(Allocation[]) and references
PiperOrigin-RevId: 421530365
2022-01-25 18:06:56 +00:00
hschlueter
f40f290a30 Remove Transformer-specific things from MediaCodecAdapter.
PiperOrigin-RevId: 421514944
2022-01-25 18:05:31 +00:00
tonihei
b12918d1e6 Disable live speed adjustment where it has no benefit
Live speed adjustment is used for all live playback at the moment,
but has no user visible effect if the media is not played with low
latency. To avoid unnecessary adjustment during playback without
benefit, this change restricts the live speed adjustment to cases
where either the user requested a speed value in the MediaItem or the
media specifically defined a low-latency stream.

Issue: google/ExoPlayer#9329
PiperOrigin-RevId: 421514283
2022-01-25 18:04:02 +00:00
tonihei
6caaf58d40 Update test relying on network type detection to run on all API levels.
This ensures we test the API level specific logic, in particular
around 5G-NSA detection.

Robolectric has a remaining bug that it doesn't support listening
to service state changes. Hence, we need to ignore some tests on
these API levels still until this is fixed.

PiperOrigin-RevId: 421505951
2022-01-25 18:02:43 +00:00
jaewan
7756d9823d Fix NPE in MediaController's constructor
MediaController tries to release itself when the binder to the
session becomes unavailable. However, if such thing happens while
connecting in the constructor, it causes NPE when accessing
MediaControllerImpl which is only initialized after it's
connected.

This fixes random failures in existing tests.

PiperOrigin-RevId: 421423381
2022-01-25 18:00:42 +00:00
samrobinson
9a4ad05586 Uncomment line.
Accidentally commented out the Ignore annotation.

PiperOrigin-RevId: 421304369
2022-01-25 17:59:12 +00:00
samrobinson
aab4872fc2 Add a Builder for TransformationResult.
PiperOrigin-RevId: 421278099
2022-01-25 17:58:04 +00:00
hschlueter
725b861f54 Allow multiple Transformer listeners to be registered.
Multiple listeners can be added to Transformer and its builder.
All or specific listeners can also be removed.

PiperOrigin-RevId: 421047650
2022-01-25 17:52:29 +00:00
hschlueter
b0ae7c04d5 Remove MediaCodecAdapter dependency from Transformer.
Codec and its factories can use MediaCodec directly as for API >= 21,
the SynchronousMediaCodecAdapter methods used in Codec just correspond
to a single MediaCodec call each so there is no reason to have another
wrapping layer.

PiperOrigin-RevId: 421041177
2022-01-25 17:51:11 +00:00
hschlueter
657e8768be Update Muxer exception javadoc to match MuxerWrapper.
PiperOrigin-RevId: 421039869
2022-01-25 17:49:46 +00:00
hschlueter
6070b200ae Add error code and exception type for muxing failures.
Exceptions thrown by MediaMuxer are converted MuxerExceptions
and later to TransformationExceptions with ERROR_CODE_MUXING_FAILED.

PiperOrigin-RevId: 421033721
2022-01-25 17:46:50 +00:00
Rakesh Kumar
4b99db938a Add support for RTSP H265
Added H265 RTP packet reader and added support for H265
playback through RTSP

Change-Id: Ic0e135768bb92cd3343212c2edd84bae6947320e
2022-01-18 19:36:22 +05:30
tonihei
b208d6d26e Fix decoder fallback logic for Dolby Atmos and Dolby Vision.
The media codec renderers have fallback logic in getDecoderInfos
to assume that E-AC3 decoders can handle the 2D version of E-AC3-JOC and
that H264/H265 decoders can handle some base layer of Dolby Vision
content. Both fallbacks are useful if there is no decoder for the
enhanced Dolby formats.

Both fallbacks are not applied during track selection at the moment
because the separate MediaCodecInfo.isCodecSupported method verifies
that the mime type corresponding to format.codecs is the same as the
decoder mime type (which isn't true for the fallback case).

To fix the fallback logic, we can just completely remove this additional
check because it's not needed in the context of this method that is only
called after we already established that the decoder can handle the
format.sampleMimeType.

In addition, we need to map the Dolby Vision profiles to the equivalent
H264/H265 profile to make the codec profile comparison sensible again.

PiperOrigin-RevId: 420959104
2022-01-11 13:47:17 +00:00
aquilescanta
66aa1faf7e Remove most allocations in SampleQueue.release
SampleQueues may be released in the context of a finally block
after an out of memory error. Allocating in that scenario can
throw yet a new OutOfMemoryError. By safely releasing SampleQueue
memory, we increase the possibility of handling the error
gracefully.

PiperOrigin-RevId: 420859022
2022-01-11 13:46:10 +00:00
olly
c19d1da6ed Require playback to be stuck for a minimum period before failing
PiperOrigin-RevId: 420738165
2022-01-11 13:45:08 +00:00
ibaker
d7b209a13b Remove setTag from (Ss|Hls|Dash)MediaSource.Factory
This method has been deprecated since 2.12.0 ([commit](d1bbd3507a)).

Also remove
DashMediaSource.Factory#setLivePresentationDelayMs(long, boolean), this
method has been deprecated since 2.13.0 ([commit](41b58d503a)).

PiperOrigin-RevId: 420719877
2022-01-11 13:44:06 +00:00
ibaker
220179ccbb Remove 'styled' from styledPlayerControlView field name
This class is already called StyledPlayerControlViewLayoutManager, it
seems unecessary to repeate the 'styled' word again in this context.

PiperOrigin-RevId: 420711161
2022-01-11 13:42:59 +00:00
ibaker
bc12306267 Rename some references from PlayerView to LegacyPlayerView
These were missed in 9dae5fd2c0

These references will be re-written to PlayerView when exporting to
exoplayer2, so this commit results in some small reformatting changes.

Also fix a reference to LegacyPlayerControlView that should be
StyledPlayerControlView.

PiperOrigin-RevId: 420707706
2022-01-11 13:41:50 +00:00
andrewlewis
ede93022c7 Fix spherical scene rendering
The draw method was disabling vertex attrib arrays but not re-enabling them. Remove the call to disable the vertex attrib arrays so that then remain enabled after the program is created.

Manually verified by setting the surface type to spherical in the demo app and playing a spherical sample video.

Issue: google/ExoPlayer#9782
PiperOrigin-RevId: 420707503
2022-01-11 13:40:45 +00:00