exoplayer-amzn-2.10.6/RELEASENOTES.md
SegmentDownloader to improve overall download
speed (#5978)Player.onPlaybackSuppressionReasonChanged to allow listeners to
detect playbacks suppressions (e.g. transient audio focus loss) directly
(#6203).IcyInfo
(#6476).app:played_color on PlayerView and PlayerControlView no longer
adjusts the colors of the scrubber handle , buffered and unplayed parts of
the time bar. These can be set separately using app:scrubber_color,
app:buffered_color and app_unplayed_color respectively.app:ad_marker_color on PlayerView and PlayerControlView no
longer adjusts the color of played ad markers. The color of played ad
markers can be set separately using app:played_ad_marker_color.Player.isPlaying and EventListener.onIsPlayingChanged to check whether
the playback position is advancing. This helps to determine if playback is
suppressed due to audio focus loss. Also add
Player.getPlaybackSuppressedReason to determine the reason of the
suppression (#6203).allowAudioMixedChannelCountAdaptiveness parameter to
DefaultTrackSelector to allow adaptive selections of audio tracks with
different channel counts.DefaultBandwidthMeter to initial values on network change.ProgressiveMediaPeriod in case a single extractor is
provided (#6325).HttpDataSource.getResponseCode to provide the status code associated
with the most recent HTTP response.LoadErrorHandlingPolicy classified the error as fatal.PlayerNotificationManager to show play icon rather than pause icon when
playback is ended (#6324).ImaAdsLoader.onTimelineChanged
(#5831).Scheduler implementation that uses WorkManager.SilenceMediaSource position is in range
(#6229).VORBIS_COMMENT and PICTURE metadata
(#5527).DataSchemeDataSource re-opening and range requests
(#6192).performClick on PlayerView without
PlayerControlView
(#6260).PlayerView incorrectly consuming touch events if no controller is
attached (#6109).Subtype into Format.roleFlags.MediaSessionConnector.play() not resuming
playback (#6093).ResolvingDataSource for just-in-time resolution of DataSpecs
(#5779).SilenceMediaSource that can be used to play silence of a given
duration (#5735).playWhenReady flag to MediaSessionConnector.PlaybackPreparer methods
to indicate whether a controller sent a play or only a prepare command. This
allows to take advantage of decoder reuse with the MediaSessionConnector
(#5891).ProgressUpdateListener to PlayerControlView
(#5834).DefaultDataSource
(#6036).DefaultRenderersFactory
(#5942).ACCESS_NETWORK_STATE permission
(#6019).maxAudioBitrate for adaptive audio track groups
(#6006).Formats without
bitrate information
(#5971).CastPlayer.getCurrentWindowIndex()
(#5955).NullPointerException when using HLS chunkless preparation
(#5868).ExtractorMediaSource to ProgressiveMediaSource.ProgressiveMediaSource.Factory would mean that
DefaultExtractorsFactory would be kept by proguard. Custom
ExtractorsFactory instances must now be passed via the
ProgressiveMediaSource.Factory constructor, and setExtractorsFactory is
deprecated.PriorityTaskManager from DefaultLoadControl to SimpleExoPlayer.ExoPlaybackException types for remote exceptions and out-of-memory
errors.Format.FileNotFoundException.MediaSource in calls
to ExoPlayer.prepare causes an IndexOutOfBoundsException
(#5520).DownloadManager now tracks all offline content,
not just tasks in progress. Read
this page for more details.SimpleCache
(#4253).DataSpec.FLAG_ALLOW_CACHING_UNKNOWN_LENGTH) has been
replaced with an opt out flag
(DataSpec.FLAG_DONT_CACHE_IF_LENGTH_UNKNOWN).DefaultTrackSelector
(#3314).TrackSelection.Factory interface to support creating all track
selections together.SelectionOverride.DefaultTimeBar based on duration of media and add parameter to set
the minimum update interval to control the smoothness of the updates
(#5040).TrackSelectionViews to
TrackSelectionDialogBuilder and add option to select multiple overrides.PlayerNotificationManager.NotificationListener to
better fit service requirements.PlayerNotificationManager.PlayerNotificationManager and DownloadNotificationUtil. For the latter,
applications should switch to using DownloadNotificationHelper.DefaultTimeBar
(#5767).AudioProcessors to be drained of pending output after they are
reconfigured.MediaCodecSelector.DEFAULT_WITH_FALLBACK. Apps should instead
signal that fallback should be used by passing true as the
enableDecoderFallback parameter when instantiating the video renderer.MediaCodecList.ALL_CODECS when selecting a tunneling decoder
(#5547).Format.roleFlags.EXT-X-MEDIA CHARACTERISTICS attribute into Format.roleFlags.IndexOutOfBoundsException in some live HLS scenarios
(#5816).scaleToFit
and useSurfaceYuvOutput.TimelineQueueNavigator not publishing the queue in shuffled
order when in shuffle mode.registerCustomCommandReceiver.Bundle when reporting a custom error.player and isTopLevelSource parameters from MediaSource.prepare.Player on AdsLoader instances before
playback.ImaAdsMediaSource. Create AdsMediaSource with an
ImaAdsLoader instead.AdsMediaSource constructors. Listen for media source
events using AdsMediaSource.addEventListener, and ad interaction events by
adding a listener when building ImaAdsLoader.AdsLoader.AdViewProvider. PlayerView
implements this interface and will register its control view. This makes it
possible for ad loading SDKs to calculate ad viewability accurately.EventStream presentation timestamps
(#5490).CHANNELS attribute from EXT-X-MEDIA tag.Handler parameter to methods that take a callback Runnable.OnClickListener from receiving events
(#5433).AnalyticsListener.EventTime
(#5407).startPositionUs to MediaSource.createPeriod. This fixes an issue where
using lazy preparation in ConcatenatingMediaSource with an
ExtractorMediaSource overrides initial seek positions
(#5350).MediaDescriptionAdapter of the
PlayerNotificationManager.ClippingMediaSource with an inner
ExtractorMediaSource and a non-zero start position
(#5351).FLAG_ALLOW_NON_IDR_KEYFRAMES.TYPE_ROTATION_VECTOR if
TYPE_GAME_ROTATION_VECTOR is unavailable
(#5119).show_buffering attribute in PlayerView
(#5139).Metadata was output when it failed to decode
(#5149).MediaCrypto when using C.CLEARKEY_UUID before API 27.Player.next, Player.previous, Player.hasNext
and Player.hasPrevious
(#4863).ConcatenatingMediaSource
(#4873).TimelineQueueNavigator
(#5065).SubtitleView had a
non-zero position offset to its parent
(#4788).NullPointerException is thrown when removing an unprepared
media source from a ConcatenatingMediaSource with the useLazyPreparation
option enabled (#4986).compileOptions { targetCompatibility JavaVersion.VERSION_1_8 } to their
gradle settings to ensure bytecode compatibility.compileSdkVersion and targetSdkVersion to 28.SimpleExoPlayer.setAudioAttributes.ExoPlayer.retry convenience method.AudioListener for listening to changes in audio configuration during
playback (#3994).LoadErrorHandlingPolicy to allow configuration of load error handling
across MediaSource implementations
(#3370).Looper, which specifies the thread that must be used to
access the player, when instantiating player instances using
ExoPlayerFactory (#4278).BandwidthMeter injection: The BandwidthMeter should now be
passed directly to ExoPlayerFactory, instead of to TrackSelection.Factory
and DataSource.Factory. The BandwidthMeter is passed to the components
that need it internally. The BandwidthMeter may also be omitted, in which
case a default instance will be used.surface_type="spherical_view" on
PlayerView.EXT-X-KEY tags.EXT-X-INDEPENDENT-SEGMENTS in the master playlist.HlsMediaSource.Factory take a factory of trackers instead of a
tracker instance (#4814).messageData attribute for in-manifest event streams.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING flag must be set on the extractor to
enable this functionality.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING flag must be set on the extractor
to enable this functionality.DefaultExtractorsFactory.setConstantBitrateSeekingEnabled to enable
approximate seeking using a constant bitrate assumption on all extractors
that support it.VideoListener to notify of surface size changes.AudioTrack via
Player.setAuxEffectInfo and Player.clearAuxEffectInfo.AudioTrack buffer sizes to the theoretical maximum required for
each encoding for passthrough playbacks
(#3803).DefaultDrmSessionEventListener and AnalyticsListener to
be notified of acquired and released DRM sessions.LoadEventInfo in MediaSourceEventListener and
AnalyticsListener callbacks. This uri is the redirected uri if redirection
occurred (#2054).LoadEventInfo in MediaSourceEventListener
and AnalyticsListener callbacks
(#4361 and
#4615).PlayerView to show buffering view when playWhenReady is
false (#4304).Drawable to be used as PlayerView default artwork.DefaultLoadControl.Builder
(#4857).CacheKeyFactory for setting custom cache keys when
creating a CacheDataSource.TrackSelection.updateSelectedTrack has two new parameters for the current
queue of media chunks and iterators for information about upcoming chunks.MediaCodecSelectors to return multiple compatible decoders for
MediaCodecRenderer, and provide an (optional) MediaCodecSelector that
falls back to less preferred decoders like MediaCodec.createDecoderByType
(#273).SingleSampleMediaSource
(#4771).Player.getTotalBufferedDuration and
Player.getContentBufferedDuration
(#4023).player.getCurrentTag() throws an IndexOutOfBoundsException
(#4822).multiSession=true)
for non-Widevine DefaultDrmSessionManager instances
(#4834).MediaSessionConnector.setCustomErrorMessage to support setting custom
error messages.MediaMetadataProvider to support setting custom metadata
(#3497).ImaAdsLoader (#3879).PlayerView.isControllerVisible
(#4385).DefaultTimeBar
(#4611).MediaSource loads are slow to cancel
(#4249).Player.EventListener invocations for recursive player state
changes (#4276).MediaCodec.native_setSurface crash on Moto C
(#4315).METADATA_KEY_TITLE on media descriptions
(#4292).InvalidResponseCodeExceptions.PlayerMessages.PlayerView.setKeepContentOnPlayerReset to keep the currently displayed
video frame or media artwork visible when the player is reset
(#2843).DownloadService, DownloadManager and related classes
(#2643). Information on
using these components to download progressive formats can be found
here.
To see how to download DASH, HLS and SmoothStreaming media, take a look at
the app.DynamicConcatenatingMediaSource into ConcatenatingMediaSource and
deprecated DynamicConcatenatingMediaSource.ClippingMediaSource.MediaSourceEventListeners to MediaSources after
they have been created. Listening to events is now supported for all
media sources including composite sources.MediaSourceEventListener to get notified when media
periods are created, released and being read from.ClippingMediaSource.Player.getCurrentTag.PlayerView.AspectRatioFrameLayout's aspect ratio update
(#3736).PlayerNotificationManager for displaying notifications reflecting the
player state.TrackSelectionView for selecting tracks with DefaultTrackSelector.TrackNameProvider for converting track Formats to textual
descriptions, and DefaultTrackNameProvider as a default implementation.MappingTrackSelector and DefaultTrackSelector.DefaultTrackSelector.Parameters now implements Parcelable.AudioTrack position tracking from DefaultAudioSink.PlaybackParameters
(#2635).AudioProcessors
(#3142).Cache interface, and prevent multiple instances
of SimpleCache using the same folder at the same time.MediaSourceEventListener on AdsMediaSource,
and allow setting an ad event listener on ImaAdsLoader. Deprecate the
AdsMediaSource.EventListener.AnalyticsListener interface which can be registered in
SimpleExoPlayer to receive detailed metadata for each ExoPlayer event.DefaultLoadControl.getPlaybackError to Player interface.AdaptiveTrackSelection to
DefaultBandwidthMeter.BaseRenderer.onStreamChanged.Timeline.Window.windowStartTimeMs field
(#3865,
#3888).MediaCodecVideoRenderer and
LibvpxVideoRenderer, even if it is late.stop to reset the player when stopping.EventListener.onTimelineChanged to distinguish between
initial preparation, reset and dynamic updates.Player.DISCONTINUITY_REASON_AD_INSERTION to the possible reasons
reported in Eventlistener.onPositionDiscontinuity to distinguish
transitions to and from ads within one period from transitions between
periods.ExoPlayer.sendMessages with ExoPlayer.createMessage to allow
more customization of the message. Now supports setting a message delivery
playback position and/or a delivery handler
(#2189).Player.VideoComponent, Player.TextComponent and
Player.MetadataComponent interfaces that define optional video, text and
metadata output functionality. New getVideoComponent, getTextComponent
and getMetadataComponent methods provide access to this functionality.ExoPlayer.setSeekParameters for controlling how seek operations are
performed. The SeekParameters class contains defaults for exact seeking and
seeking to the closest sync points before, either side or after specified seek
positions. SeekParameters are not currently supported when playing HLS
streams.DefaultTrackSelector.Parameters copy methods with a builder.LoadControl implementations.SequenceableLoader to re-evaluate its buffer and discard
buffered media so that it can be re-buffered in a different quality.CompositeSequenceableLoader
factories through DashMediaSource.Factory, HlsMediaSource.Factory,
SsMediaSource.Factory, and MergingMediaSource.Player, and renamed them to PlayerView and PlayerControlView
respectively.PlayerView automatically apply video rotation when configured to use
TextureView (#91).PlayerView play button behave correctly when the player is ended
(#3689), and call a
PlaybackPreparer when the player is idle.urn:mpeg:dash:event:2012 and scheme values "1", "2" and "3".CacheDataSource to see whether it's possible
to switch to reading/writing the cache having initially bypassed it.EventLogger moved from the demo app into the core library.sys.display-size on Philips ATVs
(#3807).Extractors on the loading thread to avoid potentially leaking
resources when the playback thread has quit by the time the loading task has
completed.ExtractorMediaSource, HlsMediaSource, SsMediaSource,
DashMediaSource and SingleSampleMediaSource.MediaSourceEventListener for all MediaSource
implementations.DefaultAudioSink, and add an option
to use this with FfmpegAudioRenderer.DefaultLoadControl to set maximum buffer size in bytes and
to choose whether size or time constraints are prioritized.DummySurface, if available
(#3558).Player.DefaultEventListener abstract class can be extended to avoid
having to implement all methods defined by Player.EventListener.EventListener.onPositionDiscontinuity
(#3252).setShuffleModeEnabled method for enabling shuffled playback.Renderers that don't consume any media
(#3212).Player.onPositionDiscontinuity. DISCONTINUITY_REASON_SEEK_ADJUSTMENT is
added to disambiguate position adjustments during seeks from other types of
internal position discontinuity.IndexOutOfBoundsException when calling ExoPlayer.getDuration
(#3362).ContentDataSource when reading from certain ContentProvider
implementations (#3426).SingleSampleMediaSource to suppress load errors
(#3140).DynamicConcatenatingMediaSource: Allow specifying a callback to be invoked
after a dynamic playlist modification has been applied
(#3407).AudioSink interface allows customization of audio output path.Downloader implementations for DASH, HLS, SmoothStreaming
and progressive streams.HlsMediaSource.IndexOutOfBoundsException when using ImaMediaSource
(#3334).ExoPlayer.prepare is called with resetPosition
set to false.FrameworkMediaCrypto and by making DefaultDashChunkSource.getNextChunk
non-final.THREAD_PRIORITY_AUDIO.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING extractor option to enable
constant bitrate seeking in MP3 files that would otherwise be unseekable
(#2445)..mp3 tracks
(#2066).ExoPlayer 2.x is a major iteration of the library. It includes significant API and architectural changes, new features and many bug fixes. You can read about some of the motivations behind ExoPlayer 2.x here.
com.google.android.exoplayer2. The library
structure and class names have also been sanitized. Read more
here.Note: Since ExoPlayer V1 is still being maintained alongside V2, there is some overlap between these notes and the notes above. r2.0.0 followed from r1.5.11, and hence it can be assumed that all changes in r1.5.11 and earlier are included in all V2 releases. This cannot be assumed for changes in r1.5.12 and later, however it can be assumed that all such changes are included in the most recent V2 release.
.mp3 tracks
(#2066).DefaultUriDataSource now handles http://, https://,
file://, asset:// and content:// URIs automatically. It also handles
file:///android_asset/* URIs, and file paths like /path/to/media.mp4 where the
scheme is omitted.