Releases: google/ExoPlayer
Releases · google/ExoPlayer
r2.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).
r2.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:
r2.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 aver...
r2.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).
r2.12.2
- Core library:
- 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:
- Retry playback after some types of
AudioTrack
error. - Work around
AudioManager
crashes when callinggetStreamVolume
(#8191).
- Retry playback after some types of
- Extractors:
- IMA extension:
- Upgrade IMA SDK dependency to 3.21.0, and release the
AdsLoader
(#7344). - Improve handling of ad tags with unsupported VPAID ads (#7832).
- Fix a bug that caused multiple ads in an ad pod to be skipped when one ad in the ad pod was skipped.
- Fix a bug that caused ad progress not to be updated if the player resumed after buffering during an ad (#8239).
- Fix passing an ads response to the
ImaAdsLoader
builder. - Set the overlay language based on the device locale by default.
- Upgrade IMA SDK dependency to 3.21.0, and release the
- Cronet extension:
- Fix handling of HTTP status code 200 when making unbounded length range requests (#8090).
- Text
- Allow tx3g subtitles with
styl
boxes with start and/or end offsets that lie outside the length of the cue text.
- Allow tx3g subtitles with
- Media2 extension:
- Notify onBufferingEnded when the state of origin player becomes STATE_IDLE or STATE_ENDED.
- Allow to remove all playlist items that makes the player reset.