Zeepium
Zeepium copied to clipboard
Update dependency com.google.android.exoplayer:exoplayer to v2.15.1
This PR contains the following updates:
Package | Change | Age | Adoption | Passing | Confidence |
---|---|---|---|---|---|
com.google.android.exoplayer:exoplayer | 2.11.1 -> 2.15.1 |
Release Notes
google/ExoPlayer
v2.15.1
- Core Library:
- Fix track selection in
StyledPlayerControlView
when usingForwardingPlayer
. - Fix
FlagSet#equals
on API levels below 24. - Fix
NullPointerException
being thrown fromCacheDataSource
when reading a fully cached resource withDataSpec.position
equal to the resource length. - Fix a bug when depending on ExoPlayer locally with a relative path (#β9403).
- Better handle invalid seek requests. Seeks to positions that are before the start or after the end of the media are now handled as seeks to the start and end respectively (8906).
- Rename
MimeTypes.AUDIO_DTS_UHD
toMimeTypes.AUDIO_DTS_X
and add required profile to its value (#β9429).
- Fix track selection in
- Extractors:
- Video:
- Request smaller decoder input buffers for Dolby Vision. This fixes an issue that could cause UHD Dolby Vision playbacks to fail on some devices, including Amazon Fire TV 4K.
- DRM:
- Fix
DefaultDrmSessionManager
to correctly eagerly release preacquired DRM sessions when there's a shortage of DRM resources on the device.
- Fix
- Downloads and caching:
- Workaround platform issue that can cause a
SecurityException
to be thrown fromRequirements.isInternetConnectivityValidated
on devices running Android 11 (#β9002).
- Workaround platform issue that can cause a
- DASH:
- Use identical cache keys for downloading and playing DASH segments (#β9370).
- Fix base URL selection and load error handling when base URLs are shared across adaptation sets.
- HLS:
- Fix bug where the player would get stuck if all download attempts fail and would not raise an error to the application (#β9390).
- RTSP:
- UI:
- Cast extension:
- Implement
CastPlayer.setPlaybackParameters(PlaybackParameters)
to support setting the playback speed (#β6784).
- Implement
v2.15.0
- Core Library:
- Add
MediaCodecAdapter.needsReconfiguration
method. - Add
getSeekBackIncrement
,seekBack
,getSeekForwardIncrement
,seekForward
,getMaxSeekToPreviousPosition
,seekToPrevious
andseekToNext
methods toPlayer
. - Rename
Player
methods:-
hasPrevious
tohasPreviousWindow
. -
previous
toseekToPreviousWindow
. -
hasNext
tohasNextWindow
. -
next
toseekToNextWindow
.
-
- Rename
Player
commands:-
COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM
toCOMMAND_SEEK_IN_CURRENT_WINDOW
. -
COMMAND_SEEK_TO_NEXT_MEDIA_ITEM
toCOMMAND_SEEK_TO_NEXT_WINDOW
. -
COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM
toCOMMAND_SEEK_TO_PREVIOUS_WINDOW
. -
COMMAND_SEEK_TO_MEDIA_ITEM
toCOMMAND_SEEK_TO_WINDOW
. -
COMMAND_GET_MEDIA_ITEMS
toCOMMAND_GET_TIMELINE
.
-
- Rename
Player.EventFlags
IntDef toPlayer.Event
. - Make
Player
depend on the newPlaybackException
class instead ofExoPlaybackException
:-
Player.getPlayerError
now returns aPlaybackException
. -
Player.Listener.onPlayerError
now receives aPlaybackException
. - Add a new listener method
Player.Listener.onPlayerErrorChanged
, which is equivalent toonPlayerError
except that it is also called when the player error becomesnull
. -
Player
implementations likeExoPlayer
may usePlaybackException
subclasses (likeExoPlaybackException
), so users can downcast thePlaybackException
instance to obtain implementation-specific fields (likeExoPlaybackException.rendererIndex
).
-
-
PlaybackException
introduces anerrorCode
which identifies the cause of the failure in order to simplify error handling (#β1611). - Add a
DefaultMediaDescriptionAdapter
for thePlayerNotificationManager
, that makes use of thePlayer
MediaMetadata
to populate the notification fields. - Add
@FallbackType
toLoadErrorHandlingPolicy
to support customization of the exclusion duration for locations and tracks. - Change interface of
LoadErrorHandlingPolicy
to support configuring the behavior of track and location fallback. Location fallback is currently only supported for DASH manifests with multiple base URLs. - Restrict use of
AudioTrack.isDirectPlaybackSupported
to TVs, to avoid listing audio offload encodings as supported for passthrough mode on mobile devices (#β9239).
- Add
- Extractors:
- Add support for DTS-UHD in MP4 (#β9163).
- Text:
- TTML: Inherit the
rubyPosition
value from a containing<span ruby="container">
element. - WebVTT: Add support for CSS
font-size
property (#β8964).
- TTML: Inherit the
- Ad playback:
- Support changing ad break positions in the player logic (#β5067).
- Support resuming content with an offset after an ad group.
- UI:
- Add
setUseRewindAction
andsetUseFastForwardAction
toPlayerNotificationManager
, andsetUseFastForwardActionInCompactView
andsetUseRewindActionInCompactView
to show the actions in compact view mode. - Remove
rewind_increment
andfastforward_increment
attributes fromPlayerControlView
andStyledPlayerControlView
. These increments can be customized by configuring thePlayer
(seesetSeekBackIncrementMs
andsetSeekForwardIncrementMs
inSimpleExoPlayer.Builder
), or by using aForwardingPlayer
that overridesgetSeekBackIncrement
,seekBack
,getSeekForwardIncrement
andseekForward
. The rewind and fast forward buttons can be disabled by using aForwardingPlayer
that removesCOMMAND_SEEK_BACK
andCOMMAND_SEEK_FORWARD
from the available commands. - Update
DefaultControlDispatcher
getRewindIncrementMs
andgetFastForwardIncrementMs
to take the player as parameter.
- Add
- DASH:
- HLS:
- RTSP:
- SmoothStreaming:
- Propagate
StreamIndex
elementName
attribute value asFormat
label (#β9252).
- Propagate
- Cronet extension:
- Add
CronetDataSource.Factory.setRequestPriority
to allow setting the priority of requests made byCronetDataSource
instances.
- Add
- OkHttp extension:
- Switch to OkHttp 4.9.1. This increases the extension's minimum SDK version requirement from 16 to 21.
- Remove deprecated symbols:
- Remove
CastPlayer
specific playlist manipulation methods. UsesetMediaItems
,addMediaItems
,removeMediaItem
andmoveMediaItem
instead. - Remove
Format.create
methods. UseFormat.Builder
instead. - Remove
MediaSource.getTag
. UseMediaSource.getMediaItem
andMediaItem.PlaybackProperties.tag
instead. - Remove
PlaybackPreparer
. UI components that previously hadsetPlaybackPreparer
methods will now callPlayer.prepare
by default. If this behavior is sufficient, use ofPlaybackPreparer
can be removed from application code without replacement. For custom preparation logic, use aForwardingPlayer
that implements custom preparation logic inprepare
. - Remove
Player.Listener.onTimelineChanged(Timeline, Object, int)
. UsePlayer.Listener.onTimelineChanged(Timeline, int)
instead. The manifest can be accessed usingPlayer.getCurrentManifest
. - Remove
Player.getCurrentTag
. UsePlayer.getCurrentMediaItem
andMediaItem.PlaybackProperties.tag
instead. - Remove
Player.getPlaybackError
. UsePlayer.getPlayerError
instead. - Remove
PlayerNotificationManager
constructors andcreateWith
methods. UsePlayerNotificationManager.Builder
instead. - Remove
PlayerNotificationManager.setNotificationListener
. UsePlayerNotificationManager.Builder.setNotificationListener
instead. - Remove
PlayerNotificationManager
setUseNavigationActions
andsetUseNavigationActionsInCompactView
. UsesetUseNextAction
,setUsePreviousAction
,setUseNextActionInCompactView
andsetUsePreviousActionInCompactView
instead. - Remove
setRewindIncrementMs
andsetFastForwardIncrementMs
from UI components. These increments can be customized by configuring thePlayer
(seesetSeekBackIncrementMs
andsetSeekForwardIncrementMs
inSimpleExoPlayer.Builder
), or by using aForwardingPlayer
that overridesgetSeekBackIncrement
,seekBack
,getSeekForwardIncrement
andseekForward
. The rewind and fast forward buttons can be disabled by using aForwardingPlayer
that removesCOMMAND_SEEK_BACK
andCOMMAND_SEEK_FORWARD
from the available commands. - Remove
Timeline.getWindow(int, Window, boolean)
. UseTimeline.getWindow(int, Window)
instead, which will always set tags.
- Remove
v2.14.2
- Core Library:
- Explicitly mark several methods on
SimpleExoPlayer
as@Deprecated
. These methods are all overrides and are already deprecated onPlayer
and the respectiveExoPlayer
component classes (since 2.14.0).
- Explicitly mark several methods on
- Video:
- Fix
IncorrectContextUseViolation
strict mode warning on Android 11 (#β8246).
- Fix
- Audio:
- Fix track selection for E-AC-3 streams.
- Use
AudioTrack.isDirectPlaybackSupported
to check for encoded audio passthrough capability from API 29 onwards, instead of using the HDMI audio plug intent (#β6500).
- Extractors:
- Fix issue where a
trun
atom could be associated with the wrong track in an FMP4 stream (#β9056). The fix removes a previous workaround to handle content in which thetrack_ID
is set incorrectly (#β4083). Such content is malformed and should be re-encoded. - Improve support for truncated Ogg streams (#β7608).
- Add support for MP4 H263 atom type (#β9158).
- Fix issue around TS synchronization when reading a file's duration (#β9100).
- Fix issue where a
- HLS:
- Fix issue where playback of a live event could become stuck rather than
transitioning to
STATE_ENDED
when the event ends (#β9067). - Fix issue where a new initialization segment, as specified by an
EXT-X-MAP
tag in a media playlist, would not be loaded when encountered during playback (#β9004). - Forward the
FRAME-RATE
value from the master playlist to renditions. (#β8960). - Fix issue where HLS events would start at positions greater than
specified by an
EXT-X-START
tag when placed in a playlist (#β9037).
- Fix issue where playback of a live event could become stuck rather than
transitioning to
- Ad playback:
- Use the content URI when auto-generating an ad ID (in addition to the media ID and ad tag URI) (#β9106.
- DRM:
- Allow repeated provisioning in
DefaultDrmSession(Manager)
. - Fix a crash due to
DefaultDrmSessionManager.release()
incorrectly releasing too many keep-aliveDefaultDrmSession
references, resulting inDefaultDrmSession.release()
throwing anIllegalStateException
(#β9193).
- Allow repeated provisioning in
- Metadata:
- Fix handling of emsg messages with an unset duration (#β9123).
- UI:
- Add
PendingIntent.FLAG_IMMUTABLE
when creating broadcast intents inPlayerNotificationManager
. This is required by a behaviour change in Android 12. - Fix focusability of
StyledPlayerView
andStyledPlayerControlView
popup menus on API levels prior to 26 (#β9061). - Fix progress bar flickering immediately after the user seeks (#β9049).
- Fix
StyledPlayerView
andStyledPlayerControlView
popup menu items not expanding to occupy the full width of the popup (#β9086). - Don't propagate
AttributeSet
fromSubtitleView
constructor intoCanvasSubtitleOutput
. Just passing theContext
is enough, and ensures programmatic changes to theSubtitleView
will propagate down.
- Add
- RTSP:
v2.14.1
- Core Library:
- Fix gradle config to allow specifying a relative path for
exoplayerRoot
when depending on ExoPlayer locally (#β8927). - Update
MediaItem.Builder
javadoc to discourage calling setters that will be (currently) ignored if another setter is not also called.
- Fix gradle config to allow specifying a relative path for
- Extractors:
- Add support for MPEG-H 3D Audio in MP4 extractors (#β8860).
- Video:
- Fix bug that could cause
CodecException: Error 0xffffffff
to be thrown fromMediaCodec.native_setSurface
in use cases that involve both swapping the outputSurface
and a mixture of secure and non-secure content being played (#β8776).
- Fix bug that could cause
- HLS:
- Use the
PRECISE
attribute inEXT-X-START
to select the default start position. - Fix a bug where skipping into spliced-in chunks triggered an assertion error (#β8937).
- Use the
- DRM:
- Keep secure
MediaCodec
instances initialized when disabling (but not resetting)MediaCodecRenderer
. This helps re-use secure decoders in more contexts, which avoids the 'black flash' caused by detaching aSurface
from a secure decoder on some devices (#β8842). It will also result in DRM license refresh network requests while the player is stopped ifPlayer#setForegroundMode
is true. - Fix issue where offline keys were unnecessarily (and incorrectly) restored into a session before being released. This call sequence is explicitly disallowed in OEMCrypto v16.
- Keep secure
- UI:
- Keep subtitle language features embedded (e.g. rubies & tate-chu-yoko)
in
Cue.text
even whenSubtitleView#setApplyEmbeddedStyles()
isfalse
. - Fix
NullPointerException
inStyledPlayerView
that could occur after callingStyledPlayerView.setPlayer(null)
(#β8985).
- Keep subtitle language features embedded (e.g. rubies & tate-chu-yoko)
in
- RTSP:
- GL demo app:
- Fix texture transformation to avoid green bars shown on some videos (#β8992).
v2.14.0
- Core Library:
- Move
Player
components toExoPlayer
. For examplePlayer.VideoComponent
is nowExoPlayer.VideoComponent
. - The most used methods of
Player
's audio, video, text and metadata components have been added directly toPlayer
. - Add
Player.getAvailableCommands
,Player.isCommandAvailable
andListener.onAvailableCommandsChanged
to query which commands that can be executed on the player. - Add a
Player.Listener
interface to receive all player events. Component listeners andEventListener
have been deprecated. - Add
Player.getMediaMetadata
, which returns a combined and structuredMediaMetadata
object. Changes to metadata are reported toListener.onMediaMetadataChanged
. -
Player.setPlaybackParameters
no longer accepts null, usePlaybackParameters.DEFAULT
instead. - Report information about the old and the new playback positions to
Listener.onPositionDiscontinuity
. AddDISCONTINUITY_REASON_SKIP
andDISCONTINUITY_REASON_REMOVE
as discontinuity reasons, and renameDISCONTINUITY_REASON_PERIOD_TRANSITION
toDISCONTINUITY_REASON_AUTO_TRANSITION
. RemoveDISCONTINUITY_REASON_AD_INSERTION
, for whichDISCONTINUITY_REASON_AUTO_TRANSITION
is used instead (#β6163, #β4768). - Deprecate
ExoPlayer.Builder
. UseSimpleExoPlayer.Builder
instead. - Move
Player.getRendererCount
andPlayer.getRendererType
toExoPlayer
. - Use an empty string instead of the URI if the media ID is not explicitly
set with
MediaItem.Builder.setMediaId(String)
. - Remove
MediaCodecRenderer.configureCodec()
and addMediaCodecRenderer.getMediaCodecConfiguration()
. The new method is called just before theMediaCodec
is created and returns the parameters needed to create and configure theMediaCodec
instance. Applications can overrideMediaCodecRenderer.onCodecInitialized()
to be notified after aMediaCodec
is initialized, or they can inject a customMediaCodecAdapter.Factory
if they want to control how theMediaCodec
is configured. - Promote
AdaptiveTrackSelection.AdaptationCheckpoint
topublic
visibility to allow Kotlin subclasses ofAdaptiveTrackSelection.Factory
(#β8830). - Fix bug when transitions from content to ad periods called
onMediaItemTransition
by mistake. -
AdsLoader.AdViewProvider
andAdsLoader.OverlayInfo
have been renamedcom.google.android.exoplayer2.ui.AdViewProvider
andcom.google.android.exoplayer2.ui.AdOverlayInfo
respectively. -
CaptionStyleCompat
has been moved to thecom.google.android.exoplayer2.ui
package. -
DebugTextViewHelper
has been moved from theui
package to theutil
package.
- Move
- RTSP:
- Initial support for RTSP playbacks (#β55).
- Downloads and caching:
- Fix
CacheWriter
to correctly handle cases where the requestDataSpec
extends beyond the end of the underlying resource. Caching will now succeed in this case, with data up to the end of the resource being cached. This behaviour is enabled by default, and so theallowShortContent
parameter has been removed (#β7326). - Fix
CacheWriter
to correctly handleDataSource.close
failures, for which it cannot be assumed that data was successfully written to the cache.
- Fix
- DRM:
- Prepare DRM sessions (and fetch keys) ahead of the playback position (#β4133).
- Only dispatch DRM session acquire and release events once per period when playing content that uses the same encryption keys for both audio & video tracks. Previously, separate acquire and release events were dispatched for each track in each period.
- Include the session state in DRM session-acquired listener methods.
- UI:
- Add
PlayerNotificationManager.Builder
, with the ability to specify which group the notification should belong to. - Remove
setUseSensorRotation
fromPlayerView
andStyledPlayerView
. Instead, cast the view returned bygetVideoSurfaceView
toSphericalGLSurfaceView
, and then callsetUseSensorRotation
on theSphericalGLSurfaceView
directly.
- Add
- Analytics:
- Add
onAudioCodecError
andonVideoCodecError
toAnalyticsListener
.
- Add
- Video:
- Add
Player.getVideoSize()
to retrieve the current size of the video stream. AddListener.onVideoSizeChanged(VideoSize)
and deprecateListener.onVideoSizeChanged(int, int, int, float)
.
- Add
- Audio:
- Report unexpected audio discontinuities to
AnalyticsListener.onAudioSinkError
(#β6384). - Allow forcing offload for gapless content even if gapless playback is not supported.
- Allow fall back from DTS-HD to DTS when playing via passthrough.
- Report unexpected audio discontinuities to
- Text:
- Fix overlapping lines when using
SubtitleView.VIEW_TYPE_WEB
. - Parse SSA/ASS underline & strikethrough info in
Style:
lines (#β8435). - Ensure TTML
tts:textAlign
is correctly propagated from<p>
nodes to child nodes. - Support TTML
ebutts:multiRowAlign
attributes.
- Fix overlapping lines when using
- Allow the use of Android platform extractors through
MediaParser.
Only supported on API 30+.
- You can use platform extractors for progressive media by passing
MediaParserExtractorAdapter.FACTORY
when creating aProgressiveMediaSource.Factory
. - You can use platform extractors for HLS by passing
MediaParserHlsMediaChunkExtractor.FACTORY
when creating aHlsMediaSource.Factory
. - You can use platform extractors for DASH by passing a
DefaultDashChunkSource
that usesMediaParserChunkExtractor.FACTORY
when creating aDashMediaSource.Factory
.
- You can use platform extractors for progressive media by passing
- Cast extension:
- Trigger
onMediaItemTransition
event for all reasons exceptMEDIA_ITEM_TRANSITION_REASON_REPEAT
.
- Trigger
- MediaSession extension:
- Remove dependency on
exoplayer-core
, relying onlyexoplayer-common
instead. To achieve this,TimelineQueueEditor
uses a newMediaDescriptionConverter
interface, and no longer relies onConcatenatingMediaSource
.
- Remove dependency on
- Remove deprecated symbols:
- Remove
ExoPlayerFactory
. UseSimpleExoPlayer.Builder
instead. - Remove
Player.DefaultEventListener
. UsePlayer.Listener
instead. - Remove
ExtractorMediaSource
. UseProgressiveMediaSource
instead. - Remove
DefaultMediaSourceEventListener
. UseMediaSourceEventListener
instead. - Remove
DashManifest
constructor. Use the remaining constructor withprogramInformation
andserviceDescription
set tonull
instead. - Remove
CryptoInfo.getFrameworkCryptoInfoV16
. UseCryptoInfo.getFrameworkCryptoInfo
instead. - Remove
NotificationUtil.createNotificationChannel(Context, String, int, int)
. UsecreateNotificationChannel(Context, String, int, int, int)
instead. - Remove
PlayerNotificationManager.setNotificationListener
. UsePlayerNotificationManager.Builder.setNotificationListener
instead. - Remove
PlayerNotificationManager.NotificationListener
onNotificationStarted(int, Notification)
andonNotificationCancelled(int)
. UseonNotificationPosted(int, Notification, boolean)
andonNotificationCancelled(int, boolean)
instead. - Remove
DownloadNotificationUtil
. UseDownloadNotificationHelper
instead. - Remove
extension-jobdispatcher
module. Use theextension-workmanager
module instead.
- Remove
v2.13.3
- Published via the Google Maven repository (i.e., google()) rather than JCenter.
- Core:
- UI:
- DASH:
- Parse
forced_subtitle
role from DASH manifests (#β8781).
- Parse
- DASH:
- Fix rounding error that could cause
SegmentTemplate.getSegmentCount()
to return incorrect values (#β8804).
- Fix rounding error that could cause
- HLS:
- Fix bug of ignoring
EXT-X-START
when setting the live target offset (#β8764). - Fix incorrect application of byte ranges to
EXT-X-MAP
tags (#β8783). - Fix issue that could cause playback to become stuck if corresponding
EXT-X-DISCONTINUITY
tags in different media playlists occur at different positions in time (#β8372). - Fix issue that could cause playback of on-demand content to not start in
cases where the media playlists referenced by the master playlist have
different starting
EXT-X-PROGRAM-DATE-TIME
tags. - Fix container type detection for segments with incorrect file extension or HTTP Content-Type (#β8733).
- Fix bug of ignoring
- Extractors:
- Add support for
GContainer
andGContainerItem
XMP namespace prefixes in JPEG motion photo parsing. - Allow JFIF APP0 marker segment preceding Exif APP1 segment in
JpegExtractor
.
- Add support for
- Text:
- Parse SSA/ASS bold & italic info in
Style:
lines (#β8435). - Don't display subtitles after the end position of the current media
period (if known). This ensures sideloaded subtitles respect the end
point of
ClippingMediaPeriod
and prevents content subtitles from continuing to be displayed over mid-roll ads (#β5317, #β8456). - Fix CEA-708 priority handling to sort cues in the order defined by the spec (#β8704).
- Support TTML
textEmphasis
attributes, used for Japanese boutens. - Support TTML
shear
attributes.
- Parse SSA/ASS bold & italic info in
- Metadata:
- Ensure that timed metadata near the end of a period is not dropped (#β8710).
- Cast extension:
- Fix
onPositionDiscontinuity
event so that it is not triggered with reasonDISCONTINUITY_REASON_PERIOD_TRANSITION
after a seek to another media item and so that it is not triggered after a timeline change.
- Fix
- IMA extension:
- FFmpeg extension: Fix playback failure when switching to TrueHD tracks during playback (#β8616).
v2.13.2
- Extractors:
- Add support for MP4 and QuickTime meta atoms that are not full atoms.
- UI:
- Make conditions to enable UI actions consistent in
DefaultControlDispatcher
,PlayerControlView
,StyledPlayerControlView
,PlayerNotificationManager
andTimelineQueueNavigator
. - Fix conditions to enable seeking to next/previous media item to handle the case where a live stream has ended.
- Make conditions to enable UI actions consistent in
- Audio:
- Fix
SimpleExoPlayer
reporting audio session ID as 0 in some cases (#β8585).
- Fix
- IMA extension:
- Fix a bug where playback could get stuck when seeking into a playlist item with ads, if the preroll ad had preloaded but the window position of the seek should instead trigger playback of a midroll.
- Fix a bug with playback of ads in playlists, where the incorrect period index was used when deciding whether to trigger playback of an ad after a seek.
- Text:
- Parse SSA/ASS font size in
Style:
lines (#β8435).
- Parse SSA/ASS font size in
- VP9 extension: Update to use NDK r21 (#β8581).
- FLAC extension: Update to use NDK r21 (#β8581).
- Opus extension: Update to use NDK r21 (#β8581).
- FFmpeg extension: Update to use NDK r21 (#β8581).
v2.13.1
- Live streaming:
- IMA extension:
- Fix handling of repeated ad loads, to avoid ads being discarded if the user seeks away and then back to a preloaded postroll (for example).
- Fix a bug where an assertion would fail if the player started to buffer an ad media period before the ad URI was known then an ad state update arrived that didn't set the ad URI.
- Add
ImaAdsLoader.focusSkipButton
to allow apps to request that the skip button should receive UI focus, if shown (#β8565).
- DRM:
- Re-use the previous
DrmSessionManager
instance when playing a playlist (if possible) (#β8523). - Propagate DRM configuration when creating media sources for ad content (#β8568).
- Only release 'keepalive' references to
DrmSession
inDefaultDrmSessionManager#release()
if keepalive is enabled (#β8576).
- Re-use the previous
v2.13.0
- Core library:
- Verify correct thread usage in
SimpleExoPlayer
by default. Opt-out is still possible until the next major release usingsetThrowsWhenUsingWrongThread(false)
(#β4463). - Add
Player.getCurrentStaticMetadata
andEventListener.onStaticMetadataChanged
to expose static metadata belonging to the currently playing stream (#β7266). - Add
PlayerMessage.setLooper
and deprecatePlayerMessage.setHandler
. - Add option to
MergingMediaSource
to clip the durations of all sources to have the same length (#β8422). - Remove
Player.setVideoDecoderOutputBufferRenderer
from Player API. UsesetVideoSurfaceView
andclearVideoSurfaceView
instead. - Default
SingleSampleMediaSource.treatLoadErrorsAsEndOfStream
totrue
so that errors loading external subtitle files do not cause playback to fail (#β8430). A warning will be logged bySingleSampleMediaPeriod
whenever a load error is treated as though the end of the stream has been reached. - Time out on release to prevent ANRs if an underlying platform call is stuck (#β4352).
- Time out when detaching a surface to prevent ANRs if the underlying platform call is stuck (#β5887).
- Fix bug where
AnalyticsListener
callbacks could arrive in the wrong order (#β8048).
- Verify correct thread usage in
- Media transformation:
- Add a new
transformer
module for converting media streams. The initially available transformations are changing the container format, removing tracks, and slow motion flattening.
- Add a new
- Low latency live streaming:
- Support low-latency DASH (also known as ULL-CMAF) and Apple's low-latency HLS extension.
- Add
LiveConfiguration
toMediaItem
to define live offset and playback speed adjustment parameters. The same parameters can be set onDefaultMediaSourceFactory
to apply for allMediaItems
. - Add
LivePlaybackSpeedControl
to control playback speed adjustments during live playbacks. Such adjustments allow the player to stay close to the live offset.DefaultLivePlaybackSpeedControl
is provided as a default implementation. - Add
targetLiveOffsetUs
parameter toLoadControl.shouldStartPlayback
.
- Extractors:
- Populate codecs string for H.264/AVC in MP4, Matroska and FLV streams to allow decoder capability checks based on codec profile and level (#β8393).
- Populate codecs string for H.265/HEVC in MP4, Matroska and MPEG-TS streams to allow decoder capability checks based on codec profile and level (#β8393).
- Add support for playing JPEG motion photos (#β5405).
- Handle sample size mismatches between raw audio
stsd
information andstsz
fixed sample size in MP4 extractors. - Fix Vorbis private codec data parsing in the Matroska extractor (#β8496).
- Track selection:
- Move
Player.getTrackSelector
to theExoPlayer
interface. - Move the mutable parts of
TrackSelection
into anExoTrackSelection
subclass. - Allow parallel adaptation of video and audio (#β5111).
- Simplify enabling tunneling with
DefaultTrackSelector
.ParametersBuilder.setTunnelingAudioSessionId
has been replaced withParametersBuilder.setTunnelingEnabled
. The player's audio session ID will be used, and so a tunneling specific ID is no longer needed. - Add additional configuration parameters to
DefaultTrackSelector
.DefaultTrackSelector.ParametersBuilder
now includes:-
setPreferredVideoMimeType
,setPreferredVideoMimeTypes
,setPreferredAudioMimeType
andsetPreferredAudioMimeTypes
for specifying preferred video and audio MIME type(s) (#β8320). -
setPreferredAudioLanguages
andsetPreferredTextLanguages
for specifying multiple preferred audio and text languages. -
setPreferredAudioRoleFlags
for specifying preferred audio role flags.
-
- Forward
Timeline
andMediaPeriodId
toTrackSelection.Factory
.
- Move
- DASH:
- HLS:
- Support playlist delta updates, blocking playlist reloads and rendition reports.
- Support low-latency HLS playback (
EXT-X-PART
and preload hints) (#β5011).
- UI:
- Improve
StyledPlayerControlView
button animations. - Miscellaneous fixes for
StyledPlayerControlView
in minimal mode.
- Improve
- DRM:
- Fix playback failure when switching from PlayReady protected content to Widevine or Clearkey protected content in a playlist.
- Add
ExoMediaDrm.KeyRequest.getRequestType
(#β7847). - Drop key and provision responses if
DefaultDrmSession
is released while waiting for the response. This prevents harmless log messages of the form:IllegalStateException: sending message to a Handler on a dead thread
(#β8328). - Allow apps to fully customize DRM behaviour for each
MediaItem
by passing aDrmSessionManagerProvider
toMediaSourceFactory
(#β8466).
- Analytics:
- Add an
onEvents
callback toPlayer.EventListener
andAnalyticsListener
. When one or more player states change simultaneously,onEvents
is called once after all of the callbacks associated with the individual state changes. - Pass a
DecoderReuseEvaluation
toAnalyticsListener
'sonVideoInputFormatChanged
andonAudioInputFormatChanged
methods. TheDecoderReuseEvaluation
indicates whether it was possible to re-use an existing decoder instance for the new format, and if not then the reasons why.
- Add an
- Video:
- Fall back to AVC/HEVC decoders for Dolby Vision streams with level 10 to 13 (#β8530).
- Fix VP9 format capability checks on API level 23 and earlier. The platform does not correctly report the VP9 level supported by the decoder in this case, so we estimate it based on the decoder's maximum supported bitrate.
- Audio:
- Fix handling of audio session IDs
(#β8190).
SimpleExoPlayer
now generates an audio session ID on construction, which can be immediately queried by callingSimpleExoPlayer.getAudioSessionId
. The audio session ID will only change if application code callsSimpleExoPlayer.setAudioSessionId
. - Replace
onAudioSessionId
withonAudioSessionIdChanged
inAudioListener
andAnalyticsListener
. Note thatonAudioSessionIdChanged
is called in fewer cases thanonAudioSessionId
was called, due to the improved handling of audio session IDs as described above. - Retry playback after some types of
AudioTrack
error. - Create E-AC3 JOC passthrough
AudioTrack
instances using the maximum supported channel count (instead of assuming 6 channels) from API 29.
- Fix handling of audio session IDs
(#β8190).
- Text:
- Data sources:
- For
HttpDataSource
implementations, default to using the user agent of the underlying network stack. - Deprecate
HttpDataSource.Factory.getDefaultRequestProperties
.HttpDataSource.Factory.setDefaultRequestProperties
instead. - Add
DefaultHttpDataSource.Factory
and deprecateDefaultHttpDataSourceFactory
.
- For
- Metadata retriever:
- Parse Google Photos HEIC and JPEG motion photo metadata.
- IMA extension:
- Add support for playback of ads in playlists (#β3750).
- Add
ImaAdsLoader.Builder.setEnableContinuousPlayback
for setting whether to request ads for continuous playback. - Upgrade IMA SDK dependency to 3.22.0. This fixes leaking of the ad view group (#β7344, #β8339).
- Fix a bug that could cause the next content position played after a seek to snap back to the cue point of the preceding ad, rather than the requested content position.
- Fix a regression that caused an ad group to be skipped after an initial seek to a non-zero position. Unsupported VPAID ads will still be skipped, but only after the preload timeout rather than instantly (#β8428, #β7832).
- Fix a regression that caused a short ad followed by another ad to be skipped due to playback being stuck buffering waiting for the second ad to load (#β8492).
- FFmpeg extension:
- Link the FFmpeg library statically, saving 350KB in binary size on average.
- OkHttp extension:
- Add
OkHttpDataSource.Factory
and deprecateOkHttpDataSourceFactory
.
- Add
- Cronet extension:
- Add
CronetDataSource.Factory
and deprecateCronetDataSourceFactory
. - Support setting the user agent on
CronetDataSource.Factory
andCronetEngineWrapper
.
- Add
- MediaSession extension:
- Support
setPlaybackSpeed(float)
and disable it by default. UseMediaSessionConnector.setEnabledPlaybackActions(long)
to enable (#β8229).
- Support
- Remove deprecated symbols:
-
AdaptiveMediaSourceEventListener
. UseMediaSourceEventListener
instead. -
DashMediaSource.Factory.setMinLoadableRetryCount(int)
. UseDashMediaSource.Factory.setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)
instead. -
DefaultAnalyticsListener
. UseAnalyticsListener
instead. -
DefaultLoadControl
constructors. UseDefaultLoadControl.Builder
instead. -
DrmInitData.get(UUID)
. UseDrmInitData.get(int)
andDrmInitData.SchemeData.matches(UUID)
instead. -
ExtractorsMediaSource.Factory.setMinLoadableRetryCount(int)
. UseExtractorsMediaSource.Factory.setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)
instead. -
FixedTrackSelection.Factory
. If you need to disable adaptive selection inDefaultTrackSelector
, enable theDefaultTrackSelector.Parameters.forceHighestSupportedBitrate
flag. -
HlsMediaSource.Factory.setMinLoadableRetryCount(int)
. UseHlsMediaSource.Factory.setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)
instead. -
MappedTrackInfo.getTrackFormatSupport(int, int, int)
. UseMappedTrackInfo.getTrackSupport(int, int, int)
instead. -
MappedTrackInfo.getTrackTypeRendererSupport(int)
. UseMappedTrackInfo.getTypeSupport(int)
instead. -
MappedTrackInfo.getUnassociatedTrackGroups()
. UseMappedTrackInfo.getUnmappedTrackGroups()
instead. -
MappedTrackInfo.length
. UseMappedTrackInfo.getRendererCount()
instead. -
Player.DefaultEventListener.onTimelineChanged(Timeline, Object)
. UsePlayer.EventListener.onTimelineChanged(Timeline, int)
instead. -
Player.setAudioAttributes(AudioAttributes)
. UsePlayer.AudioComponent.setAudioAttributes(AudioAttributes, boolean)
instead. -
PlayerView.setDefaultArtwork(Bitmap)
. UsePlayerView.setDefaultArtwork(Drawable)
instead. -
PlayerView.setShowBuffering(boolean)
. UsePlayerView.setShowBuffering(int)
instead. -
SimpleExoPlayer.clearMetadataOutput(MetadataOutput)
. UseSimpleExoPlayer.removeMetadataOutput(MetadataOutput)
instead. -
SimpleExoPlayer.clearTextOutput(TextOutput)
. UseSimpleExoPlayer.removeTextOutput(TextOutput)
instead. -
SimpleExoPlayer.clearVideoListener()
. UseSimpleExoPlayer.removeVideoListener(VideoListener)
instead. -
SimpleExoPlayer.getAudioStreamType()
. UseSimpleExoPlayer.getAudioAttributes()
instead. -
SimpleExoPlayer.setAudioDebugListener(AudioRendererEventListener)
. UseSimpleExoPlayer.addAnalyticsListener(AnalyticsListener)
instead. -
SimpleExoPlayer.setAudioStreamType(int)
. UseSimpleExoPlayer.setAudioAttributes(AudioAttributes)
instead. -
SimpleExoPlayer.setMetadataOutput(MetadataOutput)
. UseSimpleExoPlayer.addMetadataOutput(MetadataOutput)
instead. If your application is callingSimpleExoPlayer.setMetadataOutput(null)
, make sure to replace this call with a call toSimpleExoPlayer.removeMetadataOutput(MetadataOutput)
. -
SimpleExoPlayer.setPlaybackParams(PlaybackParams)
. UseSimpleExoPlayer.setPlaybackParameters(PlaybackParameters)
instead. -
SimpleExoPlayer.setTextOutput(TextOutput)
. UseSimpleExoPlayer.addTextOutput(TextOutput)
instead. If your application is callingSimpleExoPlayer.setTextOutput(null)
, make sure to replace this call with a call toSimpleExoPlayer.removeTextOutput(TextOutput)
. -
SimpleExoPlayer.setVideoDebugListener(VideoRendererEventListener)
. UseSimpleExoPlayer.addAnalyticsListener(AnalyticsListener)
instead. -
SimpleExoPlayer.setVideoListener(VideoListener)
. UseSimpleExoPlayer.addVideoListener(VideoListener)
instead. If your application is callingSimpleExoPlayer.setVideoListener(null)
, make sure to replace this call with a call toSimpleExoPlayer.removeVideoListener(VideoListener)
. -
SimpleExoPlayer.VideoListener
. Usecom.google.android.exoplayer2.video.VideoListener
instead. -
SingleSampleMediaSource.EventListener
and constructors. UseMediaSourceEventListener
andSingleSampleMediaSource.Factory
instead. -
SimpleExoPlayer.addVideoDebugListener
,SimpleExoPlayer.removeVideoDebugListener
,SimpleExoPlayer.addAudioDebugListener
andSimpleExoPlayer.removeAudioDebugListener
. UseSimpleExoPlayer.addAnalyticsListener
andSimpleExoPlayer.removeAnalyticsListener
instead. -
SingleSampleMediaSource.Factory.setMinLoadableRetryCount(int)
. UseSingleSampleMediaSource.Factory.setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)
instead. -
SsMediaSource.Factory.setMinLoadableRetryCount(int)
. UseSsMediaSource.Factory.setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)
instead.
-
v2.12.3
- Core library:
- Fix
MediaCodecRenderer
issue where empty streams would fail to play in bypass mode (#β8374). - Fix playback issues after seeking during an ad (#β8349).
- Fix propagation of
LoadErrorHandlingPolicy
fromDefaultMediaSourceFactory
intoSingleSampleMediaSource.Factory
when creating subtitle media sources fromMediaItem.playbackProperties.subtitles
(#β8430).
- Fix
- UI:
- Fix issue where pop-up menus belonging to
StyledPlayerControlView
would not be dismissed when tapping outside of the menu area or pressing the back button, on API level 22 and earlier (#β8272).
- Fix issue where pop-up menus belonging to
- Downloads:
- Fix crash in
DownloadManager
that could occur when adding a stopped download with the same ID as a download currently being removed (#β8419).
- Fix crash in
- Text:
- Gracefully handle null-terminated subtitle content in Matroska containers.
- Fix CEA-708 anchor positioning (#β1807).
- IMA extension:
- Media2 extension:
- Make media2-extension depend on AndroidX media2:media2-session:1.1.0 to fix a deadlock while creating PlaybackStateCompat internally. (#β8011).
v2.12.2
- Core library:
- Suppress exceptions from registering and unregistering the stream volume receiver (#β8087, #β8106).
- Suppress ProGuard warnings caused by Guava's compile-only dependencies (#β8103).
- Fix issue that could cause playback to freeze when selecting tracks, if extension audio renderers are being used (#β8203).
- UI:
- Fix incorrect color and text alignment of the
StyledPlayerControlView
fast forward and rewind buttons, when used together with thecom.google.android.material
library (#β7898). - Add
dispatchPrepare(Player)
toControlDispatcher
and implement it inDefaultControlDispatcher
. DeprecatePlaybackPreparer
andsetPlaybackPreparer
inStyledPlayerView
,StyledPlayerControlView
,PlayerView
,PlayerControlView
,PlayerNotificationManager
andLeanbackPlayerAdapter
and useControlDispatcher
for dispatching prepare instead (#β7882). - Increase seekbar's touch target height in
StyledPlayerControlView
. - Update
StyledPlayerControlView
menu items to behave correctly for right-to-left languages. - Support enabling the previous and next actions individually in
PlayerNotificationManager
.
- Fix incorrect color and text alignment of the
- Audio:
- Work around
AudioManager
crashes when callinggetStreamVolume
(#β8191).
- Work around
- Extractors:
- IMA extension:
- U
Configuration
π Schedule: At any time (no schedule defined).
π¦ Automerge: Disabled by config. Please merge this manually once you are satisfied.
β» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
π Ignore: Close this PR and you won't be reminded about this update again.
- [ ] If you want to rebase/retry this PR, click this checkbox.
This PR has been generated by WhiteSource Renovate. View repository job log here.