1*30877f79SAndroid Build Coastguard Worker# Release notes
2*30877f79SAndroid Build Coastguard Worker
3*30877f79SAndroid Build Coastguard Worker### dev-v2 (not yet released)
4*30877f79SAndroid Build Coastguard Worker
5*30877f79SAndroid Build Coastguard Worker*   Core library:
6*30877f79SAndroid Build Coastguard Worker    *   Support preferred video role flags in track selection
7*30877f79SAndroid Build Coastguard Worker        ((#9402)[https://github.com/google/ExoPlayer/issues/9402]).
8*30877f79SAndroid Build Coastguard Worker    *   Prefer audio content preferences (for example, "default" audio track or
9*30877f79SAndroid Build Coastguard Worker        track matching system Locale language) over technical track selection
10*30877f79SAndroid Build Coastguard Worker        constraints (for example, preferred MIME type, or maximum channel
11*30877f79SAndroid Build Coastguard Worker        count).
12*30877f79SAndroid Build Coastguard Worker    *   Prohibit duplicate `TrackGroup`s in a `TrackGroupArray`. `TrackGroup`s
13*30877f79SAndroid Build Coastguard Worker        can always be made distinguishable by setting an `id` in the
14*30877f79SAndroid Build Coastguard Worker        `TrackGroup` constructor. This fixes a crash when resuming playback
15*30877f79SAndroid Build Coastguard Worker        after backgrounding the app with an active track override
16*30877f79SAndroid Build Coastguard Worker        ((#9718)[https://github.com/google/ExoPlayer/issues/9718]).
17*30877f79SAndroid Build Coastguard Worker    *   Sleep and retry when creating a `MediaCodec` instance fails. This works
18*30877f79SAndroid Build Coastguard Worker        around an issue that occurs on some devices when switching a surface
19*30877f79SAndroid Build Coastguard Worker        from a secure codec to another codec
20*30877f79SAndroid Build Coastguard Worker        (#8696)[https://github.com/google/ExoPlayer/issues/8696].
21*30877f79SAndroid Build Coastguard Worker    *   Add `MediaCodecAdapter.getMetrics()` to allow users obtain metrics data
22*30877f79SAndroid Build Coastguard Worker        from `MediaCodec`.
23*30877f79SAndroid Build Coastguard Worker        ([#9766](https://github.com/google/ExoPlayer/issues/9766)).
24*30877f79SAndroid Build Coastguard Worker    *   Amend logic in `AdaptiveTrackSelection` to allow a quality increase
25*30877f79SAndroid Build Coastguard Worker        under sufficient network bandwidth even if playback is very close to the
26*30877f79SAndroid Build Coastguard Worker        live edge ((#9784)[https://github.com/google/ExoPlayer/issues/9784]).
27*30877f79SAndroid Build Coastguard Worker    *   Fix Maven dependency resolution
28*30877f79SAndroid Build Coastguard Worker        ((#8353)[https://github.com/google/ExoPlayer/issues/8353]).
29*30877f79SAndroid Build Coastguard Worker*   Android 12 compatibility:
30*30877f79SAndroid Build Coastguard Worker    *   Upgrade the Cast extension to depend on
31*30877f79SAndroid Build Coastguard Worker        `com.google.android.gms:play-services-cast-framework:20.1.0`. Earlier
32*30877f79SAndroid Build Coastguard Worker        versions of `play-services-cast-framework` are not compatible with apps
33*30877f79SAndroid Build Coastguard Worker        targeting Android 12, and will crash with an `IllegalArgumentException`
34*30877f79SAndroid Build Coastguard Worker        when creating `PendingIntent`s
35*30877f79SAndroid Build Coastguard Worker        ([#9528](https://github.com/google/ExoPlayer/issues/9528)).
36*30877f79SAndroid Build Coastguard Worker*   Audio:
37*30877f79SAndroid Build Coastguard Worker    *   Add a `Builder` to `DefaultAudioSink` and deprecate the existing
38*30877f79SAndroid Build Coastguard Worker        constructors.
39*30877f79SAndroid Build Coastguard Worker    *   Change `AudioCapabilities` APIs to require passing explicitly
40*30877f79SAndroid Build Coastguard Worker        `AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES` instead of `null`.
41*30877f79SAndroid Build Coastguard Worker*   Extractors:
42*30877f79SAndroid Build Coastguard Worker    *   Fix inconsistency with spec in H.265 SPS nal units parsing
43*30877f79SAndroid Build Coastguard Worker        ((#9719)[https://github.com/google/ExoPlayer/issues/9719]).
44*30877f79SAndroid Build Coastguard Worker*   Text:
45*30877f79SAndroid Build Coastguard Worker    *   Add a `MediaItem.SubtitleConfiguration#id` field which is propagated to
46*30877f79SAndroid Build Coastguard Worker        the `Format#id` field of the subtitle track created from the
47*30877f79SAndroid Build Coastguard Worker        configuration
48*30877f79SAndroid Build Coastguard Worker        ((#9673)[https://github.com/google/ExoPlayer/issues/9673]).
49*30877f79SAndroid Build Coastguard Worker    *   Rename `DecoderCounters#inputBufferCount` to `queuedInputBufferCount`.
50*30877f79SAndroid Build Coastguard Worker*   DRM:
51*30877f79SAndroid Build Coastguard Worker    *   Remove `playbackLooper` from `DrmSessionManager.(pre)acquireSession`.
52*30877f79SAndroid Build Coastguard Worker        When a `DrmSessionManager` is used by an app in a custom `MediaSource`,
53*30877f79SAndroid Build Coastguard Worker        the `playbackLooper` needs to be passed to `DrmSessionManager.setPlayer`
54*30877f79SAndroid Build Coastguard Worker        instead.
55*30877f79SAndroid Build Coastguard Worker*   IMA:
56*30877f79SAndroid Build Coastguard Worker    *   Add a method to `AdPlaybackState` to allow resetting an ad group so that
57*30877f79SAndroid Build Coastguard Worker        it can be played again
58*30877f79SAndroid Build Coastguard Worker        ([#9615](https://github.com/google/ExoPlayer/issues/9615)).
59*30877f79SAndroid Build Coastguard Worker*   DASH:
60*30877f79SAndroid Build Coastguard Worker    *   Support the `forced-subtitle` track role
61*30877f79SAndroid Build Coastguard Worker        ([#9727](https://github.com/google/ExoPlayer/issues/9727)).
62*30877f79SAndroid Build Coastguard Worker    *   Stop interpreting the `main` track role as `C.SELECTION_FLAG_DEFAULT`.
63*30877f79SAndroid Build Coastguard Worker*   HLS:
64*30877f79SAndroid Build Coastguard Worker    *   Use chunkless preparation by default to improve start up time. If your
65*30877f79SAndroid Build Coastguard Worker        renditions contain muxed closed-caption tracks that are *not* declared
66*30877f79SAndroid Build Coastguard Worker        in the master playlist, you should add them to the master playlist to be
67*30877f79SAndroid Build Coastguard Worker        available for playback, or turn off chunkless preparation with
68*30877f79SAndroid Build Coastguard Worker        `HlsMediaSource.Factory.setAllowChunklessPreparation(false)`.
69*30877f79SAndroid Build Coastguard Worker    *   Support key-frame accurate seeking in HLS
70*30877f79SAndroid Build Coastguard Worker        ([#2882](https://github.com/google/ExoPlayer/issues/2882)).
71*30877f79SAndroid Build Coastguard Worker    *   Correctly populate `Format.label` for audio only HLS streams
72*30877f79SAndroid Build Coastguard Worker        ([#9608](https://github.com/google/ExoPlayer/issues/9608)).
73*30877f79SAndroid Build Coastguard Worker    *   Timestamp adjuster initialization occurs after opening the `DataSource`
74*30877f79SAndroid Build Coastguard Worker        ([#9777](https://github.com/google/ExoPlayer/pull/9777)).
75*30877f79SAndroid Build Coastguard Worker*   UI:
76*30877f79SAndroid Build Coastguard Worker    *   Fix the color of the numbers in `StyledPlayerView` rewind and
77*30877f79SAndroid Build Coastguard Worker        fastforward buttons when using certain themes
78*30877f79SAndroid Build Coastguard Worker        ([#9765](https://github.com/google/ExoPlayer/issues/9765)).
79*30877f79SAndroid Build Coastguard Worker*   Transformer:
80*30877f79SAndroid Build Coastguard Worker    *   Increase required min API version to 21.
81*30877f79SAndroid Build Coastguard Worker    *   `TransformationException` is now used to describe errors that occur
82*30877f79SAndroid Build Coastguard Worker        during a transformation.
83*30877f79SAndroid Build Coastguard Worker    *   Add `TransformationRequest` for specifying the transformation options.
84*30877f79SAndroid Build Coastguard Worker*   MediaSession extension:
85*30877f79SAndroid Build Coastguard Worker    *   Remove deprecated call to `onStop(/* reset= */ true)` and provide an
86*30877f79SAndroid Build Coastguard Worker        opt-out flag for apps that don't want to clear the playlist on stop.
87*30877f79SAndroid Build Coastguard Worker*   RTSP:
88*30877f79SAndroid Build Coastguard Worker    *   Provide a client API to override the `SocketFactory` used for any server
89*30877f79SAndroid Build Coastguard Worker        connection ([#9606](https://github.com/google/ExoPlayer/pull/9606)).
90*30877f79SAndroid Build Coastguard Worker    *   Prefers DIGEST authentication method over BASIC if both are present.
91*30877f79SAndroid Build Coastguard Worker        ([#9800](https://github.com/google/ExoPlayer/issues/9800)).
92*30877f79SAndroid Build Coastguard Worker*   Cast extension
93*30877f79SAndroid Build Coastguard Worker    *   Fix bug that prevented `CastPlayer` from calling `onIsPlayingChanged`
94*30877f79SAndroid Build Coastguard Worker        correctly.
95*30877f79SAndroid Build Coastguard Worker*   Remove deprecated symbols:
96*30877f79SAndroid Build Coastguard Worker    *   Remove `MediaSourceFactory#setDrmSessionManager`,
97*30877f79SAndroid Build Coastguard Worker        `MediaSourceFactory#setDrmHttpDataSourceFactory`, and
98*30877f79SAndroid Build Coastguard Worker        `MediaSourceFactory#setDrmUserAgent`. Use
99*30877f79SAndroid Build Coastguard Worker        `MediaSourceFactory#setDrmSessionManagerProvider` instead.
100*30877f79SAndroid Build Coastguard Worker    *   Remove `MediaSourceFactory#setStreamKeys`. Use
101*30877f79SAndroid Build Coastguard Worker        `MediaItem.Builder#setStreamKeys` instead.
102*30877f79SAndroid Build Coastguard Worker    *   Remove `MediaSourceFactory#createMediaSource(Uri)`. Use
103*30877f79SAndroid Build Coastguard Worker        `MediaSourceFactory#createMediaSource(MediaItem)` instead.
104*30877f79SAndroid Build Coastguard Worker    *   Remove `setTag` from `DashMediaSource`, `HlsMediaSource` and
105*30877f79SAndroid Build Coastguard Worker        `SsMediaSource`. Use `MediaItem.Builder#setTag` instead.
106*30877f79SAndroid Build Coastguard Worker    *   Remove `DashMediaSource#setLivePresentationDelayMs(long, boolean)`. Use
107*30877f79SAndroid Build Coastguard Worker        `MediaItem.Builder#setLiveConfiguration` and
108*30877f79SAndroid Build Coastguard Worker        `MediaItem.LiveConfiguration.Builder#setTargetOffsetMs` to override the
109*30877f79SAndroid Build Coastguard Worker        manifest, or `DashMediaSource#setFallbackTargetLiveOffsetMs` to provide
110*30877f79SAndroid Build Coastguard Worker        a fallback value.
111*30877f79SAndroid Build Coastguard Worker
112*30877f79SAndroid Build Coastguard Worker### 2.16.1 (2021-11-18)
113*30877f79SAndroid Build Coastguard Worker
114*30877f79SAndroid Build Coastguard Worker*   Core Library:
115*30877f79SAndroid Build Coastguard Worker    *   Fix track selection issue where overriding one track group did not
116*30877f79SAndroid Build Coastguard Worker        disable other track groups of the same type
117*30877f79SAndroid Build Coastguard Worker        ([#9675](https://github.com/google/ExoPlayer/issues/9675)).
118*30877f79SAndroid Build Coastguard Worker    *   Fix track selection issue where a mixture of non-empty and empty track
119*30877f79SAndroid Build Coastguard Worker        overrides is not applied correctly
120*30877f79SAndroid Build Coastguard Worker        ([#9649](https://github.com/google/ExoPlayer/issues/9649)).
121*30877f79SAndroid Build Coastguard Worker    *   Add protected method `DefaultRenderersFactory.getCodecAdapterFactory()`
122*30877f79SAndroid Build Coastguard Worker        so that subclasses of `DefaultRenderersFactory` that override
123*30877f79SAndroid Build Coastguard Worker        `buildVideoRenderers()` or `buildAudioRenderers()` can access the codec
124*30877f79SAndroid Build Coastguard Worker        adapter factory and pass it to `MediaCodecRenderer` instances they
125*30877f79SAndroid Build Coastguard Worker        create.
126*30877f79SAndroid Build Coastguard Worker    *   Propagate ICY header fields `name` and `genre` to
127*30877f79SAndroid Build Coastguard Worker        `MediaMetadata.station` and `MediaMetadata.genre` respectively so that
128*30877f79SAndroid Build Coastguard Worker        they reach the app via `Player.Listener.onMediaMetadataChanged()`
129*30877f79SAndroid Build Coastguard Worker        ([#9677](https://github.com/google/ExoPlayer/issues/9677)).
130*30877f79SAndroid Build Coastguard Worker    *   Remove null keys from `DefaultHttpDataSource#getResponseHeaders`.
131*30877f79SAndroid Build Coastguard Worker*   Extractors:
132*30877f79SAndroid Build Coastguard Worker    *   WAV: Add support for RF64 streams
133*30877f79SAndroid Build Coastguard Worker        ([#9543](https://github.com/google/ExoPlayer/issues/9543)).
134*30877f79SAndroid Build Coastguard Worker*   DASH:
135*30877f79SAndroid Build Coastguard Worker    *   Add parsed essential and supplemental properties to the `Representation`
136*30877f79SAndroid Build Coastguard Worker        ([#9579](https://github.com/google/ExoPlayer/issues/9579)).
137*30877f79SAndroid Build Coastguard Worker*   HLS:
138*30877f79SAndroid Build Coastguard Worker    *   Correctly populate `Format.label` for audio only HLS streams
139*30877f79SAndroid Build Coastguard Worker        ([#9608](https://github.com/google/ExoPlayer/issues/9608)).
140*30877f79SAndroid Build Coastguard Worker
141*30877f79SAndroid Build Coastguard Worker### 2.16.0 (2021-11-04)
142*30877f79SAndroid Build Coastguard Worker
143*30877f79SAndroid Build Coastguard Worker*   Core Library:
144*30877f79SAndroid Build Coastguard Worker    *   Deprecate `SimpleExoPlayer`. All functionality has been moved to
145*30877f79SAndroid Build Coastguard Worker        `ExoPlayer` instead. `ExoPlayer.Builder` can be used instead of
146*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer.Builder`.
147*30877f79SAndroid Build Coastguard Worker    *   Add track selection methods to the `Player` interface, for example,
148*30877f79SAndroid Build Coastguard Worker        `Player.getCurrentTracksInfo` and `Player.setTrackSelectionParameters`.
149*30877f79SAndroid Build Coastguard Worker        These methods can be used instead of directly accessing the track
150*30877f79SAndroid Build Coastguard Worker        selector.
151*30877f79SAndroid Build Coastguard Worker    *   Enable MediaCodec asynchronous queueing by default on devices with API
152*30877f79SAndroid Build Coastguard Worker        level >= 31. Add methods in `DefaultMediaCodecRendererFactory` and
153*30877f79SAndroid Build Coastguard Worker        `DefaultRenderersFactory` to force enable or force disable asynchronous
154*30877f79SAndroid Build Coastguard Worker        queueing ([6348](https://github.com/google/ExoPlayer/issues/6348)).
155*30877f79SAndroid Build Coastguard Worker    *   Remove final dependency on `jcenter()`.
156*30877f79SAndroid Build Coastguard Worker    *   Fix `mediaMetadata` being reset when media is repeated
157*30877f79SAndroid Build Coastguard Worker        ([#9458](https://github.com/google/ExoPlayer/issues/9458)).
158*30877f79SAndroid Build Coastguard Worker    *   Adjust `ExoPlayer` `MediaMetadata` update priority, such that values
159*30877f79SAndroid Build Coastguard Worker        input through the `MediaItem.MediaMetadata` are used above media derived
160*30877f79SAndroid Build Coastguard Worker        values.
161*30877f79SAndroid Build Coastguard Worker    *   Move `com.google.android.exoplayer2.device.DeviceInfo` to
162*30877f79SAndroid Build Coastguard Worker        `com.google.android.exoplayer2.DeviceInfo`.
163*30877f79SAndroid Build Coastguard Worker    *   Move `com.google.android.exoplayer2.drm.DecryptionException` to
164*30877f79SAndroid Build Coastguard Worker        `com.google.android.exoplayer2.decoder.CryptoException`.
165*30877f79SAndroid Build Coastguard Worker    *   Move `com.google.android.exoplayer2.upstream.cache.CachedRegionTracker`
166*30877f79SAndroid Build Coastguard Worker        to `com.google.android.exoplayer2.upstream.CachedRegionTracker`.
167*30877f79SAndroid Build Coastguard Worker    *   Move `Player.addListener(EventListener)` and
168*30877f79SAndroid Build Coastguard Worker        `Player.removeListener(EventListener)` out of `Player` into subclasses.
169*30877f79SAndroid Build Coastguard Worker*   Android 12 compatibility:
170*30877f79SAndroid Build Coastguard Worker    *   Keep `DownloadService` started and in the foreground whilst waiting for
171*30877f79SAndroid Build Coastguard Worker        requirements to be met on Android 12. This is necessary due to new
172*30877f79SAndroid Build Coastguard Worker        [foreground service launch restrictions](https://developer.android.com/about/versions/12/foreground-services).
173*30877f79SAndroid Build Coastguard Worker        `DownloadService.getScheduler` will not be called on Android 12 devices.
174*30877f79SAndroid Build Coastguard Worker    *   Disable platform transcoding when playing content URIs on Android 12.
175*30877f79SAndroid Build Coastguard Worker    *   Add `ExoPlayer.setVideoChangeFrameRateStrategy` to allow disabling of
176*30877f79SAndroid Build Coastguard Worker        calls from the player to `Surface.setFrameRate`. This is useful for
177*30877f79SAndroid Build Coastguard Worker        applications wanting to call `Surface.setFrameRate` directly from
178*30877f79SAndroid Build Coastguard Worker        application code with Android 12's `Surface.CHANGE_FRAME_RATE_ALWAYS`.
179*30877f79SAndroid Build Coastguard Worker    *   Upgrade the WorkManager extension to depend on
180*30877f79SAndroid Build Coastguard Worker        `androidx.work:work-runtime:2.7.0`. Earlier versions of `work-runtime`
181*30877f79SAndroid Build Coastguard Worker        are not compatible with apps targeting Android 12, and will crash with
182*30877f79SAndroid Build Coastguard Worker        an `IllegalArgumentException` when creating `PendingIntent`s
183*30877f79SAndroid Build Coastguard Worker        ([#9181](https://github.com/google/ExoPlayer/issues/9181)).
184*30877f79SAndroid Build Coastguard Worker*   Video:
185*30877f79SAndroid Build Coastguard Worker    *   Fix bug in `MediaCodecVideoRenderer` that resulted in re-using a
186*30877f79SAndroid Build Coastguard Worker        released `Surface` when playing without an app-provided `Surface`
187*30877f79SAndroid Build Coastguard Worker        ([#9476](https://github.com/google/ExoPlayer/issues/9476)).
188*30877f79SAndroid Build Coastguard Worker*   DRM:
189*30877f79SAndroid Build Coastguard Worker    *   Log an error (instead of throwing `IllegalStateException`) when calling
190*30877f79SAndroid Build Coastguard Worker        `DefaultDrmSession#release()` on a fully released session
191*30877f79SAndroid Build Coastguard Worker        ([#9392](https://github.com/google/ExoPlayer/issues/9392)).
192*30877f79SAndroid Build Coastguard Worker*   UI:
193*30877f79SAndroid Build Coastguard Worker    *   `SubtitleView` no longer implements `TextOutput`. `SubtitleView`
194*30877f79SAndroid Build Coastguard Worker        implements `Player.Listener`, so can be registered to a player with
195*30877f79SAndroid Build Coastguard Worker        `Player.addListener`.
196*30877f79SAndroid Build Coastguard Worker    *   Fix initial timestamp display in `PlayerControlView`
197*30877f79SAndroid Build Coastguard Worker        ([#9524](https://github.com/google/ExoPlayer/issues/9254)).
198*30877f79SAndroid Build Coastguard Worker    *   Fix capitalization of languages in the track selector
199*30877f79SAndroid Build Coastguard Worker        ([#9452](https://github.com/google/ExoPlayer/issues/9452)).
200*30877f79SAndroid Build Coastguard Worker*   Extractors:
201*30877f79SAndroid Build Coastguard Worker    *   MP4: Correctly handle HEVC tracks with pixel aspect ratios other than 1.
202*30877f79SAndroid Build Coastguard Worker    *   MP4: Add support for Dolby TrueHD (only for unfragmented streams)
203*30877f79SAndroid Build Coastguard Worker        ([#9496](https://github.com/google/ExoPlayer/issues/9496)).
204*30877f79SAndroid Build Coastguard Worker    *   MP4: Avoid throwing `ArrayIndexOutOfBoundsException` when parsing
205*30877f79SAndroid Build Coastguard Worker        invalid `colr` boxes produced by some device cameras
206*30877f79SAndroid Build Coastguard Worker        ([#9332](https://github.com/google/ExoPlayer/issues/9332)).
207*30877f79SAndroid Build Coastguard Worker    *   MP4: Parse HDR static metadata from the `clli` and `mdcv` boxes.
208*30877f79SAndroid Build Coastguard Worker    *   TS: Correctly handle HEVC tracks with pixel aspect ratios other than 1.
209*30877f79SAndroid Build Coastguard Worker    *   TS: Map stream type 0x80 to H262
210*30877f79SAndroid Build Coastguard Worker        ([#9472](https://github.com/google/ExoPlayer/issues/9472)).
211*30877f79SAndroid Build Coastguard Worker*   Downloads and caching:
212*30877f79SAndroid Build Coastguard Worker    *   Modify `DownloadService` behavior when `DownloadService.getScheduler`
213*30877f79SAndroid Build Coastguard Worker        returns `null`, or returns a `Scheduler` that does not support the
214*30877f79SAndroid Build Coastguard Worker        requirements for downloads to continue. In both cases, `DownloadService`
215*30877f79SAndroid Build Coastguard Worker        will now remain started and in the foreground whilst waiting for
216*30877f79SAndroid Build Coastguard Worker        requirements to be met.
217*30877f79SAndroid Build Coastguard Worker    *   Modify `DownloadService` behavior when running on Android 12 and above.
218*30877f79SAndroid Build Coastguard Worker        See the "Android 12 compatibility" section above.
219*30877f79SAndroid Build Coastguard Worker*   RTSP:
220*30877f79SAndroid Build Coastguard Worker    *   Support RFC4566 SDP attribute field grammar
221*30877f79SAndroid Build Coastguard Worker        ([#9430](https://github.com/google/ExoPlayer/issues/9430)).
222*30877f79SAndroid Build Coastguard Worker*   DASH:
223*30877f79SAndroid Build Coastguard Worker    *   Populate `Format.sampleMimeType`, `width` and `height` for image
224*30877f79SAndroid Build Coastguard Worker        `AdaptationSet` elements
225*30877f79SAndroid Build Coastguard Worker        ([#9500](https://github.com/google/ExoPlayer/issues/9500)).
226*30877f79SAndroid Build Coastguard Worker*   HLS:
227*30877f79SAndroid Build Coastguard Worker    *   Fix rounding error in HLS playlists
228*30877f79SAndroid Build Coastguard Worker        ([#9575](https://github.com/google/ExoPlayer/issues/9575)).
229*30877f79SAndroid Build Coastguard Worker    *   Fix `NoSuchElementException` thrown when an HLS manifest declares
230*30877f79SAndroid Build Coastguard Worker        `#EXT-X-RENDITION-REPORT` at the beginning of the playlist
231*30877f79SAndroid Build Coastguard Worker        ([#9592](https://github.com/google/ExoPlayer/issues/9592)).
232*30877f79SAndroid Build Coastguard Worker*   RTMP extension:
233*30877f79SAndroid Build Coastguard Worker    *   Upgrade to `io.antmedia:rtmp_client`, which does not rely on `jcenter()`
234*30877f79SAndroid Build Coastguard Worker        ([#9591](https://github.com/google/ExoPlayer/issues/9591)).
235*30877f79SAndroid Build Coastguard Worker*   MediaSession extension:
236*30877f79SAndroid Build Coastguard Worker    *   Rename
237*30877f79SAndroid Build Coastguard Worker        `MediaSessionConnector.QueueNavigator#onCurrentWindowIndexChanged` to
238*30877f79SAndroid Build Coastguard Worker        `onCurrentMediaItemIndexChanged`.
239*30877f79SAndroid Build Coastguard Worker*   Transformer:
240*30877f79SAndroid Build Coastguard Worker    *   Avoid sending a duplicate timestamp to the encoder with the end of
241*30877f79SAndroid Build Coastguard Worker        stream buffer.
242*30877f79SAndroid Build Coastguard Worker*   Remove deprecated symbols:
243*30877f79SAndroid Build Coastguard Worker    *   Remove `Renderer.VIDEO_SCALING_MODE_*` constants. Use identically named
244*30877f79SAndroid Build Coastguard Worker        constants in `C` instead.
245*30877f79SAndroid Build Coastguard Worker    *   Remove `C.MSG_*` constants. Use identically named constants in
246*30877f79SAndroid Build Coastguard Worker        `Renderer` instead, except for `C.MSG_SET_SURFACE`, which is replaced
247*30877f79SAndroid Build Coastguard Worker        with `Renderer.MSG_SET_VIDEO_OUTPUT`.
248*30877f79SAndroid Build Coastguard Worker    *   Remove `DeviceListener`. Use `Player.Listener` instead.
249*30877f79SAndroid Build Coastguard Worker    *   Remove `CacheDataSourceFactory`. Use `CacheDataSource.Factory` instead.
250*30877f79SAndroid Build Coastguard Worker    *   Remove `CacheDataSinkFactory`. Use `CacheDataSink.Factory` instead.
251*30877f79SAndroid Build Coastguard Worker    *   Remove `FileDataSourceFactory`. Use `FileDataSource.Factory` instead.
252*30877f79SAndroid Build Coastguard Worker    *   Remove `SimpleExoPlayer.addMetadataOutput` and `removeMetadataOutput`.
253*30877f79SAndroid Build Coastguard Worker        Use `Player.addListener` and `Player.Listener` instead.
254*30877f79SAndroid Build Coastguard Worker    *   Remove `SimpleExoPlayer.addAudioListener`, `removeAudioListener` and
255*30877f79SAndroid Build Coastguard Worker        `AudioListener`. Use `Player.addListener` and `Player.Listener` instead.
256*30877f79SAndroid Build Coastguard Worker    *   Remove `SimpleExoPlayer.addVideoListener`, `removeVideoListener` and
257*30877f79SAndroid Build Coastguard Worker        `VideoListener`. Use `Player.addListener` and `Player.Listener` instead.
258*30877f79SAndroid Build Coastguard Worker    *   Remove `DefaultHttpDataSourceFactory`. Use
259*30877f79SAndroid Build Coastguard Worker        `DefaultHttpDataSource.Factory` instead.
260*30877f79SAndroid Build Coastguard Worker    *   Remove `SingleSampleMediaSource.createMediaSource(Uri, Format, long)`.
261*30877f79SAndroid Build Coastguard Worker        Use `SingleSampleMediaSource.createMediaSource(MediaItem.Subtitle,
262*30877f79SAndroid Build Coastguard Worker        long)` instead.
263*30877f79SAndroid Build Coastguard Worker    *   Remove `HttpDataSource.Factory.getDefaultRequestProperties`. Use
264*30877f79SAndroid Build Coastguard Worker        `HttpDataSource.Factory.setDefaultRequestProperties` instead.
265*30877f79SAndroid Build Coastguard Worker    *   Remove `GvrAudioProcessor` and the GVR extension, which has been
266*30877f79SAndroid Build Coastguard Worker        deprecated since 2.11.0.
267*30877f79SAndroid Build Coastguard Worker    *   Remove `DownloadService.onDownloadChanged` and
268*30877f79SAndroid Build Coastguard Worker        `DownloadService.onDownloadRemoved`. Instead, use
269*30877f79SAndroid Build Coastguard Worker        `DownloadManager.addListener` to register a listener directly to the
270*30877f79SAndroid Build Coastguard Worker        `DownloadManager` returned through `DownloadService.getDownloadManager`.
271*30877f79SAndroid Build Coastguard Worker    *   Remove `Player.getCurrentStaticMetadata`,
272*30877f79SAndroid Build Coastguard Worker        `Player.Listener.onStaticMetadataChanged` and
273*30877f79SAndroid Build Coastguard Worker        `Player.EVENT_STATIC_METADATA_CHANGED`. Use `Player.getMediaMetadata`,
274*30877f79SAndroid Build Coastguard Worker        `Player.Listener.onMediaMetadataChanged` and
275*30877f79SAndroid Build Coastguard Worker        `Player.EVENT_MEDIA_METADATA_CHANGED` for convenient access to
276*30877f79SAndroid Build Coastguard Worker        structured metadata, or access the raw static metadata directly from the
277*30877f79SAndroid Build Coastguard Worker        `TrackSelection#getFormat()`.
278*30877f79SAndroid Build Coastguard Worker    *   Remove `ControlDispatcher` and `DefaultControlDispatcher`. Operations
279*30877f79SAndroid Build Coastguard Worker        can be customized by using a `ForwardingPlayer`, or when configuring the
280*30877f79SAndroid Build Coastguard Worker        player (for example by using
281*30877f79SAndroid Build Coastguard Worker        `ExoPlayer.Builder.setSeekBackIncrementMs`).
282*30877f79SAndroid Build Coastguard Worker
283*30877f79SAndroid Build Coastguard Worker### 2.15.1 (2021-09-20)
284*30877f79SAndroid Build Coastguard Worker
285*30877f79SAndroid Build Coastguard Worker*   Core Library:
286*30877f79SAndroid Build Coastguard Worker    *   Fix track selection in `StyledPlayerControlView` when using
287*30877f79SAndroid Build Coastguard Worker        `ForwardingPlayer`.
288*30877f79SAndroid Build Coastguard Worker    *   Fix `FlagSet#equals` on API levels below 24.
289*30877f79SAndroid Build Coastguard Worker    *   Fix `NullPointerException` being thrown from `CacheDataSource` when
290*30877f79SAndroid Build Coastguard Worker        reading a fully cached resource with `DataSpec.position` equal to the
291*30877f79SAndroid Build Coastguard Worker        resource length.
292*30877f79SAndroid Build Coastguard Worker    *   Fix a bug when [depending on ExoPlayer locally](README.md#locally) with
293*30877f79SAndroid Build Coastguard Worker        a relative path
294*30877f79SAndroid Build Coastguard Worker        ([#9403](https://github.com/google/ExoPlayer/issues/9403)).
295*30877f79SAndroid Build Coastguard Worker    *   Better handle invalid seek requests. Seeks to positions that are before
296*30877f79SAndroid Build Coastguard Worker        the start or after the end of the media are now handled as seeks to the
297*30877f79SAndroid Build Coastguard Worker        start and end respectively
298*30877f79SAndroid Build Coastguard Worker        ([8906](https://github.com/google/ExoPlayer/issues/8906)).
299*30877f79SAndroid Build Coastguard Worker    *   Rename `MimeTypes.AUDIO_DTS_UHD` to `MimeTypes.AUDIO_DTS_X` and add
300*30877f79SAndroid Build Coastguard Worker        required profile to its value
301*30877f79SAndroid Build Coastguard Worker        ([#9429](https://github.com/google/ExoPlayer/issues/9429)).
302*30877f79SAndroid Build Coastguard Worker*   Extractors:
303*30877f79SAndroid Build Coastguard Worker    *   Support TS packets without PTS flag
304*30877f79SAndroid Build Coastguard Worker        ([#9294](https://github.com/google/ExoPlayer/issues/9294)).
305*30877f79SAndroid Build Coastguard Worker    *   Fix issue decoding ID3 tags containing UTF-16 encoded strings
306*30877f79SAndroid Build Coastguard Worker        ([#9087](https://github.com/google/ExoPlayer/issues/9087)).
307*30877f79SAndroid Build Coastguard Worker*   Video:
308*30877f79SAndroid Build Coastguard Worker    *   Request smaller decoder input buffers for Dolby Vision. This fixes an
309*30877f79SAndroid Build Coastguard Worker        issue that could cause UHD Dolby Vision playbacks to fail on some
310*30877f79SAndroid Build Coastguard Worker        devices, including Amazon Fire TV 4K.
311*30877f79SAndroid Build Coastguard Worker*   DRM:
312*30877f79SAndroid Build Coastguard Worker    *   Fix `DefaultDrmSessionManager` to correctly eagerly release preacquired
313*30877f79SAndroid Build Coastguard Worker        DRM sessions when there's a shortage of DRM resources on the device.
314*30877f79SAndroid Build Coastguard Worker*   Downloads and caching:
315*30877f79SAndroid Build Coastguard Worker    *   Workaround platform issue that can cause a `SecurityException` to be
316*30877f79SAndroid Build Coastguard Worker        thrown from `Requirements.isInternetConnectivityValidated` on devices
317*30877f79SAndroid Build Coastguard Worker        running Android 11
318*30877f79SAndroid Build Coastguard Worker        ([#9002](https://github.com/google/ExoPlayer/issues/9002)).
319*30877f79SAndroid Build Coastguard Worker*   DASH:
320*30877f79SAndroid Build Coastguard Worker    *   Use identical cache keys for downloading and playing DASH segments
321*30877f79SAndroid Build Coastguard Worker        ([#9370](https://github.com/google/ExoPlayer/issues/9370)).
322*30877f79SAndroid Build Coastguard Worker    *   Fix base URL selection and load error handling when base URLs are shared
323*30877f79SAndroid Build Coastguard Worker        across adaptation sets.
324*30877f79SAndroid Build Coastguard Worker*   HLS:
325*30877f79SAndroid Build Coastguard Worker    *   Fix bug where the player would get stuck if all download attempts fail
326*30877f79SAndroid Build Coastguard Worker        and would not raise an error to the application
327*30877f79SAndroid Build Coastguard Worker        ([#9390](https://github.com/google/ExoPlayer/issues/9390)).
328*30877f79SAndroid Build Coastguard Worker*   RTSP:
329*30877f79SAndroid Build Coastguard Worker    *   Handle when additional spaces are in SDP's RTPMAP atrribute
330*30877f79SAndroid Build Coastguard Worker        ([#9379](https://github.com/google/ExoPlayer/issues/9379)).
331*30877f79SAndroid Build Coastguard Worker    *   Handle partial URIs in RTP-Info headers
332*30877f79SAndroid Build Coastguard Worker        ([#9346](https://github.com/google/ExoPlayer/issues/9346)).
333*30877f79SAndroid Build Coastguard Worker    *   Fix RTSP Session header handling
334*30877f79SAndroid Build Coastguard Worker        ([#9416](https://github.com/google/ExoPlayer/issues/9416)).
335*30877f79SAndroid Build Coastguard Worker    *   Fix RTSP WWW-Authenticate header parsing
336*30877f79SAndroid Build Coastguard Worker        ([#9428](https://github.com/google/ExoPlayer/issues/9428)).
337*30877f79SAndroid Build Coastguard Worker*   UI:
338*30877f79SAndroid Build Coastguard Worker    *   Use `defStyleAttr` when obtaining styled attributes in
339*30877f79SAndroid Build Coastguard Worker        `StyledPlayerView`, `PlayerView` and `PlayerControlView`
340*30877f79SAndroid Build Coastguard Worker        ([#9024](https://github.com/google/ExoPlayer/issues/9024)).
341*30877f79SAndroid Build Coastguard Worker    *   Fix accessibility focus in `PlayerControlView`
342*30877f79SAndroid Build Coastguard Worker        ([#9111](https://github.com/google/ExoPlayer/issues/9111)).
343*30877f79SAndroid Build Coastguard Worker    *   Fix issue that `StyledPlayerView` and `PlayerView` don't update UI when
344*30877f79SAndroid Build Coastguard Worker        available player commands change.
345*30877f79SAndroid Build Coastguard Worker*   Cast extension:
346*30877f79SAndroid Build Coastguard Worker    *   Implement `CastPlayer.setPlaybackParameters(PlaybackParameters)` to
347*30877f79SAndroid Build Coastguard Worker        support setting the playback speed
348*30877f79SAndroid Build Coastguard Worker        ([#6784](https://github.com/google/ExoPlayer/issues/6784)).
349*30877f79SAndroid Build Coastguard Worker
350*30877f79SAndroid Build Coastguard Worker### 2.15.0 (2021-08-10)
351*30877f79SAndroid Build Coastguard Worker
352*30877f79SAndroid Build Coastguard Worker*   Core Library:
353*30877f79SAndroid Build Coastguard Worker    *   Add `MediaCodecAdapter.needsReconfiguration` method.
354*30877f79SAndroid Build Coastguard Worker    *   Add `getSeekBackIncrement`, `seekBack`, `getSeekForwardIncrement`,
355*30877f79SAndroid Build Coastguard Worker        `seekForward`, `getMaxSeekToPreviousPosition`, `seekToPrevious` and
356*30877f79SAndroid Build Coastguard Worker        `seekToNext` methods to `Player`.
357*30877f79SAndroid Build Coastguard Worker    *   Rename `Player` methods:
358*30877f79SAndroid Build Coastguard Worker        *   `hasPrevious` to `hasPreviousWindow`.
359*30877f79SAndroid Build Coastguard Worker        *   `previous` to `seekToPreviousWindow`.
360*30877f79SAndroid Build Coastguard Worker        *   `hasNext` to `hasNextWindow`.
361*30877f79SAndroid Build Coastguard Worker        *   `next` to `seekToNextWindow`.
362*30877f79SAndroid Build Coastguard Worker    *   Rename `Player` commands:
363*30877f79SAndroid Build Coastguard Worker        *   `COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM` to
364*30877f79SAndroid Build Coastguard Worker            `COMMAND_SEEK_IN_CURRENT_WINDOW`.
365*30877f79SAndroid Build Coastguard Worker        *   `COMMAND_SEEK_TO_NEXT_MEDIA_ITEM` to `COMMAND_SEEK_TO_NEXT_WINDOW`.
366*30877f79SAndroid Build Coastguard Worker        *   `COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM` to
367*30877f79SAndroid Build Coastguard Worker            `COMMAND_SEEK_TO_PREVIOUS_WINDOW`.
368*30877f79SAndroid Build Coastguard Worker        *   `COMMAND_SEEK_TO_MEDIA_ITEM` to `COMMAND_SEEK_TO_WINDOW`.
369*30877f79SAndroid Build Coastguard Worker        *   `COMMAND_GET_MEDIA_ITEMS` to `COMMAND_GET_TIMELINE`.
370*30877f79SAndroid Build Coastguard Worker    *   Rename `Player.EventFlags` IntDef to `Player.Event`.
371*30877f79SAndroid Build Coastguard Worker    *   Make `Player` depend on the new `PlaybackException` class instead of
372*30877f79SAndroid Build Coastguard Worker        `ExoPlaybackException`:
373*30877f79SAndroid Build Coastguard Worker        *   `Player.getPlayerError` now returns a `PlaybackException`.
374*30877f79SAndroid Build Coastguard Worker        *   `Player.Listener.onPlayerError` now receives a `PlaybackException`.
375*30877f79SAndroid Build Coastguard Worker        *   Add a new listener method `Player.Listener.onPlayerErrorChanged`,
376*30877f79SAndroid Build Coastguard Worker            which is equivalent to `onPlayerError` except that it is also called
377*30877f79SAndroid Build Coastguard Worker            when the player error becomes `null`.
378*30877f79SAndroid Build Coastguard Worker        *   `Player` implementations like `ExoPlayer` may use
379*30877f79SAndroid Build Coastguard Worker            `PlaybackException` subclasses (like `ExoPlaybackException`), so
380*30877f79SAndroid Build Coastguard Worker            users can downcast the `PlaybackException` instance to obtain
381*30877f79SAndroid Build Coastguard Worker            implementation-specific fields (like
382*30877f79SAndroid Build Coastguard Worker            `ExoPlaybackException.rendererIndex`).
383*30877f79SAndroid Build Coastguard Worker    *   `PlaybackException` introduces an `errorCode` which identifies the cause
384*30877f79SAndroid Build Coastguard Worker        of the failure in order to simplify error handling
385*30877f79SAndroid Build Coastguard Worker        ([#1611](https://github.com/google/ExoPlayer/issues/1611)).
386*30877f79SAndroid Build Coastguard Worker    *   Add a `DefaultMediaDescriptionAdapter` for the
387*30877f79SAndroid Build Coastguard Worker        `PlayerNotificationManager`, that makes use of the `Player`
388*30877f79SAndroid Build Coastguard Worker        `MediaMetadata` to populate the notification fields.
389*30877f79SAndroid Build Coastguard Worker    *   Add `@FallbackType` to `LoadErrorHandlingPolicy` to support
390*30877f79SAndroid Build Coastguard Worker        customization of the exclusion duration for locations and tracks.
391*30877f79SAndroid Build Coastguard Worker    *   Change interface of `LoadErrorHandlingPolicy` to support configuring the
392*30877f79SAndroid Build Coastguard Worker        behavior of track and location fallback. Location fallback is currently
393*30877f79SAndroid Build Coastguard Worker        only supported for DASH manifests with multiple base URLs.
394*30877f79SAndroid Build Coastguard Worker    *   Restrict use of `AudioTrack.isDirectPlaybackSupported` to TVs, to avoid
395*30877f79SAndroid Build Coastguard Worker        listing audio offload encodings as supported for passthrough mode on
396*30877f79SAndroid Build Coastguard Worker        mobile devices
397*30877f79SAndroid Build Coastguard Worker        ([#9239](https://github.com/google/ExoPlayer/issues/9239)).
398*30877f79SAndroid Build Coastguard Worker*   Extractors:
399*30877f79SAndroid Build Coastguard Worker    *   Add support for DTS-UHD in MP4
400*30877f79SAndroid Build Coastguard Worker        ([#9163](https://github.com/google/ExoPlayer/issues/9163)).
401*30877f79SAndroid Build Coastguard Worker*   Text:
402*30877f79SAndroid Build Coastguard Worker    *   TTML: Inherit the `rubyPosition` value from a containing `<span
403*30877f79SAndroid Build Coastguard Worker        ruby="container">` element.
404*30877f79SAndroid Build Coastguard Worker    *   WebVTT: Add support for CSS `font-size` property
405*30877f79SAndroid Build Coastguard Worker        ([#8964](https://github.com/google/ExoPlayer/issues/8964)).
406*30877f79SAndroid Build Coastguard Worker*   Ad playback:
407*30877f79SAndroid Build Coastguard Worker    *   Support changing ad break positions in the player logic
408*30877f79SAndroid Build Coastguard Worker        ([#5067](https://github.com/google/ExoPlayer/issues/5067)).
409*30877f79SAndroid Build Coastguard Worker    *   Support resuming content with an offset after an ad group.
410*30877f79SAndroid Build Coastguard Worker*   UI:
411*30877f79SAndroid Build Coastguard Worker    *   Add `setUseRewindAction` and `setUseFastForwardAction` to
412*30877f79SAndroid Build Coastguard Worker        `PlayerNotificationManager`, and `setUseFastForwardActionInCompactView`
413*30877f79SAndroid Build Coastguard Worker        and `setUseRewindActionInCompactView` to show the actions in compact
414*30877f79SAndroid Build Coastguard Worker        view mode.
415*30877f79SAndroid Build Coastguard Worker    *   Remove `rewind_increment` and `fastforward_increment` attributes from
416*30877f79SAndroid Build Coastguard Worker        `PlayerControlView` and `StyledPlayerControlView`. These increments can
417*30877f79SAndroid Build Coastguard Worker        be customized by configuring the `Player` (see `setSeekBackIncrementMs`
418*30877f79SAndroid Build Coastguard Worker        and `setSeekForwardIncrementMs` in `SimpleExoPlayer.Builder`), or by
419*30877f79SAndroid Build Coastguard Worker        using a `ForwardingPlayer` that overrides `getSeekBackIncrement`,
420*30877f79SAndroid Build Coastguard Worker        `seekBack`, `getSeekForwardIncrement` and `seekForward`. The rewind and
421*30877f79SAndroid Build Coastguard Worker        fast forward buttons can be disabled by using a `ForwardingPlayer` that
422*30877f79SAndroid Build Coastguard Worker        removes `COMMAND_SEEK_BACK` and `COMMAND_SEEK_FORWARD` from the
423*30877f79SAndroid Build Coastguard Worker        available commands.
424*30877f79SAndroid Build Coastguard Worker    *   Update `DefaultControlDispatcher` `getRewindIncrementMs` and
425*30877f79SAndroid Build Coastguard Worker        `getFastForwardIncrementMs` to take the player as parameter.
426*30877f79SAndroid Build Coastguard Worker*   DASH:
427*30877f79SAndroid Build Coastguard Worker    *   Add support for multiple base URLs and DVB attributes in the manifest.
428*30877f79SAndroid Build Coastguard Worker        Apps that are using `DefaultLoadErrorHandlingPolicy` with such manifests
429*30877f79SAndroid Build Coastguard Worker        have base URL fallback automatically enabled
430*30877f79SAndroid Build Coastguard Worker        ([#771](https://github.com/google/ExoPlayer/issues/771),
431*30877f79SAndroid Build Coastguard Worker        [#7654](https://github.com/google/ExoPlayer/issues/7654)).
432*30877f79SAndroid Build Coastguard Worker*   HLS:
433*30877f79SAndroid Build Coastguard Worker    *   Fix issue that could cause some playbacks to be stuck buffering
434*30877f79SAndroid Build Coastguard Worker        ([#8850](https://github.com/google/ExoPlayer/issues/8850),
435*30877f79SAndroid Build Coastguard Worker        [#9153](https://github.com/google/ExoPlayer/issues/9153)).
436*30877f79SAndroid Build Coastguard Worker    *   Report audio track type in
437*30877f79SAndroid Build Coastguard Worker        `AnalyticsListener.onDownstreamFormatChanged()` for audio-only
438*30877f79SAndroid Build Coastguard Worker        playlists, so that the `PlaybackStatsListener` can derive audio
439*30877f79SAndroid Build Coastguard Worker        format-related information
440*30877f79SAndroid Build Coastguard Worker        ([#9175](https://github.com/google/ExoPlayer/issues/9175)).
441*30877f79SAndroid Build Coastguard Worker*   RTSP:
442*30877f79SAndroid Build Coastguard Worker    *   Use standard RTSP header names
443*30877f79SAndroid Build Coastguard Worker        ([#9182](https://github.com/google/ExoPlayer/issues/9182)).
444*30877f79SAndroid Build Coastguard Worker    *   Handle an extra semicolon in SDP fmtp attribute
445*30877f79SAndroid Build Coastguard Worker        ([#9247](https://github.com/google/ExoPlayer/pull/9247)).
446*30877f79SAndroid Build Coastguard Worker    *   Fix handling of special characters in the RTSP session ID
447*30877f79SAndroid Build Coastguard Worker        ([#9254](https://github.com/google/ExoPlayer/issues/9254)).
448*30877f79SAndroid Build Coastguard Worker*   SmoothStreaming:
449*30877f79SAndroid Build Coastguard Worker    *   Propagate `StreamIndex` element `Name` attribute value as `Format` label
450*30877f79SAndroid Build Coastguard Worker        ([#9252](https://github.com/google/ExoPlayer/issues/9252)).
451*30877f79SAndroid Build Coastguard Worker*   Cronet extension:
452*30877f79SAndroid Build Coastguard Worker    *   Add `CronetDataSource.Factory.setRequestPriority` to allow setting the
453*30877f79SAndroid Build Coastguard Worker        priority of requests made by `CronetDataSource` instances.
454*30877f79SAndroid Build Coastguard Worker*   OkHttp extension:
455*30877f79SAndroid Build Coastguard Worker    *   Switch to OkHttp 4.9.1. This increases the extension's minimum SDK
456*30877f79SAndroid Build Coastguard Worker        version requirement from 16 to 21.
457*30877f79SAndroid Build Coastguard Worker*   Remove deprecated symbols:
458*30877f79SAndroid Build Coastguard Worker    *   Remove `CastPlayer` specific playlist manipulation methods. Use
459*30877f79SAndroid Build Coastguard Worker        `setMediaItems`, `addMediaItems`, `removeMediaItem` and `moveMediaItem`
460*30877f79SAndroid Build Coastguard Worker        instead.
461*30877f79SAndroid Build Coastguard Worker    *   Remove `Format.create` methods. Use `Format.Builder` instead.
462*30877f79SAndroid Build Coastguard Worker    *   Remove `MediaSource.getTag`. Use `MediaSource.getMediaItem` and
463*30877f79SAndroid Build Coastguard Worker        `MediaItem.PlaybackProperties.tag` instead.
464*30877f79SAndroid Build Coastguard Worker    *   Remove `PlaybackPreparer`. UI components that previously had
465*30877f79SAndroid Build Coastguard Worker        `setPlaybackPreparer` methods will now call `Player.prepare` by default.
466*30877f79SAndroid Build Coastguard Worker        If this behavior is sufficient, use of `PlaybackPreparer` can be removed
467*30877f79SAndroid Build Coastguard Worker        from application code without replacement. For custom preparation logic,
468*30877f79SAndroid Build Coastguard Worker        use a `ForwardingPlayer` that implements custom preparation logic in
469*30877f79SAndroid Build Coastguard Worker        `prepare`.
470*30877f79SAndroid Build Coastguard Worker    *   Remove `Player.Listener.onTimelineChanged(Timeline, Object, int)`. Use
471*30877f79SAndroid Build Coastguard Worker        `Player.Listener.onTimelineChanged(Timeline, int)` instead. The manifest
472*30877f79SAndroid Build Coastguard Worker        can be accessed using `Player.getCurrentManifest`.
473*30877f79SAndroid Build Coastguard Worker    *   Remove `Player.getCurrentTag`. Use `Player.getCurrentMediaItem` and
474*30877f79SAndroid Build Coastguard Worker        `MediaItem.PlaybackProperties.tag` instead.
475*30877f79SAndroid Build Coastguard Worker    *   Remove `Player.getPlaybackError`. Use `Player.getPlayerError` instead.
476*30877f79SAndroid Build Coastguard Worker    *   Remove `PlayerNotificationManager` constructors and `createWith`
477*30877f79SAndroid Build Coastguard Worker        methods. Use `PlayerNotificationManager.Builder` instead.
478*30877f79SAndroid Build Coastguard Worker    *   Remove `PlayerNotificationManager.setNotificationListener`. Use
479*30877f79SAndroid Build Coastguard Worker        `PlayerNotificationManager.Builder.setNotificationListener` instead.
480*30877f79SAndroid Build Coastguard Worker    *   Remove `PlayerNotificationManager` `setUseNavigationActions` and
481*30877f79SAndroid Build Coastguard Worker        `setUseNavigationActionsInCompactView`. Use `setUseNextAction`,
482*30877f79SAndroid Build Coastguard Worker        `setUsePreviousAction`, `setUseNextActionInCompactView` and
483*30877f79SAndroid Build Coastguard Worker        `setUsePreviousActionInCompactView` instead.
484*30877f79SAndroid Build Coastguard Worker    *   Remove `setRewindIncrementMs` and `setFastForwardIncrementMs` from UI
485*30877f79SAndroid Build Coastguard Worker        components. These increments can be customized by configuring the
486*30877f79SAndroid Build Coastguard Worker        `Player` (see `setSeekBackIncrementMs` and `setSeekForwardIncrementMs`
487*30877f79SAndroid Build Coastguard Worker        in `SimpleExoPlayer.Builder`), or by using a `ForwardingPlayer` that
488*30877f79SAndroid Build Coastguard Worker        overrides `getSeekBackIncrement`, `seekBack`, `getSeekForwardIncrement`
489*30877f79SAndroid Build Coastguard Worker        and `seekForward`. The rewind and fast forward buttons can be disabled
490*30877f79SAndroid Build Coastguard Worker        by using a `ForwardingPlayer` that removes `COMMAND_SEEK_BACK` and
491*30877f79SAndroid Build Coastguard Worker        `COMMAND_SEEK_FORWARD` from the available commands.
492*30877f79SAndroid Build Coastguard Worker    *   Remove `Timeline.getWindow(int, Window, boolean)`. Use
493*30877f79SAndroid Build Coastguard Worker        `Timeline.getWindow(int, Window)` instead, which will always set tags.
494*30877f79SAndroid Build Coastguard Worker
495*30877f79SAndroid Build Coastguard Worker### 2.14.2 (2021-07-20)
496*30877f79SAndroid Build Coastguard Worker
497*30877f79SAndroid Build Coastguard Worker*   Core Library:
498*30877f79SAndroid Build Coastguard Worker    *   Explicitly mark several methods on `SimpleExoPlayer` as `@Deprecated`.
499*30877f79SAndroid Build Coastguard Worker        These methods are all overrides and are already deprecated on `Player`
500*30877f79SAndroid Build Coastguard Worker        and the respective `ExoPlayer` component classes (since 2.14.0).
501*30877f79SAndroid Build Coastguard Worker*   Video:
502*30877f79SAndroid Build Coastguard Worker    *   Fix `IncorrectContextUseViolation` strict mode warning on Android 11
503*30877f79SAndroid Build Coastguard Worker        ([#8246](https://github.com/google/ExoPlayer/pull/8246)).
504*30877f79SAndroid Build Coastguard Worker*   Audio:
505*30877f79SAndroid Build Coastguard Worker    *   Fix track selection for E-AC-3 streams.
506*30877f79SAndroid Build Coastguard Worker    *   Use `AudioTrack.isDirectPlaybackSupported` to check for encoded audio
507*30877f79SAndroid Build Coastguard Worker        passthrough capability from API 29 onwards, instead of using the HDMI
508*30877f79SAndroid Build Coastguard Worker        audio plug intent
509*30877f79SAndroid Build Coastguard Worker        ([#6500](https://github.com/google/ExoPlayer/pull/6500)).
510*30877f79SAndroid Build Coastguard Worker*   Extractors:
511*30877f79SAndroid Build Coastguard Worker    *   Fix issue where a `trun` atom could be associated with the wrong track
512*30877f79SAndroid Build Coastguard Worker        in an FMP4 stream
513*30877f79SAndroid Build Coastguard Worker        ([#9056](https://github.com/google/ExoPlayer/pull/9056)). The fix
514*30877f79SAndroid Build Coastguard Worker        removes a previous workaround to handle content in which the `track_ID`
515*30877f79SAndroid Build Coastguard Worker        is set incorrectly
516*30877f79SAndroid Build Coastguard Worker        ([#4083](https://github.com/google/ExoPlayer/issues/4083)). Such content
517*30877f79SAndroid Build Coastguard Worker        is malformed and should be re-encoded.
518*30877f79SAndroid Build Coastguard Worker    *   Improve support for truncated Ogg streams
519*30877f79SAndroid Build Coastguard Worker        ([#7608](https://github.com/google/ExoPlayer/issues/7608)).
520*30877f79SAndroid Build Coastguard Worker    *   Add support for MP4 H263 atom type
521*30877f79SAndroid Build Coastguard Worker        ([#9158](https://github.com/google/ExoPlayer/issues/9158)).
522*30877f79SAndroid Build Coastguard Worker    *   Fix issue around TS synchronization when reading a file's duration
523*30877f79SAndroid Build Coastguard Worker        ([#9100](https://github.com/google/ExoPlayer/pull/9100)).
524*30877f79SAndroid Build Coastguard Worker*   HLS:
525*30877f79SAndroid Build Coastguard Worker    *   Fix issue where playback of a live event could become stuck rather than
526*30877f79SAndroid Build Coastguard Worker        transitioning to `STATE_ENDED` when the event ends
527*30877f79SAndroid Build Coastguard Worker        ([#9067](https://github.com/google/ExoPlayer/issues/9067)).
528*30877f79SAndroid Build Coastguard Worker    *   Fix issue where a new initialization segment, as specified by an
529*30877f79SAndroid Build Coastguard Worker        `EXT-X-MAP` tag in a media playlist, would not be loaded when
530*30877f79SAndroid Build Coastguard Worker        encountered during playback
531*30877f79SAndroid Build Coastguard Worker        ([#9004](https://github.com/google/ExoPlayer/issues/9004)).
532*30877f79SAndroid Build Coastguard Worker    *   Forward the `FRAME-RATE` value from the master playlist to renditions.
533*30877f79SAndroid Build Coastguard Worker        ([#8960](https://github.com/google/ExoPlayer/issues/8960)).
534*30877f79SAndroid Build Coastguard Worker    *   Fix issue where HLS events would start at positions greater than
535*30877f79SAndroid Build Coastguard Worker        specified by an `EXT-X-START` tag when placed in a playlist
536*30877f79SAndroid Build Coastguard Worker        ([#9037](https://github.com/google/ExoPlayer/issues/9037)).
537*30877f79SAndroid Build Coastguard Worker*   Ad playback:
538*30877f79SAndroid Build Coastguard Worker    *   Use the content URI when auto-generating an ad ID (in addition to the
539*30877f79SAndroid Build Coastguard Worker        media ID and ad tag URI)
540*30877f79SAndroid Build Coastguard Worker        ([#9106](https://github.com/google/ExoPlayer/issues/9106).
541*30877f79SAndroid Build Coastguard Worker*   DRM:
542*30877f79SAndroid Build Coastguard Worker    *   Allow repeated provisioning in `DefaultDrmSession(Manager)`.
543*30877f79SAndroid Build Coastguard Worker    *   Fix a crash due to `DefaultDrmSessionManager.release()` incorrectly
544*30877f79SAndroid Build Coastguard Worker        releasing too many keep-alive `DefaultDrmSession` references, resulting
545*30877f79SAndroid Build Coastguard Worker        in `DefaultDrmSession.release()` throwing an `IllegalStateException`
546*30877f79SAndroid Build Coastguard Worker        ([#9193](https://github.com/google/ExoPlayer/issues/9193)).
547*30877f79SAndroid Build Coastguard Worker*   Metadata:
548*30877f79SAndroid Build Coastguard Worker    *   Fix handling of emsg messages with an unset duration
549*30877f79SAndroid Build Coastguard Worker        ([#9123](https://github.com/google/ExoPlayer/issues/9123)).
550*30877f79SAndroid Build Coastguard Worker*   UI:
551*30877f79SAndroid Build Coastguard Worker    *   Add `PendingIntent.FLAG_IMMUTABLE` when creating broadcast intents in
552*30877f79SAndroid Build Coastguard Worker        `PlayerNotificationManager`. This is required by a
553*30877f79SAndroid Build Coastguard Worker        [behaviour change](https://developer.android.com/about/versions/12/behavior-changes-12#pending-intent-mutability)
554*30877f79SAndroid Build Coastguard Worker        in Android 12.
555*30877f79SAndroid Build Coastguard Worker    *   Fix focusability of `StyledPlayerView` and `StyledPlayerControlView`
556*30877f79SAndroid Build Coastguard Worker        popup menus on API levels prior to 26
557*30877f79SAndroid Build Coastguard Worker        ([#9061](https://github.com/google/ExoPlayer/issues/9061)).
558*30877f79SAndroid Build Coastguard Worker    *   Fix progress bar flickering immediately after the user seeks
559*30877f79SAndroid Build Coastguard Worker        ([#9049](https://github.com/google/ExoPlayer/pull/9049)).
560*30877f79SAndroid Build Coastguard Worker    *   Fix `StyledPlayerView` and `StyledPlayerControlView` popup menu items
561*30877f79SAndroid Build Coastguard Worker        not expanding to occupy the full width of the popup
562*30877f79SAndroid Build Coastguard Worker        ([#9086](https://github.com/google/ExoPlayer/issues/9086)).
563*30877f79SAndroid Build Coastguard Worker    *   Don't propagate `AttributeSet` from `SubtitleView` constructor into
564*30877f79SAndroid Build Coastguard Worker        `CanvasSubtitleOutput`. Just passing the `Context` is enough, and
565*30877f79SAndroid Build Coastguard Worker        ensures programmatic changes to the `SubtitleView` will propagate down.
566*30877f79SAndroid Build Coastguard Worker*   RTSP:
567*30877f79SAndroid Build Coastguard Worker    *   Fix session description (SDP) parsing to use a HashMap-like behaviour
568*30877f79SAndroid Build Coastguard Worker        for duplicated attributes.
569*30877f79SAndroid Build Coastguard Worker        ([#9014](https://github.com/google/ExoPlayer/issues/9014)).
570*30877f79SAndroid Build Coastguard Worker    *   Allow using absolute URI in the control attribute in a media description
571*30877f79SAndroid Build Coastguard Worker        ([#9183](https://github.com/google/ExoPlayer/issues/9183)).
572*30877f79SAndroid Build Coastguard Worker    *   Allow the timeout to be customised via
573*30877f79SAndroid Build Coastguard Worker        `RtspMediaSource.Factory.setTimeoutMs`.
574*30877f79SAndroid Build Coastguard Worker
575*30877f79SAndroid Build Coastguard Worker### 2.14.1 (2021-06-11)
576*30877f79SAndroid Build Coastguard Worker
577*30877f79SAndroid Build Coastguard Worker*   Core Library:
578*30877f79SAndroid Build Coastguard Worker    *   Fix gradle config to allow specifying a relative path for
579*30877f79SAndroid Build Coastguard Worker        `exoplayerRoot` when [depending on ExoPlayer locally](README.md#locally)
580*30877f79SAndroid Build Coastguard Worker        ([#8927](https://github.com/google/ExoPlayer/issues/8927)).
581*30877f79SAndroid Build Coastguard Worker    *   Update `MediaItem.Builder` javadoc to discourage calling setters that
582*30877f79SAndroid Build Coastguard Worker        will be (currently) ignored if another setter is not also called.
583*30877f79SAndroid Build Coastguard Worker*   Extractors:
584*30877f79SAndroid Build Coastguard Worker    *   Add support for MPEG-H 3D Audio in MP4 extractors
585*30877f79SAndroid Build Coastguard Worker        ([#8860](https://github.com/google/ExoPlayer/pull/8860)).
586*30877f79SAndroid Build Coastguard Worker*   Video:
587*30877f79SAndroid Build Coastguard Worker    *   Fix bug that could cause `CodecException: Error 0xffffffff` to be thrown
588*30877f79SAndroid Build Coastguard Worker        from `MediaCodec.native_setSurface` in use cases that involve both
589*30877f79SAndroid Build Coastguard Worker        swapping the output `Surface` and a mixture of secure and non-secure
590*30877f79SAndroid Build Coastguard Worker        content being played
591*30877f79SAndroid Build Coastguard Worker        ([#8776](https://github.com/google/ExoPlayer/issues/8776)).
592*30877f79SAndroid Build Coastguard Worker*   HLS:
593*30877f79SAndroid Build Coastguard Worker    *   Use the `PRECISE` attribute in `EXT-X-START` to select the default start
594*30877f79SAndroid Build Coastguard Worker        position.
595*30877f79SAndroid Build Coastguard Worker    *   Fix a bug where skipping into spliced-in chunks triggered an assertion
596*30877f79SAndroid Build Coastguard Worker        error ([#8937](https://github.com/google/ExoPlayer/issues/8937)).
597*30877f79SAndroid Build Coastguard Worker*   DRM:
598*30877f79SAndroid Build Coastguard Worker    *   Keep secure `MediaCodec` instances initialized when disabling (but not
599*30877f79SAndroid Build Coastguard Worker        resetting) `MediaCodecRenderer`. This helps re-use secure decoders in
600*30877f79SAndroid Build Coastguard Worker        more contexts, which avoids the 'black flash' caused by detaching a
601*30877f79SAndroid Build Coastguard Worker        `Surface` from a secure decoder on some devices
602*30877f79SAndroid Build Coastguard Worker        ([#8842](https://github.com/google/ExoPlayer/issues/8842)). It will also
603*30877f79SAndroid Build Coastguard Worker        result in DRM license refresh network requests while the player is
604*30877f79SAndroid Build Coastguard Worker        stopped if `Player#setForegroundMode` is true.
605*30877f79SAndroid Build Coastguard Worker    *   Fix issue where offline keys were unnecessarily (and incorrectly)
606*30877f79SAndroid Build Coastguard Worker        restored into a session before being released. This call sequence is
607*30877f79SAndroid Build Coastguard Worker        explicitly disallowed in OEMCrypto v16.
608*30877f79SAndroid Build Coastguard Worker*   UI:
609*30877f79SAndroid Build Coastguard Worker    *   Keep subtitle language features embedded (e.g. rubies & tate-chu-yoko)
610*30877f79SAndroid Build Coastguard Worker        in `Cue.text` even when `SubtitleView#setApplyEmbeddedStyles()` is
611*30877f79SAndroid Build Coastguard Worker        `false`.
612*30877f79SAndroid Build Coastguard Worker    *   Fix `NullPointerException` in `StyledPlayerView` that could occur after
613*30877f79SAndroid Build Coastguard Worker        calling `StyledPlayerView.setPlayer(null)`
614*30877f79SAndroid Build Coastguard Worker        ([#8985](https://github.com/google/ExoPlayer/issues/8985)).
615*30877f79SAndroid Build Coastguard Worker*   RTSP:
616*30877f79SAndroid Build Coastguard Worker    *   Add support for RTSP basic and digest authentication
617*30877f79SAndroid Build Coastguard Worker        ([#8941](https://github.com/google/ExoPlayer/issues/8941)).
618*30877f79SAndroid Build Coastguard Worker    *   Enable using repeat mode and playlist with RTSP
619*30877f79SAndroid Build Coastguard Worker        ([#8994](https://github.com/google/ExoPlayer/issues/8994)).
620*30877f79SAndroid Build Coastguard Worker    *   Add `RtspMediaSource.Factory` option to set the RTSP user agent.
621*30877f79SAndroid Build Coastguard Worker    *   Add `RtspMediaSource.Factory` option to force using TCP for streaming.
622*30877f79SAndroid Build Coastguard Worker*   GL demo app:
623*30877f79SAndroid Build Coastguard Worker    *   Fix texture transformation to avoid green bars shown on some videos
624*30877f79SAndroid Build Coastguard Worker        ([#8992](https://github.com/google/ExoPlayer/issues/8992)).
625*30877f79SAndroid Build Coastguard Worker
626*30877f79SAndroid Build Coastguard Worker### 2.14.0 (2021-05-13)
627*30877f79SAndroid Build Coastguard Worker
628*30877f79SAndroid Build Coastguard Worker*   Core Library:
629*30877f79SAndroid Build Coastguard Worker    *   Move `Player` components to `ExoPlayer`. For example
630*30877f79SAndroid Build Coastguard Worker        `Player.VideoComponent` is now `ExoPlayer.VideoComponent`.
631*30877f79SAndroid Build Coastguard Worker    *   The most used methods of `Player`'s audio, video, text and metadata
632*30877f79SAndroid Build Coastguard Worker        components have been added directly to `Player`.
633*30877f79SAndroid Build Coastguard Worker    *   Add `Player.getAvailableCommands`, `Player.isCommandAvailable` and
634*30877f79SAndroid Build Coastguard Worker        `Listener.onAvailableCommandsChanged` to query which commands that can
635*30877f79SAndroid Build Coastguard Worker        be executed on the player.
636*30877f79SAndroid Build Coastguard Worker    *   Add a `Player.Listener` interface to receive all player events.
637*30877f79SAndroid Build Coastguard Worker        Component listeners and `EventListener` have been deprecated.
638*30877f79SAndroid Build Coastguard Worker    *   Add `Player.getMediaMetadata`, which returns a combined and structured
639*30877f79SAndroid Build Coastguard Worker        `MediaMetadata` object. Changes to metadata are reported to
640*30877f79SAndroid Build Coastguard Worker        `Listener.onMediaMetadataChanged`.
641*30877f79SAndroid Build Coastguard Worker    *   `Player.setPlaybackParameters` no longer accepts null, use
642*30877f79SAndroid Build Coastguard Worker        `PlaybackParameters.DEFAULT` instead.
643*30877f79SAndroid Build Coastguard Worker    *   Report information about the old and the new playback positions to
644*30877f79SAndroid Build Coastguard Worker        `Listener.onPositionDiscontinuity`. Add `DISCONTINUITY_REASON_SKIP` and
645*30877f79SAndroid Build Coastguard Worker        `DISCONTINUITY_REASON_REMOVE` as discontinuity reasons, and rename
646*30877f79SAndroid Build Coastguard Worker        `DISCONTINUITY_REASON_PERIOD_TRANSITION` to
647*30877f79SAndroid Build Coastguard Worker        `DISCONTINUITY_REASON_AUTO_TRANSITION`. Remove
648*30877f79SAndroid Build Coastguard Worker        `DISCONTINUITY_REASON_AD_INSERTION`, for which
649*30877f79SAndroid Build Coastguard Worker        `DISCONTINUITY_REASON_AUTO_TRANSITION` is used instead
650*30877f79SAndroid Build Coastguard Worker        ([#6163](https://github.com/google/ExoPlayer/issues/6163),
651*30877f79SAndroid Build Coastguard Worker        [#4768](https://github.com/google/ExoPlayer/issues/4768)).
652*30877f79SAndroid Build Coastguard Worker    *   Deprecate `ExoPlayer.Builder`. Use `SimpleExoPlayer.Builder` instead.
653*30877f79SAndroid Build Coastguard Worker    *   Move `Player.getRendererCount` and `Player.getRendererType` to
654*30877f79SAndroid Build Coastguard Worker        `ExoPlayer`.
655*30877f79SAndroid Build Coastguard Worker    *   Use an empty string instead of the URI if the media ID is not explicitly
656*30877f79SAndroid Build Coastguard Worker        set with `MediaItem.Builder.setMediaId(String)`.
657*30877f79SAndroid Build Coastguard Worker    *   Remove `MediaCodecRenderer.configureCodec()` and add
658*30877f79SAndroid Build Coastguard Worker        `MediaCodecRenderer.getMediaCodecConfiguration()`. The new method is
659*30877f79SAndroid Build Coastguard Worker        called just before the `MediaCodec` is created and returns the
660*30877f79SAndroid Build Coastguard Worker        parameters needed to create and configure the `MediaCodec` instance.
661*30877f79SAndroid Build Coastguard Worker        Applications can override `MediaCodecRenderer.onCodecInitialized()` to
662*30877f79SAndroid Build Coastguard Worker        be notified after a `MediaCodec` is initialized, or they can inject a
663*30877f79SAndroid Build Coastguard Worker        custom `MediaCodecAdapter.Factory` if they want to control how the
664*30877f79SAndroid Build Coastguard Worker        `MediaCodec` is configured.
665*30877f79SAndroid Build Coastguard Worker    *   Promote `AdaptiveTrackSelection.AdaptationCheckpoint` to `public`
666*30877f79SAndroid Build Coastguard Worker        visibility to allow Kotlin subclasses of
667*30877f79SAndroid Build Coastguard Worker        `AdaptiveTrackSelection.Factory`
668*30877f79SAndroid Build Coastguard Worker        ([#8830](https://github.com/google/ExoPlayer/issues/8830)).
669*30877f79SAndroid Build Coastguard Worker    *   Fix bug when transitions from content to ad periods called
670*30877f79SAndroid Build Coastguard Worker        `onMediaItemTransition` by mistake.
671*30877f79SAndroid Build Coastguard Worker    *   `AdsLoader.AdViewProvider` and `AdsLoader.OverlayInfo` have been renamed
672*30877f79SAndroid Build Coastguard Worker        `com.google.android.exoplayer2.ui.AdViewProvider` and
673*30877f79SAndroid Build Coastguard Worker        `com.google.android.exoplayer2.ui.AdOverlayInfo` respectively.
674*30877f79SAndroid Build Coastguard Worker    *   `CaptionStyleCompat` has been moved to the
675*30877f79SAndroid Build Coastguard Worker        `com.google.android.exoplayer2.ui` package.
676*30877f79SAndroid Build Coastguard Worker    *   `DebugTextViewHelper` has been moved from the `ui` package to the `util`
677*30877f79SAndroid Build Coastguard Worker        package.
678*30877f79SAndroid Build Coastguard Worker*   RTSP:
679*30877f79SAndroid Build Coastguard Worker    *   Initial support for RTSP playbacks
680*30877f79SAndroid Build Coastguard Worker        ([#55](https://github.com/google/ExoPlayer/issues/55)).
681*30877f79SAndroid Build Coastguard Worker*   Downloads and caching:
682*30877f79SAndroid Build Coastguard Worker    *   Fix `CacheWriter` to correctly handle cases where the request `DataSpec`
683*30877f79SAndroid Build Coastguard Worker        extends beyond the end of the underlying resource. Caching will now
684*30877f79SAndroid Build Coastguard Worker        succeed in this case, with data up to the end of the resource being
685*30877f79SAndroid Build Coastguard Worker        cached. This behaviour is enabled by default, and so the
686*30877f79SAndroid Build Coastguard Worker        `allowShortContent` parameter has been removed
687*30877f79SAndroid Build Coastguard Worker        ([#7326](https://github.com/google/ExoPlayer/issues/7326)).
688*30877f79SAndroid Build Coastguard Worker    *   Fix `CacheWriter` to correctly handle `DataSource.close` failures, for
689*30877f79SAndroid Build Coastguard Worker        which it cannot be assumed that data was successfully written to the
690*30877f79SAndroid Build Coastguard Worker        cache.
691*30877f79SAndroid Build Coastguard Worker*   DRM:
692*30877f79SAndroid Build Coastguard Worker    *   Prepare DRM sessions (and fetch keys) ahead of the playback position
693*30877f79SAndroid Build Coastguard Worker        ([#4133](https://github.com/google/ExoPlayer/issues/4133)).
694*30877f79SAndroid Build Coastguard Worker    *   Only dispatch DRM session acquire and release events once per period
695*30877f79SAndroid Build Coastguard Worker        when playing content that uses the same encryption keys for both audio &
696*30877f79SAndroid Build Coastguard Worker        video tracks. Previously, separate acquire and release events were
697*30877f79SAndroid Build Coastguard Worker        dispatched for each track in each period.
698*30877f79SAndroid Build Coastguard Worker    *   Include the session state in DRM session-acquired listener methods.
699*30877f79SAndroid Build Coastguard Worker*   UI:
700*30877f79SAndroid Build Coastguard Worker    *   Add `PlayerNotificationManager.Builder`, with the ability to specify
701*30877f79SAndroid Build Coastguard Worker        which group the notification should belong to.
702*30877f79SAndroid Build Coastguard Worker    *   Remove `setUseSensorRotation` from `PlayerView` and `StyledPlayerView`.
703*30877f79SAndroid Build Coastguard Worker        Instead, cast the view returned by `getVideoSurfaceView` to
704*30877f79SAndroid Build Coastguard Worker        `SphericalGLSurfaceView`, and then call `setUseSensorRotation` on the
705*30877f79SAndroid Build Coastguard Worker        `SphericalGLSurfaceView` directly.
706*30877f79SAndroid Build Coastguard Worker*   Analytics:
707*30877f79SAndroid Build Coastguard Worker    *   Add `onAudioCodecError` and `onVideoCodecError` to `AnalyticsListener`.
708*30877f79SAndroid Build Coastguard Worker*   Video:
709*30877f79SAndroid Build Coastguard Worker    *   Add `Player.getVideoSize()` to retrieve the current size of the video
710*30877f79SAndroid Build Coastguard Worker        stream. Add `Listener.onVideoSizeChanged(VideoSize)` and deprecate
711*30877f79SAndroid Build Coastguard Worker        `Listener.onVideoSizeChanged(int, int, int, float)`.
712*30877f79SAndroid Build Coastguard Worker*   Audio:
713*30877f79SAndroid Build Coastguard Worker    *   Report unexpected audio discontinuities to
714*30877f79SAndroid Build Coastguard Worker        `AnalyticsListener.onAudioSinkError`
715*30877f79SAndroid Build Coastguard Worker        ([#6384](https://github.com/google/ExoPlayer/issues/6384)).
716*30877f79SAndroid Build Coastguard Worker    *   Allow forcing offload for gapless content even if gapless playback is
717*30877f79SAndroid Build Coastguard Worker        not supported.
718*30877f79SAndroid Build Coastguard Worker    *   Allow fall back from DTS-HD to DTS when playing via passthrough.
719*30877f79SAndroid Build Coastguard Worker*   Text:
720*30877f79SAndroid Build Coastguard Worker    *   Fix overlapping lines when using `SubtitleView.VIEW_TYPE_WEB`.
721*30877f79SAndroid Build Coastguard Worker    *   Parse SSA/ASS underline & strikethrough info in `Style:` lines
722*30877f79SAndroid Build Coastguard Worker        ([#8435](https://github.com/google/ExoPlayer/issues/8435)).
723*30877f79SAndroid Build Coastguard Worker    *   Ensure TTML `tts:textAlign` is correctly propagated from `<p>` nodes to
724*30877f79SAndroid Build Coastguard Worker        child nodes.
725*30877f79SAndroid Build Coastguard Worker    *   Support TTML `ebutts:multiRowAlign` attributes.
726*30877f79SAndroid Build Coastguard Worker*   Allow the use of Android platform extractors through
727*30877f79SAndroid Build Coastguard Worker    [MediaParser](https://developer.android.com/reference/android/media/MediaParser).
728*30877f79SAndroid Build Coastguard Worker    Only supported on API 30+.
729*30877f79SAndroid Build Coastguard Worker    *   You can use platform extractors for progressive media by passing
730*30877f79SAndroid Build Coastguard Worker        `MediaParserExtractorAdapter.FACTORY` when creating a
731*30877f79SAndroid Build Coastguard Worker        `ProgressiveMediaSource.Factory`.
732*30877f79SAndroid Build Coastguard Worker    *   You can use platform extractors for HLS by passing
733*30877f79SAndroid Build Coastguard Worker        `MediaParserHlsMediaChunkExtractor.FACTORY` when creating a
734*30877f79SAndroid Build Coastguard Worker        `HlsMediaSource.Factory`.
735*30877f79SAndroid Build Coastguard Worker    *   You can use platform extractors for DASH by passing a
736*30877f79SAndroid Build Coastguard Worker        `DefaultDashChunkSource` that uses `MediaParserChunkExtractor.FACTORY`
737*30877f79SAndroid Build Coastguard Worker        when creating a `DashMediaSource.Factory`.
738*30877f79SAndroid Build Coastguard Worker*   Cast extension:
739*30877f79SAndroid Build Coastguard Worker    *   Trigger `onMediaItemTransition` event for all reasons except
740*30877f79SAndroid Build Coastguard Worker        `MEDIA_ITEM_TRANSITION_REASON_REPEAT`.
741*30877f79SAndroid Build Coastguard Worker*   MediaSession extension:
742*30877f79SAndroid Build Coastguard Worker    *   Remove dependency on `exoplayer-core`, relying only `exoplayer-common`
743*30877f79SAndroid Build Coastguard Worker        instead. To achieve this, `TimelineQueueEditor` uses a new
744*30877f79SAndroid Build Coastguard Worker        `MediaDescriptionConverter` interface, and no longer relies on
745*30877f79SAndroid Build Coastguard Worker        `ConcatenatingMediaSource`.
746*30877f79SAndroid Build Coastguard Worker*   Remove deprecated symbols:
747*30877f79SAndroid Build Coastguard Worker    *   Remove `ExoPlayerFactory`. Use `SimpleExoPlayer.Builder` instead.
748*30877f79SAndroid Build Coastguard Worker    *   Remove `Player.DefaultEventListener`. Use `Player.Listener` instead.
749*30877f79SAndroid Build Coastguard Worker    *   Remove `ExtractorMediaSource`. Use `ProgressiveMediaSource` instead.
750*30877f79SAndroid Build Coastguard Worker    *   Remove `DefaultMediaSourceEventListener`. Use `MediaSourceEventListener`
751*30877f79SAndroid Build Coastguard Worker        instead.
752*30877f79SAndroid Build Coastguard Worker    *   Remove `DashManifest` constructor. Use the remaining constructor with
753*30877f79SAndroid Build Coastguard Worker        `programInformation` and `serviceDescription` set to `null` instead.
754*30877f79SAndroid Build Coastguard Worker    *   Remove `CryptoInfo.getFrameworkCryptoInfoV16`. Use
755*30877f79SAndroid Build Coastguard Worker        `CryptoInfo.getFrameworkCryptoInfo` instead.
756*30877f79SAndroid Build Coastguard Worker    *   Remove `NotificationUtil.createNotificationChannel(Context, String, int,
757*30877f79SAndroid Build Coastguard Worker        int)`. Use `createNotificationChannel(Context, String, int, int, int)`
758*30877f79SAndroid Build Coastguard Worker        instead.
759*30877f79SAndroid Build Coastguard Worker    *   Remove `PlayerNotificationManager.setNotificationListener`. Use
760*30877f79SAndroid Build Coastguard Worker        `PlayerNotificationManager.Builder.setNotificationListener` instead.
761*30877f79SAndroid Build Coastguard Worker    *   Remove `PlayerNotificationManager.NotificationListener`
762*30877f79SAndroid Build Coastguard Worker        `onNotificationStarted(int, Notification)` and
763*30877f79SAndroid Build Coastguard Worker        `onNotificationCancelled(int)`. Use `onNotificationPosted(int,
764*30877f79SAndroid Build Coastguard Worker        Notification, boolean)` and `onNotificationCancelled(int, boolean)`
765*30877f79SAndroid Build Coastguard Worker        instead.
766*30877f79SAndroid Build Coastguard Worker    *   Remove `DownloadNotificationUtil`. Use `DownloadNotificationHelper`
767*30877f79SAndroid Build Coastguard Worker        instead.
768*30877f79SAndroid Build Coastguard Worker    *   Remove `extension-jobdispatcher` module. Use the `extension-workmanager`
769*30877f79SAndroid Build Coastguard Worker        module instead.
770*30877f79SAndroid Build Coastguard Worker
771*30877f79SAndroid Build Coastguard Worker### 2.13.3 (2021-04-14)
772*30877f79SAndroid Build Coastguard Worker
773*30877f79SAndroid Build Coastguard Worker*   Published via the Google Maven repository (i.e., google()) rather than
774*30877f79SAndroid Build Coastguard Worker    JCenter.
775*30877f79SAndroid Build Coastguard Worker*   Core:
776*30877f79SAndroid Build Coastguard Worker    *   Reset playback speed when live playback speed control becomes unused
777*30877f79SAndroid Build Coastguard Worker        ([#8664](https://github.com/google/ExoPlayer/issues/8664)).
778*30877f79SAndroid Build Coastguard Worker    *   Fix playback position issue when re-preparing playback after a
779*30877f79SAndroid Build Coastguard Worker        `BehindLiveWindowException`
780*30877f79SAndroid Build Coastguard Worker        ([#8675](https://github.com/google/ExoPlayer/issues/8675)).
781*30877f79SAndroid Build Coastguard Worker    *   Assume Dolby Vision content is encoded as H264 when calculating maximum
782*30877f79SAndroid Build Coastguard Worker        codec input size
783*30877f79SAndroid Build Coastguard Worker        ([#8705](https://github.com/google/ExoPlayer/issues/8705)).
784*30877f79SAndroid Build Coastguard Worker*   UI:
785*30877f79SAndroid Build Coastguard Worker    *   Fix `StyledPlayerView` scrubber not reappearing correctly in some cases
786*30877f79SAndroid Build Coastguard Worker        ([#8646](https://github.com/google/ExoPlayer/issues/8646)).
787*30877f79SAndroid Build Coastguard Worker    *   Fix measurement of `StyledPlayerView` and `StyledPlayerControlView` when
788*30877f79SAndroid Build Coastguard Worker        `wrap_content` is used
789*30877f79SAndroid Build Coastguard Worker        ([#8726](https://github.com/google/ExoPlayer/issues/8726)).
790*30877f79SAndroid Build Coastguard Worker    *   Fix `StyledPlayerControlView` to stay in full mode (rather than minimal
791*30877f79SAndroid Build Coastguard Worker        mode) when possible
792*30877f79SAndroid Build Coastguard Worker        ([#8763](https://github.com/google/ExoPlayer/issues/8763)).
793*30877f79SAndroid Build Coastguard Worker*   DASH:
794*30877f79SAndroid Build Coastguard Worker    *   Parse `forced_subtitle` role from DASH manifests
795*30877f79SAndroid Build Coastguard Worker        ([#8781](https://github.com/google/ExoPlayer/issues/8781)).
796*30877f79SAndroid Build Coastguard Worker*   DASH:
797*30877f79SAndroid Build Coastguard Worker    *   Fix rounding error that could cause `SegmentTemplate.getSegmentCount()`
798*30877f79SAndroid Build Coastguard Worker        to return incorrect values
799*30877f79SAndroid Build Coastguard Worker        ([#8804](https://github.com/google/ExoPlayer/issues/8804)).
800*30877f79SAndroid Build Coastguard Worker*   HLS:
801*30877f79SAndroid Build Coastguard Worker    *   Fix bug of ignoring `EXT-X-START` when setting the live target offset
802*30877f79SAndroid Build Coastguard Worker        ([#8764](https://github.com/google/ExoPlayer/pull/8764)).
803*30877f79SAndroid Build Coastguard Worker    *   Fix incorrect application of byte ranges to `EXT-X-MAP` tags
804*30877f79SAndroid Build Coastguard Worker        ([#8783](https://github.com/google/ExoPlayer/issues/8783)).
805*30877f79SAndroid Build Coastguard Worker    *   Fix issue that could cause playback to become stuck if corresponding
806*30877f79SAndroid Build Coastguard Worker        `EXT-X-DISCONTINUITY` tags in different media playlists occur at
807*30877f79SAndroid Build Coastguard Worker        different positions in time
808*30877f79SAndroid Build Coastguard Worker        ([#8372](https://github.com/google/ExoPlayer/issues/8372)).
809*30877f79SAndroid Build Coastguard Worker    *   Fix issue that could cause playback of on-demand content to not start in
810*30877f79SAndroid Build Coastguard Worker        cases where the media playlists referenced by the master playlist have
811*30877f79SAndroid Build Coastguard Worker        different starting `EXT-X-PROGRAM-DATE-TIME` tags.
812*30877f79SAndroid Build Coastguard Worker    *   Fix container type detection for segments with incorrect file extension
813*30877f79SAndroid Build Coastguard Worker        or HTTP Content-Type
814*30877f79SAndroid Build Coastguard Worker        ([#8733](https://github.com/google/ExoPlayer/issues/8733)).
815*30877f79SAndroid Build Coastguard Worker*   Extractors:
816*30877f79SAndroid Build Coastguard Worker    *   Add support for `GContainer` and `GContainerItem` XMP namespace prefixes
817*30877f79SAndroid Build Coastguard Worker        in JPEG motion photo parsing.
818*30877f79SAndroid Build Coastguard Worker    *   Allow JFIF APP0 marker segment preceding Exif APP1 segment in
819*30877f79SAndroid Build Coastguard Worker        `JpegExtractor`.
820*30877f79SAndroid Build Coastguard Worker*   Text:
821*30877f79SAndroid Build Coastguard Worker    *   Parse SSA/ASS bold & italic info in `Style:` lines
822*30877f79SAndroid Build Coastguard Worker        ([#8435](https://github.com/google/ExoPlayer/issues/8435)).
823*30877f79SAndroid Build Coastguard Worker    *   Don't display subtitles after the end position of the current media
824*30877f79SAndroid Build Coastguard Worker        period (if known). This ensures sideloaded subtitles respect the end
825*30877f79SAndroid Build Coastguard Worker        point of `ClippingMediaPeriod` and prevents content subtitles from
826*30877f79SAndroid Build Coastguard Worker        continuing to be displayed over mid-roll ads
827*30877f79SAndroid Build Coastguard Worker        ([#5317](https://github.com/google/ExoPlayer/issues/5317),
828*30877f79SAndroid Build Coastguard Worker        [#8456](https://github.com/google/ExoPlayer/issues/8456)).
829*30877f79SAndroid Build Coastguard Worker    *   Fix CEA-708 priority handling to sort cues in the order defined by the
830*30877f79SAndroid Build Coastguard Worker        spec ([#8704](https://github.com/google/ExoPlayer/issues/8704)).
831*30877f79SAndroid Build Coastguard Worker    *   Support TTML `textEmphasis` attributes, used for Japanese boutens.
832*30877f79SAndroid Build Coastguard Worker    *   Support TTML `shear` attributes.
833*30877f79SAndroid Build Coastguard Worker*   Metadata:
834*30877f79SAndroid Build Coastguard Worker    *   Ensure that timed metadata near the end of a period is not dropped
835*30877f79SAndroid Build Coastguard Worker        ([#8710](https://github.com/google/ExoPlayer/issues/8710)).
836*30877f79SAndroid Build Coastguard Worker*   Cast extension:
837*30877f79SAndroid Build Coastguard Worker    *   Fix `onPositionDiscontinuity` event so that it is not triggered with
838*30877f79SAndroid Build Coastguard Worker        reason `DISCONTINUITY_REASON_PERIOD_TRANSITION` after a seek to another
839*30877f79SAndroid Build Coastguard Worker        media item and so that it is not triggered after a timeline change.
840*30877f79SAndroid Build Coastguard Worker*   IMA extension:
841*30877f79SAndroid Build Coastguard Worker    *   Fix error caused by `AdPlaybackState` ad group times being cleared,
842*30877f79SAndroid Build Coastguard Worker        which can occur if the `ImaAdsLoader` is released while an ad is pending
843*30877f79SAndroid Build Coastguard Worker        loading ([#8693](https://github.com/google/ExoPlayer/issues/8693)).
844*30877f79SAndroid Build Coastguard Worker    *   Upgrade IMA SDK dependency to 3.23.0, fixing an issue with
845*30877f79SAndroid Build Coastguard Worker        `NullPointerExceptions` within `WebView` callbacks
846*30877f79SAndroid Build Coastguard Worker        ([#8447](https://github.com/google/ExoPlayer/issues/8447)).
847*30877f79SAndroid Build Coastguard Worker*   FFmpeg extension: Fix playback failure when switching to TrueHD tracks
848*30877f79SAndroid Build Coastguard Worker    during playback ([#8616](https://github.com/google/ExoPlayer/issues/8616)).
849*30877f79SAndroid Build Coastguard Worker
850*30877f79SAndroid Build Coastguard Worker### 2.13.2 (2021-02-25)
851*30877f79SAndroid Build Coastguard Worker
852*30877f79SAndroid Build Coastguard Worker*   Extractors:
853*30877f79SAndroid Build Coastguard Worker    *   Add support for MP4 and QuickTime meta atoms that are not full atoms.
854*30877f79SAndroid Build Coastguard Worker*   UI:
855*30877f79SAndroid Build Coastguard Worker    *   Make conditions to enable UI actions consistent in
856*30877f79SAndroid Build Coastguard Worker        `DefaultControlDispatcher`, `PlayerControlView`,
857*30877f79SAndroid Build Coastguard Worker        `StyledPlayerControlView`, `PlayerNotificationManager` and
858*30877f79SAndroid Build Coastguard Worker        `TimelineQueueNavigator`.
859*30877f79SAndroid Build Coastguard Worker    *   Fix conditions to enable seeking to next/previous media item to handle
860*30877f79SAndroid Build Coastguard Worker        the case where a live stream has ended.
861*30877f79SAndroid Build Coastguard Worker*   Audio:
862*30877f79SAndroid Build Coastguard Worker    *   Fix `SimpleExoPlayer` reporting audio session ID as 0 in some cases
863*30877f79SAndroid Build Coastguard Worker        ([#8585](https://github.com/google/ExoPlayer/issues/8585)).
864*30877f79SAndroid Build Coastguard Worker*   IMA extension:
865*30877f79SAndroid Build Coastguard Worker    *   Fix a bug where playback could get stuck when seeking into a playlist
866*30877f79SAndroid Build Coastguard Worker        item with ads, if the preroll ad had preloaded but the window position
867*30877f79SAndroid Build Coastguard Worker        of the seek should instead trigger playback of a midroll.
868*30877f79SAndroid Build Coastguard Worker    *   Fix a bug with playback of ads in playlists, where the incorrect period
869*30877f79SAndroid Build Coastguard Worker        index was used when deciding whether to trigger playback of an ad after
870*30877f79SAndroid Build Coastguard Worker        a seek.
871*30877f79SAndroid Build Coastguard Worker*   Text:
872*30877f79SAndroid Build Coastguard Worker    *   Parse SSA/ASS font size in `Style:` lines
873*30877f79SAndroid Build Coastguard Worker        ([#8435](https://github.com/google/ExoPlayer/issues/8435)).
874*30877f79SAndroid Build Coastguard Worker*   VP9 extension: Update to use NDK r21
875*30877f79SAndroid Build Coastguard Worker    ([#8581](https://github.com/google/ExoPlayer/issues/8581)).
876*30877f79SAndroid Build Coastguard Worker*   FLAC extension: Update to use NDK r21
877*30877f79SAndroid Build Coastguard Worker    ([#8581](https://github.com/google/ExoPlayer/issues/8581)).
878*30877f79SAndroid Build Coastguard Worker*   Opus extension: Update to use NDK r21
879*30877f79SAndroid Build Coastguard Worker    ([#8581](https://github.com/google/ExoPlayer/issues/8581)).
880*30877f79SAndroid Build Coastguard Worker*   FFmpeg extension: Update to use NDK r21
881*30877f79SAndroid Build Coastguard Worker    ([#8581](https://github.com/google/ExoPlayer/issues/8581)).
882*30877f79SAndroid Build Coastguard Worker
883*30877f79SAndroid Build Coastguard Worker### 2.13.1 (2021-02-12)
884*30877f79SAndroid Build Coastguard Worker
885*30877f79SAndroid Build Coastguard Worker*   Live streaming:
886*30877f79SAndroid Build Coastguard Worker    *   Fix playback issue for HLS live streams without program date time
887*30877f79SAndroid Build Coastguard Worker        information ([#8560](https://github.com/google/ExoPlayer/issues/8560)).
888*30877f79SAndroid Build Coastguard Worker    *   Fix playback issue for multi-period DASH live streams
889*30877f79SAndroid Build Coastguard Worker        ([#8537](https://github.com/google/ExoPlayer/issues/8537)).
890*30877f79SAndroid Build Coastguard Worker    *   Fix playback failures when playing live streams with video tunneling
891*30877f79SAndroid Build Coastguard Worker        enabled ([#8570](https://github.com/google/ExoPlayer/issues/8570)).
892*30877f79SAndroid Build Coastguard Worker*   IMA extension:
893*30877f79SAndroid Build Coastguard Worker    *   Fix handling of repeated ad loads, to avoid ads being discarded if the
894*30877f79SAndroid Build Coastguard Worker        user seeks away and then back to a preloaded postroll (for example).
895*30877f79SAndroid Build Coastguard Worker    *   Fix a bug where an assertion would fail if the player started to buffer
896*30877f79SAndroid Build Coastguard Worker        an ad media period before the ad URI was known then an ad state update
897*30877f79SAndroid Build Coastguard Worker        arrived that didn't set the ad URI.
898*30877f79SAndroid Build Coastguard Worker    *   Add `ImaAdsLoader.focusSkipButton` to allow apps to request that the
899*30877f79SAndroid Build Coastguard Worker        skip button should receive UI focus, if shown
900*30877f79SAndroid Build Coastguard Worker        ([#8565](https://github.com/google/ExoPlayer/issues/8565)).
901*30877f79SAndroid Build Coastguard Worker*   DRM:
902*30877f79SAndroid Build Coastguard Worker    *   Re-use the previous `DrmSessionManager` instance when playing a playlist
903*30877f79SAndroid Build Coastguard Worker        (if possible)
904*30877f79SAndroid Build Coastguard Worker        ([#8523](https://github.com/google/ExoPlayer/issues/8523)).
905*30877f79SAndroid Build Coastguard Worker    *   Propagate DRM configuration when creating media sources for ad content
906*30877f79SAndroid Build Coastguard Worker        ([#8568](https://github.com/google/ExoPlayer/issues/8568)).
907*30877f79SAndroid Build Coastguard Worker    *   Only release 'keepalive' references to `DrmSession` in
908*30877f79SAndroid Build Coastguard Worker        `DefaultDrmSessionManager#release()` if keepalive is enabled
909*30877f79SAndroid Build Coastguard Worker        ([#8576](https://github.com/google/ExoPlayer/issues/8576)).
910*30877f79SAndroid Build Coastguard Worker
911*30877f79SAndroid Build Coastguard Worker### 2.13.0 (2021-02-04)
912*30877f79SAndroid Build Coastguard Worker
913*30877f79SAndroid Build Coastguard Worker*   Core library:
914*30877f79SAndroid Build Coastguard Worker    *   Verify correct thread usage in `SimpleExoPlayer` by default. Opt-out is
915*30877f79SAndroid Build Coastguard Worker        still possible until the next major release using
916*30877f79SAndroid Build Coastguard Worker        `setThrowsWhenUsingWrongThread(false)`
917*30877f79SAndroid Build Coastguard Worker        ([#4463](https://github.com/google/ExoPlayer/issues/4463)).
918*30877f79SAndroid Build Coastguard Worker    *   Add `Player.getCurrentStaticMetadata` and
919*30877f79SAndroid Build Coastguard Worker        `EventListener.onStaticMetadataChanged` to expose static metadata
920*30877f79SAndroid Build Coastguard Worker        belonging to the currently playing stream
921*30877f79SAndroid Build Coastguard Worker        ([#7266](https://github.com/google/ExoPlayer/issues/7266)).
922*30877f79SAndroid Build Coastguard Worker    *   Add `PlayerMessage.setLooper` and deprecate `PlayerMessage.setHandler`.
923*30877f79SAndroid Build Coastguard Worker    *   Add option to `MergingMediaSource` to clip the durations of all sources
924*30877f79SAndroid Build Coastguard Worker        to have the same length
925*30877f79SAndroid Build Coastguard Worker        ([#8422](https://github.com/google/ExoPlayer/issues/8422)).
926*30877f79SAndroid Build Coastguard Worker    *   Remove `Player.setVideoDecoderOutputBufferRenderer` from Player API. Use
927*30877f79SAndroid Build Coastguard Worker        `setVideoSurfaceView` and `clearVideoSurfaceView` instead.
928*30877f79SAndroid Build Coastguard Worker    *   Default `SingleSampleMediaSource.treatLoadErrorsAsEndOfStream` to `true`
929*30877f79SAndroid Build Coastguard Worker        so that errors loading external subtitle files do not cause playback to
930*30877f79SAndroid Build Coastguard Worker        fail ([#8430](https://github.com/google/ExoPlayer/issues/8430)). A
931*30877f79SAndroid Build Coastguard Worker        warning will be logged by `SingleSampleMediaPeriod` whenever a load
932*30877f79SAndroid Build Coastguard Worker        error is treated as though the end of the stream has been reached.
933*30877f79SAndroid Build Coastguard Worker    *   Time out on release to prevent ANRs if an underlying platform call is
934*30877f79SAndroid Build Coastguard Worker        stuck ([#4352](https://github.com/google/ExoPlayer/issues/4352)).
935*30877f79SAndroid Build Coastguard Worker    *   Time out when detaching a surface to prevent ANRs if the underlying
936*30877f79SAndroid Build Coastguard Worker        platform call is stuck
937*30877f79SAndroid Build Coastguard Worker        ([#5887](https://github.com/google/ExoPlayer/issues/5887)).
938*30877f79SAndroid Build Coastguard Worker    *   Fix bug where `AnalyticsListener` callbacks could arrive in the wrong
939*30877f79SAndroid Build Coastguard Worker        order ([#8048](https://github.com/google/ExoPlayer/issues/8048)).
940*30877f79SAndroid Build Coastguard Worker*   Media transformation:
941*30877f79SAndroid Build Coastguard Worker    *   Add a new `transformer` module for converting media streams. The
942*30877f79SAndroid Build Coastguard Worker        initially available transformations are changing the container format,
943*30877f79SAndroid Build Coastguard Worker        removing tracks, and slow motion flattening.
944*30877f79SAndroid Build Coastguard Worker*   Low latency live streaming:
945*30877f79SAndroid Build Coastguard Worker    *   Support low-latency DASH (also known as ULL-CMAF) and Apple's
946*30877f79SAndroid Build Coastguard Worker        low-latency HLS extension.
947*30877f79SAndroid Build Coastguard Worker    *   Add `LiveConfiguration` to `MediaItem` to define live offset and
948*30877f79SAndroid Build Coastguard Worker        playback speed adjustment parameters. The same parameters can be set on
949*30877f79SAndroid Build Coastguard Worker        `DefaultMediaSourceFactory` to apply for all `MediaItems`.
950*30877f79SAndroid Build Coastguard Worker    *   Add `LivePlaybackSpeedControl` to control playback speed adjustments
951*30877f79SAndroid Build Coastguard Worker        during live playbacks. Such adjustments allow the player to stay close
952*30877f79SAndroid Build Coastguard Worker        to the live offset. `DefaultLivePlaybackSpeedControl` is provided as a
953*30877f79SAndroid Build Coastguard Worker        default implementation.
954*30877f79SAndroid Build Coastguard Worker    *   Add `targetLiveOffsetUs` parameter to `LoadControl.shouldStartPlayback`.
955*30877f79SAndroid Build Coastguard Worker*   Extractors:
956*30877f79SAndroid Build Coastguard Worker    *   Populate codecs string for H.264/AVC in MP4, Matroska and FLV streams to
957*30877f79SAndroid Build Coastguard Worker        allow decoder capability checks based on codec profile and level
958*30877f79SAndroid Build Coastguard Worker        ([#8393](https://github.com/google/ExoPlayer/issues/8393)).
959*30877f79SAndroid Build Coastguard Worker    *   Populate codecs string for H.265/HEVC in MP4, Matroska and MPEG-TS
960*30877f79SAndroid Build Coastguard Worker        streams to allow decoder capability checks based on codec profile and
961*30877f79SAndroid Build Coastguard Worker        level ([#8393](https://github.com/google/ExoPlayer/issues/8393)).
962*30877f79SAndroid Build Coastguard Worker    *   Add support for playing JPEG motion photos
963*30877f79SAndroid Build Coastguard Worker        ([#5405](https://github.com/google/ExoPlayer/issues/5405)).
964*30877f79SAndroid Build Coastguard Worker    *   Handle sample size mismatches between raw audio `stsd` information and
965*30877f79SAndroid Build Coastguard Worker        `stsz` fixed sample size in MP4 extractors.
966*30877f79SAndroid Build Coastguard Worker    *   Fix Vorbis private codec data parsing in the Matroska extractor
967*30877f79SAndroid Build Coastguard Worker        ([#8496](https://github.com/google/ExoPlayer/issues/8496)).
968*30877f79SAndroid Build Coastguard Worker*   Track selection:
969*30877f79SAndroid Build Coastguard Worker    *   Move `Player.getTrackSelector` to the `ExoPlayer` interface.
970*30877f79SAndroid Build Coastguard Worker    *   Move the mutable parts of `TrackSelection` into an `ExoTrackSelection`
971*30877f79SAndroid Build Coastguard Worker        subclass.
972*30877f79SAndroid Build Coastguard Worker    *   Allow parallel adaptation of video and audio
973*30877f79SAndroid Build Coastguard Worker        ([#5111](https://github.com/google/ExoPlayer/issues/5111)).
974*30877f79SAndroid Build Coastguard Worker    *   Simplify enabling tunneling with `DefaultTrackSelector`.
975*30877f79SAndroid Build Coastguard Worker        `ParametersBuilder.setTunnelingAudioSessionId` has been replaced with
976*30877f79SAndroid Build Coastguard Worker        `ParametersBuilder.setTunnelingEnabled`. The player's audio session ID
977*30877f79SAndroid Build Coastguard Worker        will be used, and so a tunneling specific ID is no longer needed.
978*30877f79SAndroid Build Coastguard Worker    *   Add additional configuration parameters to `DefaultTrackSelector`.
979*30877f79SAndroid Build Coastguard Worker        `DefaultTrackSelector.ParametersBuilder` now includes:
980*30877f79SAndroid Build Coastguard Worker        *   `setPreferredVideoMimeType`, `setPreferredVideoMimeTypes`,
981*30877f79SAndroid Build Coastguard Worker            `setPreferredAudioMimeType` and `setPreferredAudioMimeTypes` for
982*30877f79SAndroid Build Coastguard Worker            specifying preferred video and audio MIME type(s)
983*30877f79SAndroid Build Coastguard Worker            ([#8320](https://github.com/google/ExoPlayer/issues/8320)).
984*30877f79SAndroid Build Coastguard Worker        *   `setPreferredAudioLanguages` and `setPreferredTextLanguages` for
985*30877f79SAndroid Build Coastguard Worker            specifying multiple preferred audio and text languages.
986*30877f79SAndroid Build Coastguard Worker        *   `setPreferredAudioRoleFlags` for specifying preferred audio role
987*30877f79SAndroid Build Coastguard Worker            flags.
988*30877f79SAndroid Build Coastguard Worker    *   Forward `Timeline` and `MediaPeriodId` to `TrackSelection.Factory`.
989*30877f79SAndroid Build Coastguard Worker*   DASH:
990*30877f79SAndroid Build Coastguard Worker    *   Support low-latency DASH playback (`availabilityTimeOffset` and
991*30877f79SAndroid Build Coastguard Worker        `ServiceDescription` tags)
992*30877f79SAndroid Build Coastguard Worker        ([#4904](https://github.com/google/ExoPlayer/issues/4904)).
993*30877f79SAndroid Build Coastguard Worker    *   Improve logic for determining whether to refresh the manifest when a
994*30877f79SAndroid Build Coastguard Worker        chunk load error occurs in a live streams that contains EMSG data
995*30877f79SAndroid Build Coastguard Worker        ([#8408](https://github.com/google/ExoPlayer/issues/8408)).
996*30877f79SAndroid Build Coastguard Worker*   HLS:
997*30877f79SAndroid Build Coastguard Worker    *   Support playlist delta updates, blocking playlist reloads and rendition
998*30877f79SAndroid Build Coastguard Worker        reports.
999*30877f79SAndroid Build Coastguard Worker    *   Support low-latency HLS playback (`EXT-X-PART` and preload hints)
1000*30877f79SAndroid Build Coastguard Worker        ([#5011](https://github.com/google/ExoPlayer/issues/5011)).
1001*30877f79SAndroid Build Coastguard Worker*   UI:
1002*30877f79SAndroid Build Coastguard Worker    *   Improve `StyledPlayerControlView` button animations.
1003*30877f79SAndroid Build Coastguard Worker    *   Miscellaneous fixes for `StyledPlayerControlView` in minimal mode.
1004*30877f79SAndroid Build Coastguard Worker*   DRM:
1005*30877f79SAndroid Build Coastguard Worker    *   Fix playback failure when switching from PlayReady protected content to
1006*30877f79SAndroid Build Coastguard Worker        Widevine or Clearkey protected content in a playlist.
1007*30877f79SAndroid Build Coastguard Worker    *   Add `ExoMediaDrm.KeyRequest.getRequestType`
1008*30877f79SAndroid Build Coastguard Worker        ([#7847](https://github.com/google/ExoPlayer/issues/7847)).
1009*30877f79SAndroid Build Coastguard Worker    *   Drop key and provision responses if `DefaultDrmSession` is released
1010*30877f79SAndroid Build Coastguard Worker        while waiting for the response. This prevents harmless log messages of
1011*30877f79SAndroid Build Coastguard Worker        the form: `IllegalStateException: sending message to a Handler on a dead
1012*30877f79SAndroid Build Coastguard Worker        thread` ([#8328](https://github.com/google/ExoPlayer/issues/8328)).
1013*30877f79SAndroid Build Coastguard Worker    *   Allow apps to fully customize DRM behaviour for each `MediaItem` by
1014*30877f79SAndroid Build Coastguard Worker        passing a `DrmSessionManagerProvider` to `MediaSourceFactory`
1015*30877f79SAndroid Build Coastguard Worker        ([#8466](https://github.com/google/ExoPlayer/issues/8466)).
1016*30877f79SAndroid Build Coastguard Worker*   Analytics:
1017*30877f79SAndroid Build Coastguard Worker    *   Add an `onEvents` callback to `Player.EventListener` and
1018*30877f79SAndroid Build Coastguard Worker        `AnalyticsListener`. When one or more player states change
1019*30877f79SAndroid Build Coastguard Worker        simultaneously, `onEvents` is called once after all of the callbacks
1020*30877f79SAndroid Build Coastguard Worker        associated with the individual state changes.
1021*30877f79SAndroid Build Coastguard Worker    *   Pass a `DecoderReuseEvaluation` to `AnalyticsListener`'s
1022*30877f79SAndroid Build Coastguard Worker        `onVideoInputFormatChanged` and `onAudioInputFormatChanged` methods. The
1023*30877f79SAndroid Build Coastguard Worker        `DecoderReuseEvaluation` indicates whether it was possible to re-use an
1024*30877f79SAndroid Build Coastguard Worker        existing decoder instance for the new format, and if not then the
1025*30877f79SAndroid Build Coastguard Worker        reasons why.
1026*30877f79SAndroid Build Coastguard Worker*   Video:
1027*30877f79SAndroid Build Coastguard Worker    *   Fall back to AVC/HEVC decoders for Dolby Vision streams with level 10 to
1028*30877f79SAndroid Build Coastguard Worker        13 ([#8530](https://github.com/google/ExoPlayer/issues/8530)).
1029*30877f79SAndroid Build Coastguard Worker    *   Fix VP9 format capability checks on API level 23 and earlier. The
1030*30877f79SAndroid Build Coastguard Worker        platform does not correctly report the VP9 level supported by the
1031*30877f79SAndroid Build Coastguard Worker        decoder in this case, so we estimate it based on the decoder's maximum
1032*30877f79SAndroid Build Coastguard Worker        supported bitrate.
1033*30877f79SAndroid Build Coastguard Worker*   Audio:
1034*30877f79SAndroid Build Coastguard Worker    *   Fix handling of audio session IDs
1035*30877f79SAndroid Build Coastguard Worker        ([#8190](https://github.com/google/ExoPlayer/issues/8190)).
1036*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer` now generates an audio session ID on construction,
1037*30877f79SAndroid Build Coastguard Worker        which can be immediately queried by calling
1038*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer.getAudioSessionId`. The audio session ID will only
1039*30877f79SAndroid Build Coastguard Worker        change if application code calls `SimpleExoPlayer.setAudioSessionId`.
1040*30877f79SAndroid Build Coastguard Worker    *   Replace `onAudioSessionId` with `onAudioSessionIdChanged` in
1041*30877f79SAndroid Build Coastguard Worker        `AudioListener` and `AnalyticsListener`. Note that
1042*30877f79SAndroid Build Coastguard Worker        `onAudioSessionIdChanged` is called in fewer cases than
1043*30877f79SAndroid Build Coastguard Worker        `onAudioSessionId` was called, due to the improved handling of audio
1044*30877f79SAndroid Build Coastguard Worker        session IDs as described above.
1045*30877f79SAndroid Build Coastguard Worker    *   Retry playback after some types of `AudioTrack` error.
1046*30877f79SAndroid Build Coastguard Worker    *   Create E-AC3 JOC passthrough `AudioTrack` instances using the maximum
1047*30877f79SAndroid Build Coastguard Worker        supported channel count (instead of assuming 6 channels) from API 29.
1048*30877f79SAndroid Build Coastguard Worker*   Text:
1049*30877f79SAndroid Build Coastguard Worker    *   Add support for the SSA `primaryColour` style attribute
1050*30877f79SAndroid Build Coastguard Worker        ([#8435](https://github.com/google/ExoPlayer/issues/8435)).
1051*30877f79SAndroid Build Coastguard Worker    *   Fix CEA-708 sequence number discontinuity handling
1052*30877f79SAndroid Build Coastguard Worker        ([#1807](https://github.com/google/ExoPlayer/issues/1807)).
1053*30877f79SAndroid Build Coastguard Worker    *   Fix CEA-708 handling of unexpectedly small packets
1054*30877f79SAndroid Build Coastguard Worker        ([#1807](https://github.com/google/ExoPlayer/issues/1807)).
1055*30877f79SAndroid Build Coastguard Worker*   Data sources:
1056*30877f79SAndroid Build Coastguard Worker    *   For `HttpDataSource` implementations, default to using the user agent of
1057*30877f79SAndroid Build Coastguard Worker        the underlying network stack.
1058*30877f79SAndroid Build Coastguard Worker    *   Deprecate `HttpDataSource.Factory.getDefaultRequestProperties`.
1059*30877f79SAndroid Build Coastguard Worker        `HttpDataSource.Factory.setDefaultRequestProperties` instead.
1060*30877f79SAndroid Build Coastguard Worker    *   Add `DefaultHttpDataSource.Factory` and deprecate
1061*30877f79SAndroid Build Coastguard Worker        `DefaultHttpDataSourceFactory`.
1062*30877f79SAndroid Build Coastguard Worker*   Metadata retriever:
1063*30877f79SAndroid Build Coastguard Worker    *   Parse Google Photos HEIC and JPEG motion photo metadata.
1064*30877f79SAndroid Build Coastguard Worker*   IMA extension:
1065*30877f79SAndroid Build Coastguard Worker    *   Add support for playback of ads in playlists
1066*30877f79SAndroid Build Coastguard Worker        ([#3750](https://github.com/google/ExoPlayer/issues/3750)).
1067*30877f79SAndroid Build Coastguard Worker    *   Add `ImaAdsLoader.Builder.setEnableContinuousPlayback` for setting
1068*30877f79SAndroid Build Coastguard Worker        whether to request ads for continuous playback.
1069*30877f79SAndroid Build Coastguard Worker    *   Upgrade IMA SDK dependency to 3.22.0. This fixes leaking of the ad view
1070*30877f79SAndroid Build Coastguard Worker        group ([#7344](https://github.com/google/ExoPlayer/issues/7344),
1071*30877f79SAndroid Build Coastguard Worker        [#8339](https://github.com/google/ExoPlayer/issues/8339)).
1072*30877f79SAndroid Build Coastguard Worker    *   Fix a bug that could cause the next content position played after a seek
1073*30877f79SAndroid Build Coastguard Worker        to snap back to the cue point of the preceding ad, rather than the
1074*30877f79SAndroid Build Coastguard Worker        requested content position.
1075*30877f79SAndroid Build Coastguard Worker    *   Fix a regression that caused an ad group to be skipped after an initial
1076*30877f79SAndroid Build Coastguard Worker        seek to a non-zero position. Unsupported VPAID ads will still be
1077*30877f79SAndroid Build Coastguard Worker        skipped, but only after the preload timeout rather than instantly
1078*30877f79SAndroid Build Coastguard Worker        ([#8428](https://github.com/google/ExoPlayer/issues/8428),
1079*30877f79SAndroid Build Coastguard Worker        [#7832](https://github.com/google/ExoPlayer/issues/7832)).
1080*30877f79SAndroid Build Coastguard Worker    *   Fix a regression that caused a short ad followed by another ad to be
1081*30877f79SAndroid Build Coastguard Worker        skipped due to playback being stuck buffering waiting for the second ad
1082*30877f79SAndroid Build Coastguard Worker        to load ([#8492](https://github.com/google/ExoPlayer/issues/8492)).
1083*30877f79SAndroid Build Coastguard Worker*   FFmpeg extension:
1084*30877f79SAndroid Build Coastguard Worker    *   Link the FFmpeg library statically, saving 350KB in binary size on
1085*30877f79SAndroid Build Coastguard Worker        average.
1086*30877f79SAndroid Build Coastguard Worker*   OkHttp extension:
1087*30877f79SAndroid Build Coastguard Worker    *   Add `OkHttpDataSource.Factory` and deprecate `OkHttpDataSourceFactory`.
1088*30877f79SAndroid Build Coastguard Worker*   Cronet extension:
1089*30877f79SAndroid Build Coastguard Worker    *   Add `CronetDataSource.Factory` and deprecate `CronetDataSourceFactory`.
1090*30877f79SAndroid Build Coastguard Worker    *   Support setting the user agent on `CronetDataSource.Factory` and
1091*30877f79SAndroid Build Coastguard Worker        `CronetEngineWrapper`.
1092*30877f79SAndroid Build Coastguard Worker*   MediaSession extension:
1093*30877f79SAndroid Build Coastguard Worker    *   Support `setPlaybackSpeed(float)` and disable it by default. Use
1094*30877f79SAndroid Build Coastguard Worker        `MediaSessionConnector.setEnabledPlaybackActions(long)` to enable
1095*30877f79SAndroid Build Coastguard Worker        ([#8229](https://github.com/google/ExoPlayer/issues/8229)).
1096*30877f79SAndroid Build Coastguard Worker*   Remove deprecated symbols:
1097*30877f79SAndroid Build Coastguard Worker    *   `AdaptiveMediaSourceEventListener`. Use `MediaSourceEventListener`
1098*30877f79SAndroid Build Coastguard Worker        instead.
1099*30877f79SAndroid Build Coastguard Worker    *   `DashMediaSource.Factory.setMinLoadableRetryCount(int)`. Use
1100*30877f79SAndroid Build Coastguard Worker        `DashMediaSource.Factory.setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)`
1101*30877f79SAndroid Build Coastguard Worker        instead.
1102*30877f79SAndroid Build Coastguard Worker    *   `DefaultAnalyticsListener`. Use `AnalyticsListener` instead.
1103*30877f79SAndroid Build Coastguard Worker    *   `DefaultLoadControl` constructors. Use `DefaultLoadControl.Builder`
1104*30877f79SAndroid Build Coastguard Worker        instead.
1105*30877f79SAndroid Build Coastguard Worker    *   `DrmInitData.get(UUID)`. Use `DrmInitData.get(int)` and
1106*30877f79SAndroid Build Coastguard Worker        `DrmInitData.SchemeData.matches(UUID)` instead.
1107*30877f79SAndroid Build Coastguard Worker    *   `ExtractorsMediaSource.Factory.setMinLoadableRetryCount(int)`. Use
1108*30877f79SAndroid Build Coastguard Worker        `ExtractorsMediaSource.Factory.setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)`
1109*30877f79SAndroid Build Coastguard Worker        instead.
1110*30877f79SAndroid Build Coastguard Worker    *   `FixedTrackSelection.Factory`. If you need to disable adaptive selection
1111*30877f79SAndroid Build Coastguard Worker        in `DefaultTrackSelector`, enable the
1112*30877f79SAndroid Build Coastguard Worker        `DefaultTrackSelector.Parameters.forceHighestSupportedBitrate` flag.
1113*30877f79SAndroid Build Coastguard Worker    *   `HlsMediaSource.Factory.setMinLoadableRetryCount(int)`. Use
1114*30877f79SAndroid Build Coastguard Worker        `HlsMediaSource.Factory.setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)`
1115*30877f79SAndroid Build Coastguard Worker        instead.
1116*30877f79SAndroid Build Coastguard Worker    *   `MappedTrackInfo.getTrackFormatSupport(int, int, int)`. Use
1117*30877f79SAndroid Build Coastguard Worker        `MappedTrackInfo.getTrackSupport(int, int, int)` instead.
1118*30877f79SAndroid Build Coastguard Worker    *   `MappedTrackInfo.getTrackTypeRendererSupport(int)`. Use
1119*30877f79SAndroid Build Coastguard Worker        `MappedTrackInfo.getTypeSupport(int)` instead.
1120*30877f79SAndroid Build Coastguard Worker    *   `MappedTrackInfo.getUnassociatedTrackGroups()`. Use
1121*30877f79SAndroid Build Coastguard Worker        `MappedTrackInfo.getUnmappedTrackGroups()` instead.
1122*30877f79SAndroid Build Coastguard Worker    *   `MappedTrackInfo.length`. Use `MappedTrackInfo.getRendererCount()`
1123*30877f79SAndroid Build Coastguard Worker        instead.
1124*30877f79SAndroid Build Coastguard Worker    *   `Player.DefaultEventListener.onTimelineChanged(Timeline, Object)`. Use
1125*30877f79SAndroid Build Coastguard Worker        `Player.EventListener.onTimelineChanged(Timeline, int)` instead.
1126*30877f79SAndroid Build Coastguard Worker    *   `Player.setAudioAttributes(AudioAttributes)`. Use
1127*30877f79SAndroid Build Coastguard Worker        `Player.AudioComponent.setAudioAttributes(AudioAttributes, boolean)`
1128*30877f79SAndroid Build Coastguard Worker        instead.
1129*30877f79SAndroid Build Coastguard Worker    *   `PlayerView.setDefaultArtwork(Bitmap)`. Use
1130*30877f79SAndroid Build Coastguard Worker        `PlayerView.setDefaultArtwork(Drawable)` instead.
1131*30877f79SAndroid Build Coastguard Worker    *   `PlayerView.setShowBuffering(boolean)`. Use
1132*30877f79SAndroid Build Coastguard Worker        `PlayerView.setShowBuffering(int)` instead.
1133*30877f79SAndroid Build Coastguard Worker    *   `SimpleExoPlayer.clearMetadataOutput(MetadataOutput)`. Use
1134*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer.removeMetadataOutput(MetadataOutput)` instead.
1135*30877f79SAndroid Build Coastguard Worker    *   `SimpleExoPlayer.clearTextOutput(TextOutput)`. Use
1136*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer.removeTextOutput(TextOutput)` instead.
1137*30877f79SAndroid Build Coastguard Worker    *   `SimpleExoPlayer.clearVideoListener()`. Use
1138*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer.removeVideoListener(VideoListener)` instead.
1139*30877f79SAndroid Build Coastguard Worker    *   `SimpleExoPlayer.getAudioStreamType()`. Use
1140*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer.getAudioAttributes()` instead.
1141*30877f79SAndroid Build Coastguard Worker    *   `SimpleExoPlayer.setAudioDebugListener(AudioRendererEventListener)`. Use
1142*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer.addAnalyticsListener(AnalyticsListener)` instead.
1143*30877f79SAndroid Build Coastguard Worker    *   `SimpleExoPlayer.setAudioStreamType(int)`. Use
1144*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer.setAudioAttributes(AudioAttributes)` instead.
1145*30877f79SAndroid Build Coastguard Worker    *   `SimpleExoPlayer.setMetadataOutput(MetadataOutput)`. Use
1146*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer.addMetadataOutput(MetadataOutput)` instead. If your
1147*30877f79SAndroid Build Coastguard Worker        application is calling `SimpleExoPlayer.setMetadataOutput(null)`, make
1148*30877f79SAndroid Build Coastguard Worker        sure to replace this call with a call to
1149*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer.removeMetadataOutput(MetadataOutput)`.
1150*30877f79SAndroid Build Coastguard Worker    *   `SimpleExoPlayer.setPlaybackParams(PlaybackParams)`. Use
1151*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer.setPlaybackParameters(PlaybackParameters)` instead.
1152*30877f79SAndroid Build Coastguard Worker    *   `SimpleExoPlayer.setTextOutput(TextOutput)`. Use
1153*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer.addTextOutput(TextOutput)` instead. If your application
1154*30877f79SAndroid Build Coastguard Worker        is calling `SimpleExoPlayer.setTextOutput(null)`, make sure to replace
1155*30877f79SAndroid Build Coastguard Worker        this call with a call to `SimpleExoPlayer.removeTextOutput(TextOutput)`.
1156*30877f79SAndroid Build Coastguard Worker    *   `SimpleExoPlayer.setVideoDebugListener(VideoRendererEventListener)`. Use
1157*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer.addAnalyticsListener(AnalyticsListener)` instead.
1158*30877f79SAndroid Build Coastguard Worker    *   `SimpleExoPlayer.setVideoListener(VideoListener)`. Use
1159*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer.addVideoListener(VideoListener)` instead. If your
1160*30877f79SAndroid Build Coastguard Worker        application is calling `SimpleExoPlayer.setVideoListener(null)`, make
1161*30877f79SAndroid Build Coastguard Worker        sure to replace this call with a call to
1162*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer.removeVideoListener(VideoListener)`.
1163*30877f79SAndroid Build Coastguard Worker    *   `SimpleExoPlayer.VideoListener`. Use
1164*30877f79SAndroid Build Coastguard Worker        `com.google.android.exoplayer2.video.VideoListener` instead.
1165*30877f79SAndroid Build Coastguard Worker    *   `SingleSampleMediaSource.EventListener` and constructors. Use
1166*30877f79SAndroid Build Coastguard Worker        `MediaSourceEventListener` and `SingleSampleMediaSource.Factory`
1167*30877f79SAndroid Build Coastguard Worker        instead.
1168*30877f79SAndroid Build Coastguard Worker    *   `SimpleExoPlayer.addVideoDebugListener`,
1169*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer.removeVideoDebugListener`,
1170*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer.addAudioDebugListener` and
1171*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer.removeAudioDebugListener`. Use
1172*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer.addAnalyticsListener` and
1173*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer.removeAnalyticsListener` instead.
1174*30877f79SAndroid Build Coastguard Worker    *   `SingleSampleMediaSource.Factory.setMinLoadableRetryCount(int)`. Use
1175*30877f79SAndroid Build Coastguard Worker        `SingleSampleMediaSource.Factory.setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)`
1176*30877f79SAndroid Build Coastguard Worker        instead.
1177*30877f79SAndroid Build Coastguard Worker    *   `SsMediaSource.Factory.setMinLoadableRetryCount(int)`. Use
1178*30877f79SAndroid Build Coastguard Worker        `SsMediaSource.Factory.setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)`
1179*30877f79SAndroid Build Coastguard Worker        instead.
1180*30877f79SAndroid Build Coastguard Worker
1181*30877f79SAndroid Build Coastguard Worker### 2.12.3 (2021-01-13)
1182*30877f79SAndroid Build Coastguard Worker
1183*30877f79SAndroid Build Coastguard Worker*   Core library:
1184*30877f79SAndroid Build Coastguard Worker    *   Fix `MediaCodecRenderer` issue where empty streams would fail to play in
1185*30877f79SAndroid Build Coastguard Worker        bypass mode ([#8374](https://github.com/google/ExoPlayer/issues/8374)).
1186*30877f79SAndroid Build Coastguard Worker    *   Fix playback issues after seeking during an ad
1187*30877f79SAndroid Build Coastguard Worker        ([#8349](https://github.com/google/ExoPlayer/issues/8349)).
1188*30877f79SAndroid Build Coastguard Worker    *   Fix propagation of `LoadErrorHandlingPolicy` from
1189*30877f79SAndroid Build Coastguard Worker        `DefaultMediaSourceFactory` into `SingleSampleMediaSource.Factory` when
1190*30877f79SAndroid Build Coastguard Worker        creating subtitle media sources from
1191*30877f79SAndroid Build Coastguard Worker        `MediaItem.playbackProperties.subtitles`
1192*30877f79SAndroid Build Coastguard Worker        ([#8430](https://github.com/google/ExoPlayer/issues/8430)).
1193*30877f79SAndroid Build Coastguard Worker*   UI:
1194*30877f79SAndroid Build Coastguard Worker    *   Fix issue where pop-up menus belonging to `StyledPlayerControlView`
1195*30877f79SAndroid Build Coastguard Worker        would not be dismissed when tapping outside of the menu area or pressing
1196*30877f79SAndroid Build Coastguard Worker        the back button, on API level 22 and earlier
1197*30877f79SAndroid Build Coastguard Worker        ([#8272](https://github.com/google/ExoPlayer/issues/8272)).
1198*30877f79SAndroid Build Coastguard Worker*   Downloads:
1199*30877f79SAndroid Build Coastguard Worker    *   Fix crash in `DownloadManager` that could occur when adding a stopped
1200*30877f79SAndroid Build Coastguard Worker        download with the same ID as a download currently being removed
1201*30877f79SAndroid Build Coastguard Worker        ([#8419](https://github.com/google/ExoPlayer/issues/8419)).
1202*30877f79SAndroid Build Coastguard Worker*   Text:
1203*30877f79SAndroid Build Coastguard Worker    *   Gracefully handle null-terminated subtitle content in Matroska
1204*30877f79SAndroid Build Coastguard Worker        containers.
1205*30877f79SAndroid Build Coastguard Worker    *   Fix CEA-708 anchor positioning
1206*30877f79SAndroid Build Coastguard Worker        ([#1807](https://github.com/google/ExoPlayer/issues/1807)).
1207*30877f79SAndroid Build Coastguard Worker*   IMA extension:
1208*30877f79SAndroid Build Coastguard Worker    *   Fix a condition where playback could get stuck before an empty ad
1209*30877f79SAndroid Build Coastguard Worker        ([#8205](https://github.com/google/ExoPlayer/issues/8205)).
1210*30877f79SAndroid Build Coastguard Worker    *   Log a warning rather than throwing when reaching the end of the stream
1211*30877f79SAndroid Build Coastguard Worker        with an ad playing but without ad media info
1212*30877f79SAndroid Build Coastguard Worker        ([#8290](https://github.com/google/ExoPlayer/issues/8290)).
1213*30877f79SAndroid Build Coastguard Worker*   Media2 extension:
1214*30877f79SAndroid Build Coastguard Worker    *   Make media2-extension depend on AndroidX media2:media2-session:1.1.0 to
1215*30877f79SAndroid Build Coastguard Worker        fix a deadlock while creating PlaybackStateCompat internally.
1216*30877f79SAndroid Build Coastguard Worker        ([#8011](https://github.com/google/ExoPlayer/issues/8011)).
1217*30877f79SAndroid Build Coastguard Worker
1218*30877f79SAndroid Build Coastguard Worker### 2.12.2 (2020-12-01)
1219*30877f79SAndroid Build Coastguard Worker
1220*30877f79SAndroid Build Coastguard Worker*   Core library:
1221*30877f79SAndroid Build Coastguard Worker    *   Suppress exceptions from registering and unregistering the stream volume
1222*30877f79SAndroid Build Coastguard Worker        receiver ([#8087](https://github.com/google/ExoPlayer/issues/8087),
1223*30877f79SAndroid Build Coastguard Worker        [#8106](https://github.com/google/ExoPlayer/issues/8106)).
1224*30877f79SAndroid Build Coastguard Worker    *   Suppress ProGuard warnings caused by Guava's compile-only dependencies
1225*30877f79SAndroid Build Coastguard Worker        ([#8103](https://github.com/google/ExoPlayer/issues/8103)).
1226*30877f79SAndroid Build Coastguard Worker    *   Fix issue that could cause playback to freeze when selecting tracks, if
1227*30877f79SAndroid Build Coastguard Worker        extension audio renderers are being used
1228*30877f79SAndroid Build Coastguard Worker        ([#8203](https://github.com/google/ExoPlayer/issues/8203)).
1229*30877f79SAndroid Build Coastguard Worker*   UI:
1230*30877f79SAndroid Build Coastguard Worker    *   Fix incorrect color and text alignment of the `StyledPlayerControlView`
1231*30877f79SAndroid Build Coastguard Worker        fast forward and rewind buttons, when used together with the
1232*30877f79SAndroid Build Coastguard Worker        `com.google.android.material` library
1233*30877f79SAndroid Build Coastguard Worker        ([#7898](https://github.com/google/ExoPlayer/issues/7898)).
1234*30877f79SAndroid Build Coastguard Worker    *   Add `dispatchPrepare(Player)` to `ControlDispatcher` and implement it in
1235*30877f79SAndroid Build Coastguard Worker        `DefaultControlDispatcher`. Deprecate `PlaybackPreparer` and
1236*30877f79SAndroid Build Coastguard Worker        `setPlaybackPreparer` in `StyledPlayerView`, `StyledPlayerControlView`,
1237*30877f79SAndroid Build Coastguard Worker        `PlayerView`, `PlayerControlView`, `PlayerNotificationManager` and
1238*30877f79SAndroid Build Coastguard Worker        `LeanbackPlayerAdapter` and use `ControlDispatcher` for dispatching
1239*30877f79SAndroid Build Coastguard Worker        prepare instead
1240*30877f79SAndroid Build Coastguard Worker        ([#7882](https://github.com/google/ExoPlayer/issues/7882)).
1241*30877f79SAndroid Build Coastguard Worker    *   Increase seekbar's touch target height in `StyledPlayerControlView`.
1242*30877f79SAndroid Build Coastguard Worker    *   Update `StyledPlayerControlView` menu items to behave correctly for
1243*30877f79SAndroid Build Coastguard Worker        right-to-left languages.
1244*30877f79SAndroid Build Coastguard Worker    *   Support enabling the previous and next actions individually in
1245*30877f79SAndroid Build Coastguard Worker        `PlayerNotificationManager`.
1246*30877f79SAndroid Build Coastguard Worker*   Audio:
1247*30877f79SAndroid Build Coastguard Worker    *   Work around `AudioManager` crashes when calling `getStreamVolume`
1248*30877f79SAndroid Build Coastguard Worker        ([#8191](https://github.com/google/ExoPlayer/issues/8191)).
1249*30877f79SAndroid Build Coastguard Worker*   Extractors:
1250*30877f79SAndroid Build Coastguard Worker    *   Matroska: Add support for 32-bit floating point PCM, and 8-bit and
1251*30877f79SAndroid Build Coastguard Worker        16-bit big endian integer PCM
1252*30877f79SAndroid Build Coastguard Worker        ([#8142](https://github.com/google/ExoPlayer/issues/8142)).
1253*30877f79SAndroid Build Coastguard Worker    *   MP4: Add support for mpeg1 video box
1254*30877f79SAndroid Build Coastguard Worker        ([#8257](https://github.com/google/ExoPlayer/issues/8257)).
1255*30877f79SAndroid Build Coastguard Worker*   IMA extension:
1256*30877f79SAndroid Build Coastguard Worker    *   Upgrade IMA SDK dependency to 3.21.0, and release the `AdsLoader`
1257*30877f79SAndroid Build Coastguard Worker        ([#7344](https://github.com/google/ExoPlayer/issues/7344)).
1258*30877f79SAndroid Build Coastguard Worker    *   Improve handling of ad tags with unsupported VPAID ads
1259*30877f79SAndroid Build Coastguard Worker        ([#7832](https://github.com/google/ExoPlayer/issues/7832)).
1260*30877f79SAndroid Build Coastguard Worker    *   Fix a bug that caused multiple ads in an ad pod to be skipped when one
1261*30877f79SAndroid Build Coastguard Worker        ad in the ad pod was skipped.
1262*30877f79SAndroid Build Coastguard Worker    *   Fix a bug that caused ad progress not to be updated if the player
1263*30877f79SAndroid Build Coastguard Worker        resumed after buffering during an ad
1264*30877f79SAndroid Build Coastguard Worker        ([#8239](https://github.com/google/ExoPlayer/issues/8239)).
1265*30877f79SAndroid Build Coastguard Worker    *   Fix passing an ads response to the `ImaAdsLoader` builder.
1266*30877f79SAndroid Build Coastguard Worker    *   Set the overlay language based on the device locale by default.
1267*30877f79SAndroid Build Coastguard Worker*   Cronet extension:
1268*30877f79SAndroid Build Coastguard Worker    *   Fix handling of HTTP status code 200 when making unbounded length range
1269*30877f79SAndroid Build Coastguard Worker        requests ([#8090](https://github.com/google/ExoPlayer/issues/8090)).
1270*30877f79SAndroid Build Coastguard Worker*   Text
1271*30877f79SAndroid Build Coastguard Worker    *   Allow tx3g subtitles with `styl` boxes with start and/or end offsets
1272*30877f79SAndroid Build Coastguard Worker        that lie outside the length of the cue text.
1273*30877f79SAndroid Build Coastguard Worker*   Media2 extension:
1274*30877f79SAndroid Build Coastguard Worker    *   Notify onBufferingEnded when the state of origin player becomes
1275*30877f79SAndroid Build Coastguard Worker        `STATE_IDLE` or `STATE_ENDED`.
1276*30877f79SAndroid Build Coastguard Worker    *   Allow to remove all playlist items that makes the player reset
1277*30877f79SAndroid Build Coastguard Worker        ([#8047](https://github.com/google/ExoPlayer/issues/8047)).
1278*30877f79SAndroid Build Coastguard Worker
1279*30877f79SAndroid Build Coastguard Worker### 2.12.1 (2020-10-23)
1280*30877f79SAndroid Build Coastguard Worker
1281*30877f79SAndroid Build Coastguard Worker*   Core library:
1282*30877f79SAndroid Build Coastguard Worker    *   Fix issue where `Player.setMediaItems` would ignore its `resetPosition`
1283*30877f79SAndroid Build Coastguard Worker        argument ([#8024](https://github.com/google/ExoPlayer/issues/8024)).
1284*30877f79SAndroid Build Coastguard Worker    *   Fix bug where streams with highly uneven track durations may get stuck
1285*30877f79SAndroid Build Coastguard Worker        in a buffering state
1286*30877f79SAndroid Build Coastguard Worker        ([#7943](https://github.com/google/ExoPlayer/issues/7943)).
1287*30877f79SAndroid Build Coastguard Worker    *   Switch Guava dependency from `implementation` to `api`
1288*30877f79SAndroid Build Coastguard Worker        ([#7905](https://github.com/google/ExoPlayer/issues/7905),
1289*30877f79SAndroid Build Coastguard Worker        [#7993](https://github.com/google/ExoPlayer/issues/7993)).
1290*30877f79SAndroid Build Coastguard Worker    *   Add 403, 500 and 503 to the list of HTTP status codes that can trigger
1291*30877f79SAndroid Build Coastguard Worker        failover to another quality variant during adaptive playbacks.
1292*30877f79SAndroid Build Coastguard Worker*   Data sources:
1293*30877f79SAndroid Build Coastguard Worker    *   Add support for `android.resource` URI scheme in `RawResourceDataSource`
1294*30877f79SAndroid Build Coastguard Worker        ([#7866](https://github.com/google/ExoPlayer/issues/7866)).
1295*30877f79SAndroid Build Coastguard Worker*   Text:
1296*30877f79SAndroid Build Coastguard Worker    *   Add support for `\h` SSA/ASS style override code (non-breaking space).
1297*30877f79SAndroid Build Coastguard Worker    *   Fix playback of WebVTT subtitles in MP4 containers in DASH streams
1298*30877f79SAndroid Build Coastguard Worker        ([#7985](https://github.com/google/ExoPlayer/issues/7985)).
1299*30877f79SAndroid Build Coastguard Worker    *   Fix `NullPointerException` in `TextRenderer` when playing content with a
1300*30877f79SAndroid Build Coastguard Worker        single subtitle buffer
1301*30877f79SAndroid Build Coastguard Worker        ([#8017](https://github.com/google/ExoPlayer/issues/8017)).
1302*30877f79SAndroid Build Coastguard Worker*   UI:
1303*30877f79SAndroid Build Coastguard Worker    *   Fix animation when `StyledPlayerView` first shows its playback controls.
1304*30877f79SAndroid Build Coastguard Worker    *   Improve touch targets in `StyledPlayerView` to make tapping easier.
1305*30877f79SAndroid Build Coastguard Worker    *   Allow `subtitleButton` to be omitted in custom `StyledPlayerView`
1306*30877f79SAndroid Build Coastguard Worker        layouts ([#7962](https://github.com/google/ExoPlayer/issues/7962)).
1307*30877f79SAndroid Build Coastguard Worker    *   Add an option to sort tracks by `Format` in `TrackSelectionView` and
1308*30877f79SAndroid Build Coastguard Worker        `TrackSelectionDialogBuilder`
1309*30877f79SAndroid Build Coastguard Worker        ([#7709](https://github.com/google/ExoPlayer/issues/7709)).
1310*30877f79SAndroid Build Coastguard Worker*   Audio:
1311*30877f79SAndroid Build Coastguard Worker    *   Fix the default audio sink position not advancing correctly when using
1312*30877f79SAndroid Build Coastguard Worker        `AudioTrack` based speed adjustment
1313*30877f79SAndroid Build Coastguard Worker        ([#7982](https://github.com/google/ExoPlayer/issues/7982)).
1314*30877f79SAndroid Build Coastguard Worker    *   Fix `NoClassDefFoundError` warning for `AudioTrack$StreamEventCallback`
1315*30877f79SAndroid Build Coastguard Worker        ([#8058](https://github.com/google/ExoPlayer/issues/8058)).
1316*30877f79SAndroid Build Coastguard Worker*   Extractors:
1317*30877f79SAndroid Build Coastguard Worker    *   MP4:
1318*30877f79SAndroid Build Coastguard Worker        *   Add support for `_mp2` boxes
1319*30877f79SAndroid Build Coastguard Worker            ([#7967](https://github.com/google/ExoPlayer/issues/7967)).
1320*30877f79SAndroid Build Coastguard Worker        *   Fix playback of files containing `pcm_alaw` or `pcm_mulaw` audio
1321*30877f79SAndroid Build Coastguard Worker            tracks, by enabling sample rechunking for such tracks.
1322*30877f79SAndroid Build Coastguard Worker    *   MPEG-TS:
1323*30877f79SAndroid Build Coastguard Worker        *   Add `TsExtractor` parameter to configure the number of bytes in
1324*30877f79SAndroid Build Coastguard Worker            which to search for timestamps when seeking and determining stream
1325*30877f79SAndroid Build Coastguard Worker            duration ([#7988](https://github.com/google/ExoPlayer/issues/7988)).
1326*30877f79SAndroid Build Coastguard Worker        *   Ignore negative payload size in PES packets
1327*30877f79SAndroid Build Coastguard Worker            ([#8005](https://github.com/google/ExoPlayer/issues/8005)).
1328*30877f79SAndroid Build Coastguard Worker    *   MP3: Use TLEN ID3 tag to compute the stream duration
1329*30877f79SAndroid Build Coastguard Worker        ([#7949](https://github.com/google/ExoPlayer/issues/7949)).
1330*30877f79SAndroid Build Coastguard Worker    *   Ogg: Fix regression playing files with packets that span multiple pages
1331*30877f79SAndroid Build Coastguard Worker        ([#7992](https://github.com/google/ExoPlayer/issues/7992)).
1332*30877f79SAndroid Build Coastguard Worker    *   FLV: Make files seekable by using the key frame index
1333*30877f79SAndroid Build Coastguard Worker        ([#7378](https://github.com/google/ExoPlayer/issues/7378)).
1334*30877f79SAndroid Build Coastguard Worker*   Downloads: Fix issue retrying progressive downloads, which could also result
1335*30877f79SAndroid Build Coastguard Worker    in a crash in `DownloadManager.InternalHandler.onContentLengthChanged`
1336*30877f79SAndroid Build Coastguard Worker    ([#8078](https://github.com/google/ExoPlayer/issues/8078)).
1337*30877f79SAndroid Build Coastguard Worker*   HLS: Fix crash affecting chunkful preparation of master playlists that start
1338*30877f79SAndroid Build Coastguard Worker    with an I-FRAME only variant
1339*30877f79SAndroid Build Coastguard Worker    ([#8025](https://github.com/google/ExoPlayer/issues/8025)).
1340*30877f79SAndroid Build Coastguard Worker*   IMA extension:
1341*30877f79SAndroid Build Coastguard Worker    *   Fix position reporting after fetch errors
1342*30877f79SAndroid Build Coastguard Worker        ([#7956](https://github.com/google/ExoPlayer/issues/7956)).
1343*30877f79SAndroid Build Coastguard Worker    *   Allow apps to specify a `VideoAdPlayerCallback`
1344*30877f79SAndroid Build Coastguard Worker        ([#7944](https://github.com/google/ExoPlayer/issues/7944)).
1345*30877f79SAndroid Build Coastguard Worker    *   Accept ad tags via the `AdsMediaSource` constructor and deprecate
1346*30877f79SAndroid Build Coastguard Worker        passing them via the `ImaAdsLoader` constructor/builders. Passing the ad
1347*30877f79SAndroid Build Coastguard Worker        tag via media item playback properties continues to be supported. This
1348*30877f79SAndroid Build Coastguard Worker        is in preparation for supporting ads in playlists
1349*30877f79SAndroid Build Coastguard Worker        ([#3750](https://github.com/google/ExoPlayer/issues/3750)).
1350*30877f79SAndroid Build Coastguard Worker    *   Add a way to override ad media MIME types
1351*30877f79SAndroid Build Coastguard Worker        ([#7961](https://github.com/google/ExoPlayer/issues/7961)).
1352*30877f79SAndroid Build Coastguard Worker    *   Fix incorrect truncation of large cue point positions
1353*30877f79SAndroid Build Coastguard Worker        ([#8067](https://github.com/google/ExoPlayer/issues/8067)).
1354*30877f79SAndroid Build Coastguard Worker    *   Upgrade IMA SDK dependency to 3.20.1. This brings in a fix for companion
1355*30877f79SAndroid Build Coastguard Worker        ads rendering when targeting API 29
1356*30877f79SAndroid Build Coastguard Worker        ([#6432](https://github.com/google/ExoPlayer/issues/6432)).
1357*30877f79SAndroid Build Coastguard Worker
1358*30877f79SAndroid Build Coastguard Worker### 2.12.0 (2020-09-11)
1359*30877f79SAndroid Build Coastguard Worker
1360*30877f79SAndroid Build Coastguard WorkerTo learn more about what's new in 2.12, read the corresponding
1361*30877f79SAndroid Build Coastguard Worker[blog post](https://medium.com/google-exoplayer/exoplayer-2-12-whats-new-e43ef8ff72e7).
1362*30877f79SAndroid Build Coastguard Worker
1363*30877f79SAndroid Build Coastguard Worker*   Core library:
1364*30877f79SAndroid Build Coastguard Worker    *   `Player`:
1365*30877f79SAndroid Build Coastguard Worker        *   Add a top level playlist API based on a new `MediaItem` class
1366*30877f79SAndroid Build Coastguard Worker            ([#6161](https://github.com/google/ExoPlayer/issues/6161)). The new
1367*30877f79SAndroid Build Coastguard Worker            methods for playlist manipulation are `setMediaItem(s)`,
1368*30877f79SAndroid Build Coastguard Worker            `addMediaItem(s)`, `moveMediaItem(s)`, `removeMediaItem(s)` and
1369*30877f79SAndroid Build Coastguard Worker            `clearMediaItems`. The playlist can be queried using
1370*30877f79SAndroid Build Coastguard Worker            `getMediaItemCount` and `getMediaItemAt`. This API should be used
1371*30877f79SAndroid Build Coastguard Worker            instead of `ConcatenatingMediaSource` in most cases. Learn more by
1372*30877f79SAndroid Build Coastguard Worker            reading
1373*30877f79SAndroid Build Coastguard Worker            [this blog post](https://medium.com/google-exoplayer/a-top-level-playlist-api-for-exoplayer-abe0a24edb55).
1374*30877f79SAndroid Build Coastguard Worker        *   Add `getCurrentMediaItem` for getting the currently playing item in
1375*30877f79SAndroid Build Coastguard Worker            the playlist.
1376*30877f79SAndroid Build Coastguard Worker        *   Add `EventListener.onMediaItemTransition` to report when playback
1377*30877f79SAndroid Build Coastguard Worker            transitions from one item to another in the playlist.
1378*30877f79SAndroid Build Coastguard Worker        *   Add `play` and `pause` convenience methods. They are equivalent to
1379*30877f79SAndroid Build Coastguard Worker            `setPlayWhenReady(true)` and `setPlayWhenReady(false)` respectively.
1380*30877f79SAndroid Build Coastguard Worker        *   Add `getCurrentLiveOffset` for getting the offset of the current
1381*30877f79SAndroid Build Coastguard Worker            playback position from the live edge of a live stream.
1382*30877f79SAndroid Build Coastguard Worker        *   Add `getTrackSelector` for getting the `TrackSelector` used by the
1383*30877f79SAndroid Build Coastguard Worker            player.
1384*30877f79SAndroid Build Coastguard Worker        *   Add `AudioComponent.setAudioSessionId` to set the audio session ID.
1385*30877f79SAndroid Build Coastguard Worker            This method is also available on `SimpleExoPlayer`.
1386*30877f79SAndroid Build Coastguard Worker        *   Remove `PlaybackParameters.skipSilence`, and replace it with
1387*30877f79SAndroid Build Coastguard Worker            `AudioComponent.setSkipSilenceEnabled`. This method is also
1388*30877f79SAndroid Build Coastguard Worker            available on `SimpleExoPlayer`. An
1389*30877f79SAndroid Build Coastguard Worker            `AudioListener.onSkipSilenceEnabledChanged` callback is also added.
1390*30877f79SAndroid Build Coastguard Worker        *   Add `TextComponent.getCurrentCues` to get the current cues. This
1391*30877f79SAndroid Build Coastguard Worker            method is also available on `SimpleExoPlayer`. The current cues are
1392*30877f79SAndroid Build Coastguard Worker            no longer automatically forwarded to a `TextOutput` when it's added
1393*30877f79SAndroid Build Coastguard Worker            to a `SimpleExoPlayer`.
1394*30877f79SAndroid Build Coastguard Worker        *   Add `Player.DeviceComponent` to query and control the device volume.
1395*30877f79SAndroid Build Coastguard Worker            `SimpleExoPlayer` implements this interface.
1396*30877f79SAndroid Build Coastguard Worker        *   Deprecate and rename `getPlaybackError` to `getPlayerError` for
1397*30877f79SAndroid Build Coastguard Worker            consistency.
1398*30877f79SAndroid Build Coastguard Worker        *   Deprecate and rename `onLoadingChanged` to `onIsLoadingChanged` for
1399*30877f79SAndroid Build Coastguard Worker            consistency.
1400*30877f79SAndroid Build Coastguard Worker        *   Deprecate `EventListener.onPlayerStateChanged`, replacing it with
1401*30877f79SAndroid Build Coastguard Worker            `EventListener.onPlayWhenReadyChanged` and
1402*30877f79SAndroid Build Coastguard Worker            `EventListener.onPlaybackStateChanged`.
1403*30877f79SAndroid Build Coastguard Worker        *   Deprecate `EventListener.onSeekProcessed` because seek changes now
1404*30877f79SAndroid Build Coastguard Worker            happen instantly and listening to `onPositionDiscontinuity` is
1405*30877f79SAndroid Build Coastguard Worker            sufficient.
1406*30877f79SAndroid Build Coastguard Worker    *   `ExoPlayer`:
1407*30877f79SAndroid Build Coastguard Worker        *   Add `setMediaSource(s)` and `addMediaSource(s)` to `ExoPlayer`, for
1408*30877f79SAndroid Build Coastguard Worker            adding `MediaSource` instances directly to the playlist.
1409*30877f79SAndroid Build Coastguard Worker        *   Add `ExoPlayer.setPauseAtEndOfMediaItems` to let the player pause at
1410*30877f79SAndroid Build Coastguard Worker            the end of each media item
1411*30877f79SAndroid Build Coastguard Worker            ([#5660](https://github.com/google/ExoPlayer/issues/5660)).
1412*30877f79SAndroid Build Coastguard Worker        *   Allow passing `C.TIME_END_OF_SOURCE` to `PlayerMessage.setPosition`
1413*30877f79SAndroid Build Coastguard Worker            to send a `PlayerMessage` at the end of a stream.
1414*30877f79SAndroid Build Coastguard Worker    *   `SimpleExoPlayer`:
1415*30877f79SAndroid Build Coastguard Worker        *   `SimpleExoPlayer` implements the new `MediaItem` based playlist API,
1416*30877f79SAndroid Build Coastguard Worker            using a `MediaSourceFactory` to convert `MediaItem` instances to
1417*30877f79SAndroid Build Coastguard Worker            playable `MediaSource` instances. A `DefaultMediaSourceFactory` is
1418*30877f79SAndroid Build Coastguard Worker            used by default. `Builder.setMediaSourceFactory` allows setting a
1419*30877f79SAndroid Build Coastguard Worker            custom factory.
1420*30877f79SAndroid Build Coastguard Worker        *   Update [APK shrinking guide](https://exoplayer.dev/shrinking.html)
1421*30877f79SAndroid Build Coastguard Worker            to explain how shrinking works with the new `MediaItem` and
1422*30877f79SAndroid Build Coastguard Worker            `DefaultMediaSourceFactory` implementations
1423*30877f79SAndroid Build Coastguard Worker            ([#7937](https://github.com/google/ExoPlayer/issues/7937)).
1424*30877f79SAndroid Build Coastguard Worker        *   Add additional options to `Builder` that were previously only
1425*30877f79SAndroid Build Coastguard Worker            accessible via setters.
1426*30877f79SAndroid Build Coastguard Worker        *   Add opt-in to verify correct thread usage with
1427*30877f79SAndroid Build Coastguard Worker            `setThrowsWhenUsingWrongThread(true)`
1428*30877f79SAndroid Build Coastguard Worker            ([#4463](https://github.com/google/ExoPlayer/issues/4463)).
1429*30877f79SAndroid Build Coastguard Worker    *   `Format`:
1430*30877f79SAndroid Build Coastguard Worker        *   Add a `Builder` and deprecate all `create` methods and most
1431*30877f79SAndroid Build Coastguard Worker            `Format.copyWith` methods.
1432*30877f79SAndroid Build Coastguard Worker        *   Split `bitrate` into `averageBitrate` and `peakBitrate`
1433*30877f79SAndroid Build Coastguard Worker            ([#2863](https://github.com/google/ExoPlayer/issues/2863)).
1434*30877f79SAndroid Build Coastguard Worker    *   `LoadControl`:
1435*30877f79SAndroid Build Coastguard Worker        *   Add a `playbackPositionUs` parameter to `shouldContinueLoading`.
1436*30877f79SAndroid Build Coastguard Worker        *   Set the default minimum buffer duration in `DefaultLoadControl` to
1437*30877f79SAndroid Build Coastguard Worker            50 seconds (equal to the default maximum buffer), and treat audio
1438*30877f79SAndroid Build Coastguard Worker            and video the same.
1439*30877f79SAndroid Build Coastguard Worker    *   Add a `MetadataRetriever` API for retrieving track information and
1440*30877f79SAndroid Build Coastguard Worker        static metadata for a media item
1441*30877f79SAndroid Build Coastguard Worker        ([#3609](https://github.com/google/ExoPlayer/issues/3609)).
1442*30877f79SAndroid Build Coastguard Worker    *   Attach an identifier and extra information to load error events passed
1443*30877f79SAndroid Build Coastguard Worker        to `LoadErrorHandlingPolicy`
1444*30877f79SAndroid Build Coastguard Worker        ([#7309](https://github.com/google/ExoPlayer/issues/7309)).
1445*30877f79SAndroid Build Coastguard Worker        `LoadErrorHandlingPolicy` implementations should migrate to implementing
1446*30877f79SAndroid Build Coastguard Worker        the non-deprecated methods of the interface.
1447*30877f79SAndroid Build Coastguard Worker    *   Add an option to `MergingMediaSource` to adjust the time offsets between
1448*30877f79SAndroid Build Coastguard Worker        the merged sources
1449*30877f79SAndroid Build Coastguard Worker        ([#6103](https://github.com/google/ExoPlayer/issues/6103)).
1450*30877f79SAndroid Build Coastguard Worker    *   Move `MediaSourceEventListener.LoadEventInfo` and
1451*30877f79SAndroid Build Coastguard Worker        `MediaSourceEventListener.MediaLoadData` to be top-level classes in
1452*30877f79SAndroid Build Coastguard Worker        `com.google.android.exoplayer2.source`.
1453*30877f79SAndroid Build Coastguard Worker    *   Move `SimpleDecoderVideoRenderer` and `SimpleDecoderAudioRenderer` to
1454*30877f79SAndroid Build Coastguard Worker        `DecoderVideoRenderer` and `DecoderAudioRenderer` respectively, and
1455*30877f79SAndroid Build Coastguard Worker        generalize them to work with `Decoder` rather than `SimpleDecoder`.
1456*30877f79SAndroid Build Coastguard Worker    *   Deprecate `C.MSG_*` constants, replacing them with constants in
1457*30877f79SAndroid Build Coastguard Worker        `Renderer`.
1458*30877f79SAndroid Build Coastguard Worker    *   Split the `library-core` module into `library-core`, `library-common`
1459*30877f79SAndroid Build Coastguard Worker        and `library-extractor`. The `library-core` module has an API dependency
1460*30877f79SAndroid Build Coastguard Worker        on both of the new modules, so this change should be transparent to
1461*30877f79SAndroid Build Coastguard Worker        developers including ExoPlayer using Gradle dependencies.
1462*30877f79SAndroid Build Coastguard Worker    *   Add a dependency on Guava.
1463*30877f79SAndroid Build Coastguard Worker*   Video:
1464*30877f79SAndroid Build Coastguard Worker    *   Pass frame rate hint to `Surface.setFrameRate` on Android 11.
1465*30877f79SAndroid Build Coastguard Worker    *   Fix incorrect aspect ratio when transitioning from one video to another
1466*30877f79SAndroid Build Coastguard Worker        with the same resolution, but a different pixel aspect ratio
1467*30877f79SAndroid Build Coastguard Worker        ([#6646](https://github.com/google/ExoPlayer/issues/6646)).
1468*30877f79SAndroid Build Coastguard Worker*   Audio:
1469*30877f79SAndroid Build Coastguard Worker    *   Add experimental support for power efficient playback using audio
1470*30877f79SAndroid Build Coastguard Worker        offload.
1471*30877f79SAndroid Build Coastguard Worker    *   Add support for using framework audio speed adjustment instead of
1472*30877f79SAndroid Build Coastguard Worker        ExoPlayer's implementation
1473*30877f79SAndroid Build Coastguard Worker        ([#7502](https://github.com/google/ExoPlayer/issues/7502)). This option
1474*30877f79SAndroid Build Coastguard Worker        can be set using
1475*30877f79SAndroid Build Coastguard Worker        `DefaultRenderersFactory.setEnableAudioTrackPlaybackParams`.
1476*30877f79SAndroid Build Coastguard Worker    *   Add an event for the audio position starting to advance, to make it
1477*30877f79SAndroid Build Coastguard Worker        easier for apps to determine when audio playout started
1478*30877f79SAndroid Build Coastguard Worker        ([#7577](https://github.com/google/ExoPlayer/issues/7577)).
1479*30877f79SAndroid Build Coastguard Worker    *   Generalize support for floating point audio.
1480*30877f79SAndroid Build Coastguard Worker        *   Add an option to `DefaultAudioSink` for enabling floating point
1481*30877f79SAndroid Build Coastguard Worker            output. This option can also be set using
1482*30877f79SAndroid Build Coastguard Worker            `DefaultRenderersFactory.setEnableAudioFloatOutput`.
1483*30877f79SAndroid Build Coastguard Worker        *   Add floating point output capability to `MediaCodecAudioRenderer`
1484*30877f79SAndroid Build Coastguard Worker            and `LibopusAudioRenderer`, which is enabled automatically if the
1485*30877f79SAndroid Build Coastguard Worker            audio sink supports floating point output and if it makes sense for
1486*30877f79SAndroid Build Coastguard Worker            the content being played.
1487*30877f79SAndroid Build Coastguard Worker        *   Enable the floating point output capability of `FfmpegAudioRenderer`
1488*30877f79SAndroid Build Coastguard Worker            automatically if the audio sink supports floating point output and
1489*30877f79SAndroid Build Coastguard Worker            if it makes sense for the content being played. The option to
1490*30877f79SAndroid Build Coastguard Worker            manually enable floating point output has been removed, since this
1491*30877f79SAndroid Build Coastguard Worker            now done with the generalized option on `DefaultAudioSink`.
1492*30877f79SAndroid Build Coastguard Worker    *   In `MediaCodecAudioRenderer`, stop passing audio samples through
1493*30877f79SAndroid Build Coastguard Worker        `MediaCodec` when playing PCM audio or encoded audio using passthrough
1494*30877f79SAndroid Build Coastguard Worker        mode.
1495*30877f79SAndroid Build Coastguard Worker    *   Reuse audio decoders when transitioning through playlists of gapless
1496*30877f79SAndroid Build Coastguard Worker        audio, rather than reinstantiating them.
1497*30877f79SAndroid Build Coastguard Worker    *   Check `DefaultAudioSink` supports passthrough, in addition to checking
1498*30877f79SAndroid Build Coastguard Worker        the `AudioCapabilities`
1499*30877f79SAndroid Build Coastguard Worker        ([#7404](https://github.com/google/ExoPlayer/issues/7404)).
1500*30877f79SAndroid Build Coastguard Worker*   Text:
1501*30877f79SAndroid Build Coastguard Worker    *   Many of the changes described below improve support for Japanese
1502*30877f79SAndroid Build Coastguard Worker        subtitles. Read
1503*30877f79SAndroid Build Coastguard Worker        [this blog post](https://medium.com/google-exoplayer/improved-japanese-subtitle-support-7598fee12cf4)
1504*30877f79SAndroid Build Coastguard Worker        to learn more.
1505*30877f79SAndroid Build Coastguard Worker    *   Add a WebView-based output option to `SubtitleView`. This can display
1506*30877f79SAndroid Build Coastguard Worker        some features not supported by the existing Canvas-based output such as
1507*30877f79SAndroid Build Coastguard Worker        vertical text and rubies. It can be enabled by calling
1508*30877f79SAndroid Build Coastguard Worker        `SubtitleView#setViewType(VIEW_TYPE_WEB)`.
1509*30877f79SAndroid Build Coastguard Worker    *   Recreate the decoder when handling and swallowing decode errors in
1510*30877f79SAndroid Build Coastguard Worker        `TextRenderer`. This fixes a case where playback would never end when
1511*30877f79SAndroid Build Coastguard Worker        playing content with malformed subtitles
1512*30877f79SAndroid Build Coastguard Worker        ([#7590](https://github.com/google/ExoPlayer/issues/7590)).
1513*30877f79SAndroid Build Coastguard Worker    *   Only apply `CaptionManager` font scaling in
1514*30877f79SAndroid Build Coastguard Worker        `SubtitleView.setUserDefaultTextSize` if the `CaptionManager` is
1515*30877f79SAndroid Build Coastguard Worker        enabled.
1516*30877f79SAndroid Build Coastguard Worker    *   Improve positioning of vertical cues when rendered horizontally.
1517*30877f79SAndroid Build Coastguard Worker    *   Redefine `Cue.lineType=LINE_TYPE_NUMBER` in terms of aligning the cue
1518*30877f79SAndroid Build Coastguard Worker        text lines to grid of viewport lines. Only consider `Cue.lineAnchor`
1519*30877f79SAndroid Build Coastguard Worker        when `Cue.lineType=LINE_TYPE_FRACTION`.
1520*30877f79SAndroid Build Coastguard Worker    *   WebVTT:
1521*30877f79SAndroid Build Coastguard Worker        *   Add support for default
1522*30877f79SAndroid Build Coastguard Worker            [text](https://www.w3.org/TR/webvtt1/#default-text-color) and
1523*30877f79SAndroid Build Coastguard Worker            [background](https://www.w3.org/TR/webvtt1/#default-text-background)
1524*30877f79SAndroid Build Coastguard Worker            colors ([#6581](https://github.com/google/ExoPlayer/issues/6581)).
1525*30877f79SAndroid Build Coastguard Worker        *   Update position alignment parsing to recognise `line-left`, `center`
1526*30877f79SAndroid Build Coastguard Worker            and `line-right`.
1527*30877f79SAndroid Build Coastguard Worker        *   Implement steps 4-10 of the
1528*30877f79SAndroid Build Coastguard Worker            [WebVTT line computation algorithm](https://www.w3.org/TR/webvtt1/#cue-computed-line).
1529*30877f79SAndroid Build Coastguard Worker        *   Stop parsing unsupported CSS properties. The spec provides an
1530*30877f79SAndroid Build Coastguard Worker            [exhaustive list](https://www.w3.org/TR/webvtt1/#the-cue-pseudo-element)
1531*30877f79SAndroid Build Coastguard Worker            of which properties are supported.
1532*30877f79SAndroid Build Coastguard Worker        *   Parse the `ruby-position` CSS property.
1533*30877f79SAndroid Build Coastguard Worker        *   Parse the `text-combine-upright` CSS property (i.e., tate-chu-yoko).
1534*30877f79SAndroid Build Coastguard Worker        *   Parse the `<ruby>` and `<rt>` tags.
1535*30877f79SAndroid Build Coastguard Worker    *   TTML:
1536*30877f79SAndroid Build Coastguard Worker        *   Parse the `tts:combineText` property (i.e., tate-chu-yoko).
1537*30877f79SAndroid Build Coastguard Worker        *   Parse t`tts:ruby` and `tts:rubyPosition` properties.
1538*30877f79SAndroid Build Coastguard Worker    *   CEA-608:
1539*30877f79SAndroid Build Coastguard Worker        *   Implement timing-out of stuck captions, as permitted by
1540*30877f79SAndroid Build Coastguard Worker            ANSI/CTA-608-E R-2014 Annex C.9. The default timeout is set to 16
1541*30877f79SAndroid Build Coastguard Worker            seconds ([#7181](https://github.com/google/ExoPlayer/issues/7181)).
1542*30877f79SAndroid Build Coastguard Worker        *   Trim lines that exceed the maximum length of 32 characters
1543*30877f79SAndroid Build Coastguard Worker            ([#7341](https://github.com/google/ExoPlayer/issues/7341)).
1544*30877f79SAndroid Build Coastguard Worker        *   Fix positioning of roll-up captions in the top half of the screen
1545*30877f79SAndroid Build Coastguard Worker            ([#7475](https://github.com/google/ExoPlayer/issues/7475)).
1546*30877f79SAndroid Build Coastguard Worker        *   Stop automatically generating a CEA-608 track when playing
1547*30877f79SAndroid Build Coastguard Worker            standalone MPEG-TS files. The previous behavior can still be
1548*30877f79SAndroid Build Coastguard Worker            obtained by manually injecting a customized
1549*30877f79SAndroid Build Coastguard Worker            `DefaultTsPayloadReaderFactory` into `TsExtractor`.
1550*30877f79SAndroid Build Coastguard Worker*   Metadata: Add minimal DVB Application Information Table (AIT) support.
1551*30877f79SAndroid Build Coastguard Worker*   DASH:
1552*30877f79SAndroid Build Coastguard Worker    *   Add support for canceling in-progress segment fetches
1553*30877f79SAndroid Build Coastguard Worker        ([#2848](https://github.com/google/ExoPlayer/issues/2848)).
1554*30877f79SAndroid Build Coastguard Worker    *   Add support for CEA-708 embedded in FMP4.
1555*30877f79SAndroid Build Coastguard Worker*   SmoothStreaming:
1556*30877f79SAndroid Build Coastguard Worker    *   Add support for canceling in-progress segment fetches
1557*30877f79SAndroid Build Coastguard Worker        ([#2848](https://github.com/google/ExoPlayer/issues/2848)).
1558*30877f79SAndroid Build Coastguard Worker*   HLS:
1559*30877f79SAndroid Build Coastguard Worker    *   Add support for discarding buffered media (e.g., to allow faster
1560*30877f79SAndroid Build Coastguard Worker        adaptation to a higher quality variant)
1561*30877f79SAndroid Build Coastguard Worker        ([#6322](https://github.com/google/ExoPlayer/issues/6322)).
1562*30877f79SAndroid Build Coastguard Worker    *   Add support for canceling in-progress segment fetches
1563*30877f79SAndroid Build Coastguard Worker        ([#2848](https://github.com/google/ExoPlayer/issues/2848)).
1564*30877f79SAndroid Build Coastguard Worker    *   Respect 33-bit PTS wrapping when applying `X-TIMESTAMP-MAP` to WebVTT
1565*30877f79SAndroid Build Coastguard Worker        timestamps ([#7464](https://github.com/google/ExoPlayer/issues/7464)).
1566*30877f79SAndroid Build Coastguard Worker*   Extractors:
1567*30877f79SAndroid Build Coastguard Worker    *   Optimize the `Extractor` sniffing order to reduce start-up latency in
1568*30877f79SAndroid Build Coastguard Worker        `DefaultExtractorsFactory` and `DefaultHlsExtractorsFactory`
1569*30877f79SAndroid Build Coastguard Worker        ([#6410](https://github.com/google/ExoPlayer/issues/6410)).
1570*30877f79SAndroid Build Coastguard Worker    *   Use filename extensions and response header MIME types to further
1571*30877f79SAndroid Build Coastguard Worker        optimize `Extractor` sniffing order on a per-media basis.
1572*30877f79SAndroid Build Coastguard Worker    *   MP3: Add `IndexSeeker` for accurate seeks in VBR MP3 streams
1573*30877f79SAndroid Build Coastguard Worker        ([#6787](https://github.com/google/ExoPlayer/issues/6787)). This seeker
1574*30877f79SAndroid Build Coastguard Worker        can be enabled by passing `FLAG_ENABLE_INDEX_SEEKING` to the
1575*30877f79SAndroid Build Coastguard Worker        `Mp3Extractor`. A significant portion of the file may need to be scanned
1576*30877f79SAndroid Build Coastguard Worker        when a seek is performed, which may be costly for large files.
1577*30877f79SAndroid Build Coastguard Worker    *   MP4: Fix playback of MP4 streams that contain Opus audio.
1578*30877f79SAndroid Build Coastguard Worker    *   FMP4: Add support for partially fragmented MP4s
1579*30877f79SAndroid Build Coastguard Worker        ([#7308](https://github.com/google/ExoPlayer/issues/7308)).
1580*30877f79SAndroid Build Coastguard Worker    *   Matroska:
1581*30877f79SAndroid Build Coastguard Worker        *   Support Dolby Vision
1582*30877f79SAndroid Build Coastguard Worker            ([#7267](https://github.com/google/ExoPlayer/issues/7267)).
1583*30877f79SAndroid Build Coastguard Worker        *   Populate `Format.label` with track titles.
1584*30877f79SAndroid Build Coastguard Worker        *   Remove support for the `Invisible` block header flag.
1585*30877f79SAndroid Build Coastguard Worker    *   MPEG-TS: Add support for MPEG-4 Part 2 and H.263
1586*30877f79SAndroid Build Coastguard Worker        ([#1603](https://github.com/google/ExoPlayer/issues/1603),
1587*30877f79SAndroid Build Coastguard Worker        [#5107](https://github.com/google/ExoPlayer/issues/5107)).
1588*30877f79SAndroid Build Coastguard Worker    *   Ogg: Fix handling of non-contiguous pages
1589*30877f79SAndroid Build Coastguard Worker        ([#7230](https://github.com/google/ExoPlayer/issues/7230)).
1590*30877f79SAndroid Build Coastguard Worker*   UI:
1591*30877f79SAndroid Build Coastguard Worker    *   Add `StyledPlayerView` and `StyledPlayerControlView`, which provide a
1592*30877f79SAndroid Build Coastguard Worker        more polished user experience than `PlayerView` and `PlayerControlView`
1593*30877f79SAndroid Build Coastguard Worker        at the cost of decreased customizability.
1594*30877f79SAndroid Build Coastguard Worker    *   Remove the previously deprecated `SimpleExoPlayerView` and
1595*30877f79SAndroid Build Coastguard Worker        `PlaybackControlView` classes, along with the corresponding
1596*30877f79SAndroid Build Coastguard Worker        `exo_simple_player_view.xml` and `exo_playback_control_view.xml` layout
1597*30877f79SAndroid Build Coastguard Worker        resources. Use the equivalent `PlayerView`, `PlayerControlView`,
1598*30877f79SAndroid Build Coastguard Worker        `exo_player_view.xml` and `exo_player_control_view.xml` instead.
1599*30877f79SAndroid Build Coastguard Worker    *   Add setter methods to `PlayerView` and `PlayerControlView` to set
1600*30877f79SAndroid Build Coastguard Worker        whether the rewind, fast forward, previous and next buttons are shown
1601*30877f79SAndroid Build Coastguard Worker        ([#7410](https://github.com/google/ExoPlayer/issues/7410)).
1602*30877f79SAndroid Build Coastguard Worker    *   Update `TrackSelectionDialogBuilder` to use the AndroidX app compat
1603*30877f79SAndroid Build Coastguard Worker        `AlertDialog` rather than the platform version, if available
1604*30877f79SAndroid Build Coastguard Worker        ([#7357](https://github.com/google/ExoPlayer/issues/7357)).
1605*30877f79SAndroid Build Coastguard Worker    *   Make UI components dispatch previous, next, fast forward and rewind
1606*30877f79SAndroid Build Coastguard Worker        actions via their `ControlDispatcher`
1607*30877f79SAndroid Build Coastguard Worker        ([#6926](https://github.com/google/ExoPlayer/issues/6926)).
1608*30877f79SAndroid Build Coastguard Worker*   Downloads and caching:
1609*30877f79SAndroid Build Coastguard Worker    *   Add `DownloadRequest.Builder`.
1610*30877f79SAndroid Build Coastguard Worker    *   Add `DownloadRequest.keySetId` to make it easier to store an offline
1611*30877f79SAndroid Build Coastguard Worker        license keyset identifier alongside the other information that's
1612*30877f79SAndroid Build Coastguard Worker        persisted in `DownloadIndex`.
1613*30877f79SAndroid Build Coastguard Worker    *   Support passing an `Executor` to `DefaultDownloaderFactory` on which
1614*30877f79SAndroid Build Coastguard Worker        data downloads are performed.
1615*30877f79SAndroid Build Coastguard Worker    *   Parallelize and merge downloads in `SegmentDownloader` to improve
1616*30877f79SAndroid Build Coastguard Worker        download speeds
1617*30877f79SAndroid Build Coastguard Worker        ([#5978](https://github.com/google/ExoPlayer/issues/5978)).
1618*30877f79SAndroid Build Coastguard Worker    *   Replace `CacheDataSinkFactory` and `CacheDataSourceFactory` with
1619*30877f79SAndroid Build Coastguard Worker        `CacheDataSink.Factory` and `CacheDataSource.Factory` respectively.
1620*30877f79SAndroid Build Coastguard Worker    *   Remove `DownloadConstructorHelper` and instead use
1621*30877f79SAndroid Build Coastguard Worker        `CacheDataSource.Factory` directly.
1622*30877f79SAndroid Build Coastguard Worker    *   Add `Requirements.DEVICE_STORAGE_NOT_LOW`, which can be specified as a
1623*30877f79SAndroid Build Coastguard Worker        requirement to a `DownloadManager` for it to proceed with downloading.
1624*30877f79SAndroid Build Coastguard Worker    *   For failed downloads, propagate the `Exception` that caused the failure
1625*30877f79SAndroid Build Coastguard Worker        to `DownloadManager.Listener.onDownloadChanged`.
1626*30877f79SAndroid Build Coastguard Worker    *   Support multiple non-overlapping write locks for the same key in
1627*30877f79SAndroid Build Coastguard Worker        `SimpleCache`.
1628*30877f79SAndroid Build Coastguard Worker    *   Remove `CacheUtil`. Equivalent functionality is provided by a new
1629*30877f79SAndroid Build Coastguard Worker        `CacheWriter` class, `Cache.getCachedBytes`, `Cache.removeResource` and
1630*30877f79SAndroid Build Coastguard Worker        `CacheKeyFactory.DEFAULT`.
1631*30877f79SAndroid Build Coastguard Worker*   DRM:
1632*30877f79SAndroid Build Coastguard Worker    *   Remove previously deprecated APIs to inject `DrmSessionManager` into
1633*30877f79SAndroid Build Coastguard Worker        `Renderer` instances. `DrmSessionManager` must now be injected into
1634*30877f79SAndroid Build Coastguard Worker        `MediaSource` instances via the `MediaSource` factories.
1635*30877f79SAndroid Build Coastguard Worker    *   Add the ability to inject a custom `DefaultDrmSessionManager` into
1636*30877f79SAndroid Build Coastguard Worker        `OfflineLicenseHelper`
1637*30877f79SAndroid Build Coastguard Worker        ([#7078](https://github.com/google/ExoPlayer/issues/7078)).
1638*30877f79SAndroid Build Coastguard Worker    *   Keep DRM sessions alive for a short time before fully releasing them
1639*30877f79SAndroid Build Coastguard Worker        ([#7011](https://github.com/google/ExoPlayer/issues/7011),
1640*30877f79SAndroid Build Coastguard Worker        [#6725](https://github.com/google/ExoPlayer/issues/6725),
1641*30877f79SAndroid Build Coastguard Worker        [#7066](https://github.com/google/ExoPlayer/issues/7066)).
1642*30877f79SAndroid Build Coastguard Worker    *   Remove support for `cbc1` and `cens` encrytion schemes. Support for
1643*30877f79SAndroid Build Coastguard Worker        these schemes was removed from the Android platform from API level 30,
1644*30877f79SAndroid Build Coastguard Worker        and the range of API levels for which they are supported is too small to
1645*30877f79SAndroid Build Coastguard Worker        be useful.
1646*30877f79SAndroid Build Coastguard Worker    *   Remove generic types from DRM components.
1647*30877f79SAndroid Build Coastguard Worker    *   Rename `DefaultDrmSessionEventListener` to `DrmSessionEventListener`.
1648*30877f79SAndroid Build Coastguard Worker*   Track selection:
1649*30877f79SAndroid Build Coastguard Worker    *   Add `TrackSelection.shouldCancelMediaChunkLoad` to check whether an
1650*30877f79SAndroid Build Coastguard Worker        ongoing load should be canceled
1651*30877f79SAndroid Build Coastguard Worker        ([#2848](https://github.com/google/ExoPlayer/issues/2848)).
1652*30877f79SAndroid Build Coastguard Worker    *   Add `DefaultTrackSelector` constraints for minimum video resolution,
1653*30877f79SAndroid Build Coastguard Worker        bitrate and frame rate
1654*30877f79SAndroid Build Coastguard Worker        ([#4511](https://github.com/google/ExoPlayer/issues/4511)).
1655*30877f79SAndroid Build Coastguard Worker    *   Remove previously deprecated `DefaultTrackSelector` members.
1656*30877f79SAndroid Build Coastguard Worker*   Data sources:
1657*30877f79SAndroid Build Coastguard Worker    *   Add `HttpDataSource.InvalidResponseCodeException#responseBody` field
1658*30877f79SAndroid Build Coastguard Worker        ([#6853](https://github.com/google/ExoPlayer/issues/6853)).
1659*30877f79SAndroid Build Coastguard Worker    *   Add `DataSpec.Builder` and deprecate most `DataSpec` constructors.
1660*30877f79SAndroid Build Coastguard Worker    *   Add `DataSpec.customData` to allow applications to pass custom data
1661*30877f79SAndroid Build Coastguard Worker        through `DataSource` chains.
1662*30877f79SAndroid Build Coastguard Worker    *   Deprecate `CacheDataSinkFactory` and `CacheDataSourceFactory`, which are
1663*30877f79SAndroid Build Coastguard Worker        replaced by `CacheDataSink.Factory` and `CacheDataSource.Factory`
1664*30877f79SAndroid Build Coastguard Worker        respectively.
1665*30877f79SAndroid Build Coastguard Worker*   Analytics:
1666*30877f79SAndroid Build Coastguard Worker    *   Extend `EventTime` with more details about the current player state
1667*30877f79SAndroid Build Coastguard Worker        ([#7332](https://github.com/google/ExoPlayer/issues/7332)).
1668*30877f79SAndroid Build Coastguard Worker    *   Add `AnalyticsListener.onVideoFrameProcessingOffset` to report how early
1669*30877f79SAndroid Build Coastguard Worker        or late video frames are processed relative to them needing to be
1670*30877f79SAndroid Build Coastguard Worker        presented. Video frame processing offset fields are also added to
1671*30877f79SAndroid Build Coastguard Worker        `DecoderCounters`.
1672*30877f79SAndroid Build Coastguard Worker    *   Fix incorrect `MediaPeriodId` for some renderer errors reported by
1673*30877f79SAndroid Build Coastguard Worker        `AnalyticsListener.onPlayerError`.
1674*30877f79SAndroid Build Coastguard Worker    *   Remove `onMediaPeriodCreated`, `onMediaPeriodReleased` and
1675*30877f79SAndroid Build Coastguard Worker        `onReadingStarted` from `AnalyticsListener`.
1676*30877f79SAndroid Build Coastguard Worker*   Test utils: Add `TestExoPlayer`, a utility class with APIs to create
1677*30877f79SAndroid Build Coastguard Worker    `SimpleExoPlayer` instances with fake components for testing.
1678*30877f79SAndroid Build Coastguard Worker*   Media2 extension: This is a new extension that makes it easy to use
1679*30877f79SAndroid Build Coastguard Worker    ExoPlayer together with AndroidX Media2. Read
1680*30877f79SAndroid Build Coastguard Worker    [this blog post](https://medium.com/google-exoplayer/the-media2-extension-for-exoplayer-d6b7d89b9063)
1681*30877f79SAndroid Build Coastguard Worker    to learn more.
1682*30877f79SAndroid Build Coastguard Worker*   Cast extension: Implement playlist API and deprecate the old queue
1683*30877f79SAndroid Build Coastguard Worker    manipulation API.
1684*30877f79SAndroid Build Coastguard Worker*   IMA extension:
1685*30877f79SAndroid Build Coastguard Worker    *   Migrate to new 'friendly obstruction' IMA SDK APIs, and allow apps to
1686*30877f79SAndroid Build Coastguard Worker        register a purpose and detail reason for overlay views via
1687*30877f79SAndroid Build Coastguard Worker        `AdsLoader.AdViewProvider`.
1688*30877f79SAndroid Build Coastguard Worker    *   Add support for audio-only ads display containers by returning `null`
1689*30877f79SAndroid Build Coastguard Worker        from `AdsLoader.AdViewProvider.getAdViewGroup`, and allow skipping
1690*30877f79SAndroid Build Coastguard Worker        audio-only ads via `ImaAdsLoader.skipAd`
1691*30877f79SAndroid Build Coastguard Worker        ([#7689](https://github.com/google/ExoPlayer/issues/7689)).
1692*30877f79SAndroid Build Coastguard Worker    *   Add `ImaAdsLoader.Builder.setCompanionAdSlots` so it's possible to set
1693*30877f79SAndroid Build Coastguard Worker        companion ad slots without accessing the `AdDisplayContainer`.
1694*30877f79SAndroid Build Coastguard Worker    *   Add missing notification of `VideoAdPlayerCallback.onLoaded`.
1695*30877f79SAndroid Build Coastguard Worker    *   Fix handling of incompatible VPAID ads
1696*30877f79SAndroid Build Coastguard Worker        ([#7832](https://github.com/google/ExoPlayer/issues/7832)).
1697*30877f79SAndroid Build Coastguard Worker    *   Fix handling of empty ads at non-integer cue points
1698*30877f79SAndroid Build Coastguard Worker        ([#7889](https://github.com/google/ExoPlayer/issues/7889)).
1699*30877f79SAndroid Build Coastguard Worker*   Demo app:
1700*30877f79SAndroid Build Coastguard Worker    *   Replace the `extensions` variant with `decoderExtensions` and update the
1701*30877f79SAndroid Build Coastguard Worker        demo app use the Cronet and IMA extensions by default.
1702*30877f79SAndroid Build Coastguard Worker    *   Expand the `exolist.json` schema, as well the structure of intents that
1703*30877f79SAndroid Build Coastguard Worker        can be used to launch `PlayerActivity`. See the
1704*30877f79SAndroid Build Coastguard Worker        [Demo application page](https://exoplayer.dev/demo-application.html#playing-your-own-content)
1705*30877f79SAndroid Build Coastguard Worker        for the latest versions. Changes include:
1706*30877f79SAndroid Build Coastguard Worker        *   Add `drm_session_for_clear_content` to allow attaching DRM sessions
1707*30877f79SAndroid Build Coastguard Worker            to clear audio and video tracks.
1708*30877f79SAndroid Build Coastguard Worker        *   Add `clip_start_position_ms` and `clip_end_position_ms` to allow
1709*30877f79SAndroid Build Coastguard Worker            clipped samples.
1710*30877f79SAndroid Build Coastguard Worker    *   Use `StyledPlayerControlView` rather than `PlayerView`.
1711*30877f79SAndroid Build Coastguard Worker    *   Remove support for media tunneling, random ABR and playback of spherical
1712*30877f79SAndroid Build Coastguard Worker        video. Developers wishing to experiment with these features can enable
1713*30877f79SAndroid Build Coastguard Worker        them by modifying the demo app source code.
1714*30877f79SAndroid Build Coastguard Worker    *   Add support for downloading DRM-protected content using offline Widevine
1715*30877f79SAndroid Build Coastguard Worker        licenses.
1716*30877f79SAndroid Build Coastguard Worker
1717*30877f79SAndroid Build Coastguard Worker### 2.11.8 (2020-08-25)
1718*30877f79SAndroid Build Coastguard Worker
1719*30877f79SAndroid Build Coastguard Worker*   Fix distorted playback of floating point audio when samples exceed the `[-1,
1720*30877f79SAndroid Build Coastguard Worker    1]` nominal range.
1721*30877f79SAndroid Build Coastguard Worker*   MP4:
1722*30877f79SAndroid Build Coastguard Worker    *   Add support for `piff` and `isml` brands
1723*30877f79SAndroid Build Coastguard Worker        ([#7584](https://github.com/google/ExoPlayer/issues/7584)).
1724*30877f79SAndroid Build Coastguard Worker    *   Fix playback of very short MP4 files.
1725*30877f79SAndroid Build Coastguard Worker*   FMP4:
1726*30877f79SAndroid Build Coastguard Worker    *   Fix `saiz` and `senc` sample count checks, resolving a "length mismatch"
1727*30877f79SAndroid Build Coastguard Worker        `ParserException` when playing certain protected FMP4 streams
1728*30877f79SAndroid Build Coastguard Worker        ([#7592](https://github.com/google/ExoPlayer/issues/7592)).
1729*30877f79SAndroid Build Coastguard Worker    *   Fix handling of `traf` boxes containing multiple `sbgp` or `sgpd` boxes.
1730*30877f79SAndroid Build Coastguard Worker*   FLV: Ignore `SCRIPTDATA` segments with invalid name types, rather than
1731*30877f79SAndroid Build Coastguard Worker    failing playback ([#7675](https://github.com/google/ExoPlayer/issues/7675)).
1732*30877f79SAndroid Build Coastguard Worker*   Better infer the content type of `.ism` and `.isml` streaming URLs.
1733*30877f79SAndroid Build Coastguard Worker*   Workaround an issue on Broadcom based devices where playbacks would not
1734*30877f79SAndroid Build Coastguard Worker    transition to `STATE_ENDED` when using video tunneling mode
1735*30877f79SAndroid Build Coastguard Worker    ([#7647](https://github.com/google/ExoPlayer/issues/7647)).
1736*30877f79SAndroid Build Coastguard Worker*   IMA extension: Upgrade to IMA SDK 3.19.4, bringing in a fix for setting the
1737*30877f79SAndroid Build Coastguard Worker    media load timeout
1738*30877f79SAndroid Build Coastguard Worker    ([#7170](https://github.com/google/ExoPlayer/issues/7170)).
1739*30877f79SAndroid Build Coastguard Worker*   Demo app: Fix playback of ClearKey protected content on API level 26 and
1740*30877f79SAndroid Build Coastguard Worker    earlier ([#7735](https://github.com/google/ExoPlayer/issues/7735)).
1741*30877f79SAndroid Build Coastguard Worker
1742*30877f79SAndroid Build Coastguard Worker### 2.11.7 (2020-06-29)
1743*30877f79SAndroid Build Coastguard Worker
1744*30877f79SAndroid Build Coastguard Worker*   IMA extension: Fix the way postroll "content complete" notifications are
1745*30877f79SAndroid Build Coastguard Worker    handled to avoid repeatedly refreshing the timeline after playback ends.
1746*30877f79SAndroid Build Coastguard Worker
1747*30877f79SAndroid Build Coastguard Worker### 2.11.6 (2020-06-19)
1748*30877f79SAndroid Build Coastguard Worker
1749*30877f79SAndroid Build Coastguard Worker*   UI: Prevent `PlayerView` from temporarily hiding the video surface when
1750*30877f79SAndroid Build Coastguard Worker    seeking to an unprepared period within the current window. For example when
1751*30877f79SAndroid Build Coastguard Worker    seeking over an ad group, or to the next period in a multi-period DASH
1752*30877f79SAndroid Build Coastguard Worker    stream ([#5507](https://github.com/google/ExoPlayer/issues/5507)).
1753*30877f79SAndroid Build Coastguard Worker*   IMA extension:
1754*30877f79SAndroid Build Coastguard Worker    *   Add option to skip ads before the start position.
1755*30877f79SAndroid Build Coastguard Worker    *   Catch unexpected errors in `stopAd` to avoid a crash
1756*30877f79SAndroid Build Coastguard Worker        ([#7492](https://github.com/google/ExoPlayer/issues/7492)).
1757*30877f79SAndroid Build Coastguard Worker    *   Fix a bug that caused playback to be stuck buffering on resuming from
1758*30877f79SAndroid Build Coastguard Worker        the background after all ads had played to the end
1759*30877f79SAndroid Build Coastguard Worker        ([#7508](https://github.com/google/ExoPlayer/issues/7508)).
1760*30877f79SAndroid Build Coastguard Worker    *   Fix a bug where the number of ads in an ad group couldn't change
1761*30877f79SAndroid Build Coastguard Worker        ([#7477](https://github.com/google/ExoPlayer/issues/7477)).
1762*30877f79SAndroid Build Coastguard Worker    *   Work around unexpected `pauseAd`/`stopAd` for ads that have preloaded on
1763*30877f79SAndroid Build Coastguard Worker        seeking to another position
1764*30877f79SAndroid Build Coastguard Worker        ([#7492](https://github.com/google/ExoPlayer/issues/7492)).
1765*30877f79SAndroid Build Coastguard Worker    *   Fix incorrect rounding of ad cue points.
1766*30877f79SAndroid Build Coastguard Worker    *   Fix handling of postrolls preloading
1767*30877f79SAndroid Build Coastguard Worker        ([#7518](https://github.com/google/ExoPlayer/issues/7518)).
1768*30877f79SAndroid Build Coastguard Worker
1769*30877f79SAndroid Build Coastguard Worker### 2.11.5 (2020-06-05)
1770*30877f79SAndroid Build Coastguard Worker
1771*30877f79SAndroid Build Coastguard Worker*   Improve the smoothness of video playback immediately after starting, seeking
1772*30877f79SAndroid Build Coastguard Worker    or resuming a playback
1773*30877f79SAndroid Build Coastguard Worker    ([#6901](https://github.com/google/ExoPlayer/issues/6901)).
1774*30877f79SAndroid Build Coastguard Worker*   Add `SilenceMediaSource.Factory` to support tags.
1775*30877f79SAndroid Build Coastguard Worker*   Enable the configuration of `SilenceSkippingAudioProcessor`
1776*30877f79SAndroid Build Coastguard Worker    ([#6705](https://github.com/google/ExoPlayer/issues/6705)).
1777*30877f79SAndroid Build Coastguard Worker*   Fix bug where `PlayerMessages` throw an exception after `MediaSources` are
1778*30877f79SAndroid Build Coastguard Worker    removed from the playlist
1779*30877f79SAndroid Build Coastguard Worker    ([#7278](https://github.com/google/ExoPlayer/issues/7278)).
1780*30877f79SAndroid Build Coastguard Worker*   Fix "Not allowed to start service" `IllegalStateException` in
1781*30877f79SAndroid Build Coastguard Worker    `DownloadService`
1782*30877f79SAndroid Build Coastguard Worker    ([#7306](https://github.com/google/ExoPlayer/issues/7306)).
1783*30877f79SAndroid Build Coastguard Worker*   Fix issue in `AudioTrackPositionTracker` that could cause negative positions
1784*30877f79SAndroid Build Coastguard Worker    to be reported at the start of playback and immediately after seeking
1785*30877f79SAndroid Build Coastguard Worker    ([#7456](https://github.com/google/ExoPlayer/issues/7456)).
1786*30877f79SAndroid Build Coastguard Worker*   Fix further cases where downloads would sometimes not resume after their
1787*30877f79SAndroid Build Coastguard Worker    network requirements are met
1788*30877f79SAndroid Build Coastguard Worker    ([#7453](https://github.com/google/ExoPlayer/issues/7453)).
1789*30877f79SAndroid Build Coastguard Worker*   DASH:
1790*30877f79SAndroid Build Coastguard Worker    *   Merge trick play adaptation sets (i.e., adaptation sets marked with
1791*30877f79SAndroid Build Coastguard Worker        `http://dashif.org/guidelines/trickmode`) into the same `TrackGroup` as
1792*30877f79SAndroid Build Coastguard Worker        the main adaptation sets to which they refer. Trick play tracks are
1793*30877f79SAndroid Build Coastguard Worker        marked with the `C.ROLE_FLAG_TRICK_PLAY` flag.
1794*30877f79SAndroid Build Coastguard Worker    *   Fix assertion failure in `SampleQueue` when playing DASH streams with
1795*30877f79SAndroid Build Coastguard Worker        EMSG tracks ([#7273](https://github.com/google/ExoPlayer/issues/7273)).
1796*30877f79SAndroid Build Coastguard Worker*   MP4: Store the Android capture frame rate only in `Format.metadata`.
1797*30877f79SAndroid Build Coastguard Worker    `Format.frameRate` now stores the calculated frame rate.
1798*30877f79SAndroid Build Coastguard Worker*   FMP4: Avoid throwing an exception while parsing default sample values whose
1799*30877f79SAndroid Build Coastguard Worker    most significant bits are set
1800*30877f79SAndroid Build Coastguard Worker    ([#7207](https://github.com/google/ExoPlayer/issues/7207)).
1801*30877f79SAndroid Build Coastguard Worker*   MP3: Fix issue parsing the XING headers belonging to files larger than 2GB
1802*30877f79SAndroid Build Coastguard Worker    ([#7337](https://github.com/google/ExoPlayer/issues/7337)).
1803*30877f79SAndroid Build Coastguard Worker*   MPEG-TS: Fix issue where SEI NAL units were incorrectly dropped from H.265
1804*30877f79SAndroid Build Coastguard Worker    samples ([#7113](https://github.com/google/ExoPlayer/issues/7113)).
1805*30877f79SAndroid Build Coastguard Worker*   UI:
1806*30877f79SAndroid Build Coastguard Worker    *   Fix `DefaultTimeBar` to respect touch transformations
1807*30877f79SAndroid Build Coastguard Worker        ([#7303](https://github.com/google/ExoPlayer/issues/7303)).
1808*30877f79SAndroid Build Coastguard Worker    *   Add `showScrubber` and `hideScrubber` methods to `DefaultTimeBar`.
1809*30877f79SAndroid Build Coastguard Worker*   Text:
1810*30877f79SAndroid Build Coastguard Worker    *   Use anti-aliasing and bitmap filtering when displaying bitmap subtitles.
1811*30877f79SAndroid Build Coastguard Worker    *   Fix `SubtitlePainter` to render `EDGE_TYPE_OUTLINE` using the correct
1812*30877f79SAndroid Build Coastguard Worker        color.
1813*30877f79SAndroid Build Coastguard Worker*   IMA extension:
1814*30877f79SAndroid Build Coastguard Worker    *   Upgrade to IMA SDK version 3.19.0, and migrate to new preloading APIs
1815*30877f79SAndroid Build Coastguard Worker        ([#6429](https://github.com/google/ExoPlayer/issues/6429)). This fixes
1816*30877f79SAndroid Build Coastguard Worker        several issues involving preloading and handling of ad loading error
1817*30877f79SAndroid Build Coastguard Worker        cases: ([#4140](https://github.com/google/ExoPlayer/issues/4140),
1818*30877f79SAndroid Build Coastguard Worker        [#5006](https://github.com/google/ExoPlayer/issues/5006),
1819*30877f79SAndroid Build Coastguard Worker        [#6030](https://github.com/google/ExoPlayer/issues/6030),
1820*30877f79SAndroid Build Coastguard Worker        [#6097](https://github.com/google/ExoPlayer/issues/6097),
1821*30877f79SAndroid Build Coastguard Worker        [#6425](https://github.com/google/ExoPlayer/issues/6425),
1822*30877f79SAndroid Build Coastguard Worker        [#6967](https://github.com/google/ExoPlayer/issues/6967),
1823*30877f79SAndroid Build Coastguard Worker        [#7041](https://github.com/google/ExoPlayer/issues/7041),
1824*30877f79SAndroid Build Coastguard Worker        [#7161](https://github.com/google/ExoPlayer/issues/7161),
1825*30877f79SAndroid Build Coastguard Worker        [#7212](https://github.com/google/ExoPlayer/issues/7212),
1826*30877f79SAndroid Build Coastguard Worker        [#7340](https://github.com/google/ExoPlayer/issues/7340)).
1827*30877f79SAndroid Build Coastguard Worker    *   Add support for timing out ad preloading, to avoid playback getting
1828*30877f79SAndroid Build Coastguard Worker        stuck if an ad group unexpectedly fails to load
1829*30877f79SAndroid Build Coastguard Worker        ([#5444](https://github.com/google/ExoPlayer/issues/5444),
1830*30877f79SAndroid Build Coastguard Worker        [#5966](https://github.com/google/ExoPlayer/issues/5966),
1831*30877f79SAndroid Build Coastguard Worker        [#7002](https://github.com/google/ExoPlayer/issues/7002)).
1832*30877f79SAndroid Build Coastguard Worker    *   Fix `AdsMediaSource` child `MediaSource`s not being released.
1833*30877f79SAndroid Build Coastguard Worker*   Cronet extension: Default to using the Cronet implementation in Google Play
1834*30877f79SAndroid Build Coastguard Worker    Services rather than Cronet Embedded. This allows Cronet to be used with a
1835*30877f79SAndroid Build Coastguard Worker    negligible increase in application size, compared to approximately 8MB when
1836*30877f79SAndroid Build Coastguard Worker    embedding the library.
1837*30877f79SAndroid Build Coastguard Worker*   OkHttp extension: Upgrade OkHttp dependency to 3.12.11.
1838*30877f79SAndroid Build Coastguard Worker*   MediaSession extension:
1839*30877f79SAndroid Build Coastguard Worker    *   Only set the playback state to `BUFFERING` if `playWhenReady` is true
1840*30877f79SAndroid Build Coastguard Worker        ([#7206](https://github.com/google/ExoPlayer/issues/7206)).
1841*30877f79SAndroid Build Coastguard Worker    *   Add missing `@Nullable` annotations to `MediaSessionConnector`
1842*30877f79SAndroid Build Coastguard Worker        ([#7234](https://github.com/google/ExoPlayer/issues/7234)).
1843*30877f79SAndroid Build Coastguard Worker*   AV1 extension: Add a heuristic to determine the default number of threads
1844*30877f79SAndroid Build Coastguard Worker    used for AV1 playback using the extension.
1845*30877f79SAndroid Build Coastguard Worker
1846*30877f79SAndroid Build Coastguard Worker### 2.11.4 (2020-04-08)
1847*30877f79SAndroid Build Coastguard Worker
1848*30877f79SAndroid Build Coastguard Worker*   Add `SimpleExoPlayer.setWakeMode` to allow automatic `WifiLock` and
1849*30877f79SAndroid Build Coastguard Worker    `WakeLock` handling
1850*30877f79SAndroid Build Coastguard Worker    ([#6914](https://github.com/google/ExoPlayer/issues/6914)). To use this
1851*30877f79SAndroid Build Coastguard Worker    feature, you must add the
1852*30877f79SAndroid Build Coastguard Worker    [WAKE_LOCK](https://developer.android.com/reference/android/Manifest.permission.html#WAKE_LOCK)
1853*30877f79SAndroid Build Coastguard Worker    permission to your application's manifest file.
1854*30877f79SAndroid Build Coastguard Worker*   Text:
1855*30877f79SAndroid Build Coastguard Worker    *   Catch and log exceptions in `TextRenderer` rather than re-throwing. This
1856*30877f79SAndroid Build Coastguard Worker        allows playback to continue even if subtitle decoding fails
1857*30877f79SAndroid Build Coastguard Worker        ([#6885](https://github.com/google/ExoPlayer/issues/6885)).
1858*30877f79SAndroid Build Coastguard Worker    *   Allow missing hours and milliseconds in SubRip (.srt) timecodes
1859*30877f79SAndroid Build Coastguard Worker        ([#7122](https://github.com/google/ExoPlayer/issues/7122)).
1860*30877f79SAndroid Build Coastguard Worker*   Audio:
1861*30877f79SAndroid Build Coastguard Worker    *   Enable playback speed adjustment and silence skipping for floating point
1862*30877f79SAndroid Build Coastguard Worker        PCM audio, via resampling to 16-bit integer PCM. To output the original
1863*30877f79SAndroid Build Coastguard Worker        floating point audio without adjustment, pass `enableFloatOutput=true`
1864*30877f79SAndroid Build Coastguard Worker        to the `DefaultAudioSink` constructor
1865*30877f79SAndroid Build Coastguard Worker        ([#7134](https://github.com/google/ExoPlayer/issues/7134)).
1866*30877f79SAndroid Build Coastguard Worker    *   Workaround issue that could cause slower than realtime playback of AAC
1867*30877f79SAndroid Build Coastguard Worker        on Android 10
1868*30877f79SAndroid Build Coastguard Worker        ([#6671](https://github.com/google/ExoPlayer/issues/6671)).
1869*30877f79SAndroid Build Coastguard Worker    *   Fix case where another app spuriously holding transient audio focus
1870*30877f79SAndroid Build Coastguard Worker        could prevent ExoPlayer from acquiring audio focus for an indefinite
1871*30877f79SAndroid Build Coastguard Worker        period of time
1872*30877f79SAndroid Build Coastguard Worker        ([#7182](https://github.com/google/ExoPlayer/issues/7182)).
1873*30877f79SAndroid Build Coastguard Worker    *   Fix case where the player volume could be permanently ducked if audio
1874*30877f79SAndroid Build Coastguard Worker        focus was released whilst ducking.
1875*30877f79SAndroid Build Coastguard Worker    *   Fix playback of WAV files with trailing non-media bytes
1876*30877f79SAndroid Build Coastguard Worker        ([#7129](https://github.com/google/ExoPlayer/issues/7129)).
1877*30877f79SAndroid Build Coastguard Worker    *   Fix playback of ADTS files with mid-stream ID3 metadata.
1878*30877f79SAndroid Build Coastguard Worker*   DRM:
1879*30877f79SAndroid Build Coastguard Worker    *   Fix stuck ad playbacks with DRM protected content
1880*30877f79SAndroid Build Coastguard Worker        ([#7188](https://github.com/google/ExoPlayer/issues/7188)).
1881*30877f79SAndroid Build Coastguard Worker    *   Fix playback of Widevine protected content that only provides V1 PSSH
1882*30877f79SAndroid Build Coastguard Worker        atoms on API levels 21 and 22.
1883*30877f79SAndroid Build Coastguard Worker    *   Fix playback of PlayReady content on Fire TV Stick (Gen 2).
1884*30877f79SAndroid Build Coastguard Worker*   DASH:
1885*30877f79SAndroid Build Coastguard Worker    *   Update the manifest URI to avoid repeated HTTP redirects
1886*30877f79SAndroid Build Coastguard Worker        ([#6907](https://github.com/google/ExoPlayer/issues/6907)).
1887*30877f79SAndroid Build Coastguard Worker    *   Parse period `AssetIdentifier` elements.
1888*30877f79SAndroid Build Coastguard Worker*   HLS: Recognize IMSC subtitles
1889*30877f79SAndroid Build Coastguard Worker    ([#7185](https://github.com/google/ExoPlayer/issues/7185)).
1890*30877f79SAndroid Build Coastguard Worker*   UI: Add an option to set whether to use the orientation sensor for rotation
1891*30877f79SAndroid Build Coastguard Worker    in spherical playbacks
1892*30877f79SAndroid Build Coastguard Worker    ([#6761](https://github.com/google/ExoPlayer/issues/6761)).
1893*30877f79SAndroid Build Coastguard Worker*   Analytics: Fix `PlaybackStatsListener` behavior when not keeping history
1894*30877f79SAndroid Build Coastguard Worker    ([#7160](https://github.com/google/ExoPlayer/issues/7160)).
1895*30877f79SAndroid Build Coastguard Worker*   FFmpeg extension: Add support for `x86_64` architecture.
1896*30877f79SAndroid Build Coastguard Worker*   Opus extension: Fix parsing of negative gain values
1897*30877f79SAndroid Build Coastguard Worker    ([#7046](https://github.com/google/ExoPlayer/issues/7046)).
1898*30877f79SAndroid Build Coastguard Worker*   Cast extension: Upgrade `play-services-cast-framework` dependency to 18.1.0.
1899*30877f79SAndroid Build Coastguard Worker    This fixes an issue where `RemoteServiceException` was thrown due to
1900*30877f79SAndroid Build Coastguard Worker    `Context.startForegroundService()` not calling `Service.startForeground()`
1901*30877f79SAndroid Build Coastguard Worker    ([#7191](https://github.com/google/ExoPlayer/issues/7191)).
1902*30877f79SAndroid Build Coastguard Worker
1903*30877f79SAndroid Build Coastguard Worker### 2.11.3 (2020-02-19)
1904*30877f79SAndroid Build Coastguard Worker
1905*30877f79SAndroid Build Coastguard Worker*   SmoothStreaming: Fix regression that broke playback in 2.11.2
1906*30877f79SAndroid Build Coastguard Worker    ([#6981](https://github.com/google/ExoPlayer/issues/6981)).
1907*30877f79SAndroid Build Coastguard Worker*   DRM: Fix issue switching from protected content that uses a 16-byte
1908*30877f79SAndroid Build Coastguard Worker    initialization vector to one that uses an 8-byte initialization vector
1909*30877f79SAndroid Build Coastguard Worker    ([#6982](https://github.com/google/ExoPlayer/issues/6982)).
1910*30877f79SAndroid Build Coastguard Worker
1911*30877f79SAndroid Build Coastguard Worker### 2.11.2 (2020-02-13)
1912*30877f79SAndroid Build Coastguard Worker
1913*30877f79SAndroid Build Coastguard Worker*   Add Java FLAC extractor
1914*30877f79SAndroid Build Coastguard Worker    ([#6406](https://github.com/google/ExoPlayer/issues/6406)).
1915*30877f79SAndroid Build Coastguard Worker*   Startup latency optimization:
1916*30877f79SAndroid Build Coastguard Worker    *   Reduce startup latency for DASH and SmoothStreaming playbacks by
1917*30877f79SAndroid Build Coastguard Worker        allowing codec initialization to occur before the network connection for
1918*30877f79SAndroid Build Coastguard Worker        the first media segment has been established.
1919*30877f79SAndroid Build Coastguard Worker    *   Reduce startup latency for on-demand DASH playbacks by allowing codec
1920*30877f79SAndroid Build Coastguard Worker        initialization to occur before the sidx box has been loaded.
1921*30877f79SAndroid Build Coastguard Worker*   Downloads:
1922*30877f79SAndroid Build Coastguard Worker    *   Fix download resumption when the requirements for them to continue are
1923*30877f79SAndroid Build Coastguard Worker        met ([#6733](https://github.com/google/ExoPlayer/issues/6733),
1924*30877f79SAndroid Build Coastguard Worker        [#6798](https://github.com/google/ExoPlayer/issues/6798)).
1925*30877f79SAndroid Build Coastguard Worker    *   Fix `DownloadHelper.createMediaSource` to use `customCacheKey` when
1926*30877f79SAndroid Build Coastguard Worker        creating `ProgressiveMediaSource` instances.
1927*30877f79SAndroid Build Coastguard Worker*   DRM: Fix `NullPointerException` when playing DRM protected content
1928*30877f79SAndroid Build Coastguard Worker    ([#6951](https://github.com/google/ExoPlayer/issues/6951)).
1929*30877f79SAndroid Build Coastguard Worker*   Metadata:
1930*30877f79SAndroid Build Coastguard Worker    *   Update `IcyDecoder` to try ISO-8859-1 decoding if UTF-8 decoding fails.
1931*30877f79SAndroid Build Coastguard Worker        Also change `IcyInfo.rawMetadata` from `String` to `byte[]` to allow
1932*30877f79SAndroid Build Coastguard Worker        developers to handle data that's neither UTF-8 nor ISO-8859-1
1933*30877f79SAndroid Build Coastguard Worker        ([#6753](https://github.com/google/ExoPlayer/issues/6753)).
1934*30877f79SAndroid Build Coastguard Worker    *   Select multiple metadata tracks if multiple metadata renderers are
1935*30877f79SAndroid Build Coastguard Worker        available ([#6676](https://github.com/google/ExoPlayer/issues/6676)).
1936*30877f79SAndroid Build Coastguard Worker    *   Add support for ID3 genres added in Wimamp 5.6 (2010).
1937*30877f79SAndroid Build Coastguard Worker*   UI:
1938*30877f79SAndroid Build Coastguard Worker    *   Show ad group markers in `DefaultTimeBar` even if they are after the end
1939*30877f79SAndroid Build Coastguard Worker        of the current window
1940*30877f79SAndroid Build Coastguard Worker        ([#6552](https://github.com/google/ExoPlayer/issues/6552)).
1941*30877f79SAndroid Build Coastguard Worker    *   Don't use notification chronometer if playback speed is != 1.0
1942*30877f79SAndroid Build Coastguard Worker        ([#6816](https://github.com/google/ExoPlayer/issues/6816)).
1943*30877f79SAndroid Build Coastguard Worker*   HLS: Fix playback of DRM protected content that uses key rotation
1944*30877f79SAndroid Build Coastguard Worker    ([#6903](https://github.com/google/ExoPlayer/issues/6903)).
1945*30877f79SAndroid Build Coastguard Worker*   WAV:
1946*30877f79SAndroid Build Coastguard Worker    *   Support IMA ADPCM encoded data.
1947*30877f79SAndroid Build Coastguard Worker    *   Improve support for G.711 A-law and mu-law encoded data.
1948*30877f79SAndroid Build Coastguard Worker*   MP4: Support "twos" codec (big endian PCM)
1949*30877f79SAndroid Build Coastguard Worker    ([#5789](https://github.com/google/ExoPlayer/issues/5789)).
1950*30877f79SAndroid Build Coastguard Worker*   FMP4: Add support for encrypted AC-4 tracks.
1951*30877f79SAndroid Build Coastguard Worker*   HLS: Fix slow seeking into long MP3 segments
1952*30877f79SAndroid Build Coastguard Worker    ([#6155](https://github.com/google/ExoPlayer/issues/6155)).
1953*30877f79SAndroid Build Coastguard Worker*   Fix handling of E-AC-3 streams that contain AC-3 syncframes
1954*30877f79SAndroid Build Coastguard Worker    ([#6602](https://github.com/google/ExoPlayer/issues/6602)).
1955*30877f79SAndroid Build Coastguard Worker*   Fix playback of TrueHD streams in Matroska
1956*30877f79SAndroid Build Coastguard Worker    ([#6845](https://github.com/google/ExoPlayer/issues/6845)).
1957*30877f79SAndroid Build Coastguard Worker*   Fix MKV subtitles to disappear when intended instead of lasting until the
1958*30877f79SAndroid Build Coastguard Worker    next cue ([#6833](https://github.com/google/ExoPlayer/issues/6833)).
1959*30877f79SAndroid Build Coastguard Worker*   OkHttp extension: Upgrade OkHttp dependency to 3.12.8, which fixes a class
1960*30877f79SAndroid Build Coastguard Worker    of `SocketTimeoutException` issues when using HTTP/2
1961*30877f79SAndroid Build Coastguard Worker    ([#4078](https://github.com/google/ExoPlayer/issues/4078)).
1962*30877f79SAndroid Build Coastguard Worker*   FLAC extension: Fix handling of bit depths other than 16 in `FLACDecoder`.
1963*30877f79SAndroid Build Coastguard Worker    This issue caused FLAC streams with other bit depths to sound like white
1964*30877f79SAndroid Build Coastguard Worker    noise on earlier releases, but only when embedded in a non-FLAC container
1965*30877f79SAndroid Build Coastguard Worker    such as Matroska or MP4.
1966*30877f79SAndroid Build Coastguard Worker*   Demo apps: Add
1967*30877f79SAndroid Build Coastguard Worker    [GL demo app](https://github.com/google/ExoPlayer/tree/dev-v2/demos/gl) to
1968*30877f79SAndroid Build Coastguard Worker    show how to render video to a `GLSurfaceView` while applying a GL shader.
1969*30877f79SAndroid Build Coastguard Worker    ([#6920](https://github.com/google/ExoPlayer/issues/6920)).
1970*30877f79SAndroid Build Coastguard Worker
1971*30877f79SAndroid Build Coastguard Worker### 2.11.1 (2019-12-20)
1972*30877f79SAndroid Build Coastguard Worker
1973*30877f79SAndroid Build Coastguard Worker*   UI: Exclude `DefaultTimeBar` region from system gesture detection
1974*30877f79SAndroid Build Coastguard Worker    ([#6685](https://github.com/google/ExoPlayer/issues/6685)).
1975*30877f79SAndroid Build Coastguard Worker*   ProGuard fixes:
1976*30877f79SAndroid Build Coastguard Worker    *   Ensure `Libgav1VideoRenderer` constructor is kept for use by
1977*30877f79SAndroid Build Coastguard Worker        `DefaultRenderersFactory`
1978*30877f79SAndroid Build Coastguard Worker        ([#6773](https://github.com/google/ExoPlayer/issues/6773)).
1979*30877f79SAndroid Build Coastguard Worker    *   Ensure `VideoDecoderOutputBuffer` and its members are kept for use by
1980*30877f79SAndroid Build Coastguard Worker        video decoder extensions.
1981*30877f79SAndroid Build Coastguard Worker    *   Ensure raw resources used with `RawResourceDataSource` are kept.
1982*30877f79SAndroid Build Coastguard Worker    *   Suppress spurious warnings about the `javax.annotation` package, and
1983*30877f79SAndroid Build Coastguard Worker        restructure use of `IntDef` annotations to remove spurious warnings
1984*30877f79SAndroid Build Coastguard Worker        about `SsaStyle$SsaAlignment`
1985*30877f79SAndroid Build Coastguard Worker        ([#6771](https://github.com/google/ExoPlayer/issues/6771)).
1986*30877f79SAndroid Build Coastguard Worker*   Fix `CacheDataSource` to correctly propagate `DataSpec.httpRequestHeaders`.
1987*30877f79SAndroid Build Coastguard Worker*   Fix issue with `DefaultDownloadIndex` that could result in an
1988*30877f79SAndroid Build Coastguard Worker    `IllegalStateException` being thrown from
1989*30877f79SAndroid Build Coastguard Worker    `DefaultDownloadIndex.getDownloadForCurrentRow`
1990*30877f79SAndroid Build Coastguard Worker    ([#6785](https://github.com/google/ExoPlayer/issues/6785)).
1991*30877f79SAndroid Build Coastguard Worker*   Fix `IndexOutOfBoundsException` in `SinglePeriodTimeline.getWindow`
1992*30877f79SAndroid Build Coastguard Worker    ([#6776](https://github.com/google/ExoPlayer/issues/6776)).
1993*30877f79SAndroid Build Coastguard Worker*   Add missing `@Nullable` to `MediaCodecAudioRenderer.getMediaClock` and
1994*30877f79SAndroid Build Coastguard Worker    `SimpleDecoderAudioRenderer.getMediaClock`
1995*30877f79SAndroid Build Coastguard Worker    ([#6792](https://github.com/google/ExoPlayer/issues/6792)).
1996*30877f79SAndroid Build Coastguard Worker
1997*30877f79SAndroid Build Coastguard Worker### 2.11.0 (2019-12-11)
1998*30877f79SAndroid Build Coastguard Worker
1999*30877f79SAndroid Build Coastguard Worker*   Core library:
2000*30877f79SAndroid Build Coastguard Worker    *   Replace `ExoPlayerFactory` by `SimpleExoPlayer.Builder` and
2001*30877f79SAndroid Build Coastguard Worker        `ExoPlayer.Builder`.
2002*30877f79SAndroid Build Coastguard Worker    *   Add automatic `WakeLock` handling to `SimpleExoPlayer`, which can be
2003*30877f79SAndroid Build Coastguard Worker        enabled by calling `SimpleExoPlayer.setHandleWakeLock`
2004*30877f79SAndroid Build Coastguard Worker        ([#5846](https://github.com/google/ExoPlayer/issues/5846)). To use this
2005*30877f79SAndroid Build Coastguard Worker        feature, you must add the
2006*30877f79SAndroid Build Coastguard Worker        [WAKE_LOCK](https://developer.android.com/reference/android/Manifest.permission.html#WAKE_LOCK)
2007*30877f79SAndroid Build Coastguard Worker        permission to your application's manifest file.
2008*30877f79SAndroid Build Coastguard Worker    *   Add automatic "audio becoming noisy" handling to `SimpleExoPlayer`,
2009*30877f79SAndroid Build Coastguard Worker        which can be enabled by calling
2010*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer.setHandleAudioBecomingNoisy`.
2011*30877f79SAndroid Build Coastguard Worker    *   Wrap decoder exceptions in a new `DecoderException` class and report
2012*30877f79SAndroid Build Coastguard Worker        them as renderer errors.
2013*30877f79SAndroid Build Coastguard Worker    *   Add `Timeline.Window.isLive` to indicate that a window is a live stream
2014*30877f79SAndroid Build Coastguard Worker        ([#2668](https://github.com/google/ExoPlayer/issues/2668) and
2015*30877f79SAndroid Build Coastguard Worker        [#5973](https://github.com/google/ExoPlayer/issues/5973)).
2016*30877f79SAndroid Build Coastguard Worker    *   Add `Timeline.Window.uid` to uniquely identify window instances.
2017*30877f79SAndroid Build Coastguard Worker    *   Deprecate `setTag` parameter of `Timeline.getWindow`. Tags will always
2018*30877f79SAndroid Build Coastguard Worker        be set.
2019*30877f79SAndroid Build Coastguard Worker    *   Deprecate passing the manifest directly to
2020*30877f79SAndroid Build Coastguard Worker        `Player.EventListener.onTimelineChanged`. It can be accessed through
2021*30877f79SAndroid Build Coastguard Worker        `Timeline.Window.manifest` or `Player.getCurrentManifest()`
2022*30877f79SAndroid Build Coastguard Worker    *   Add `MediaSource.enable` and `MediaSource.disable` to improve resource
2023*30877f79SAndroid Build Coastguard Worker        management in playlists.
2024*30877f79SAndroid Build Coastguard Worker    *   Add `MediaPeriod.isLoading` to improve `Player.isLoading` state.
2025*30877f79SAndroid Build Coastguard Worker    *   Fix issue where player errors are thrown too early at playlist
2026*30877f79SAndroid Build Coastguard Worker        transitions ([#5407](https://github.com/google/ExoPlayer/issues/5407)).
2027*30877f79SAndroid Build Coastguard Worker    *   Add `Format` and renderer support flags to renderer
2028*30877f79SAndroid Build Coastguard Worker        `ExoPlaybackException`s.
2029*30877f79SAndroid Build Coastguard Worker    *   Where there are multiple platform decoders for a given MIME type, prefer
2030*30877f79SAndroid Build Coastguard Worker        to use one that advertises support for the profile and level of the
2031*30877f79SAndroid Build Coastguard Worker        media being played over one that does not, even if it does not come
2032*30877f79SAndroid Build Coastguard Worker        first in the `MediaCodecList`.
2033*30877f79SAndroid Build Coastguard Worker*   DRM:
2034*30877f79SAndroid Build Coastguard Worker    *   Inject `DrmSessionManager` into the `MediaSources` instead of
2035*30877f79SAndroid Build Coastguard Worker        `Renderers`. This allows each `MediaSource` in a
2036*30877f79SAndroid Build Coastguard Worker        `ConcatenatingMediaSource` to use a different `DrmSessionManager`
2037*30877f79SAndroid Build Coastguard Worker        ([#5619](https://github.com/google/ExoPlayer/issues/5619)).
2038*30877f79SAndroid Build Coastguard Worker    *   Add `DefaultDrmSessionManager.Builder`, and remove
2039*30877f79SAndroid Build Coastguard Worker        `DefaultDrmSessionManager` static factory methods that leaked
2040*30877f79SAndroid Build Coastguard Worker        `ExoMediaDrm` instances
2041*30877f79SAndroid Build Coastguard Worker        ([#4721](https://github.com/google/ExoPlayer/issues/4721)).
2042*30877f79SAndroid Build Coastguard Worker    *   Add support for the use of secure decoders when playing clear content
2043*30877f79SAndroid Build Coastguard Worker        ([#4867](https://github.com/google/ExoPlayer/issues/4867)). This can be
2044*30877f79SAndroid Build Coastguard Worker        enabled using `DefaultDrmSessionManager.Builder`'s
2045*30877f79SAndroid Build Coastguard Worker        `setUseDrmSessionsForClearContent` method.
2046*30877f79SAndroid Build Coastguard Worker    *   Add support for custom `LoadErrorHandlingPolicies` in key and
2047*30877f79SAndroid Build Coastguard Worker        provisioning requests
2048*30877f79SAndroid Build Coastguard Worker        ([#6334](https://github.com/google/ExoPlayer/issues/6334)). Custom
2049*30877f79SAndroid Build Coastguard Worker        policies can be passed via `DefaultDrmSessionManager.Builder`'s
2050*30877f79SAndroid Build Coastguard Worker        `setLoadErrorHandlingPolicy` method.
2051*30877f79SAndroid Build Coastguard Worker    *   Use `ExoMediaDrm.Provider` in `OfflineLicenseHelper` to avoid leaking
2052*30877f79SAndroid Build Coastguard Worker        `ExoMediaDrm` instances
2053*30877f79SAndroid Build Coastguard Worker        ([#4721](https://github.com/google/ExoPlayer/issues/4721)).
2054*30877f79SAndroid Build Coastguard Worker*   Track selection:
2055*30877f79SAndroid Build Coastguard Worker    *   Update `DefaultTrackSelector` to set a viewport constraint for the
2056*30877f79SAndroid Build Coastguard Worker        default display by default.
2057*30877f79SAndroid Build Coastguard Worker    *   Update `DefaultTrackSelector` to set text language and role flag
2058*30877f79SAndroid Build Coastguard Worker        constraints for the device's accessibility settings by default
2059*30877f79SAndroid Build Coastguard Worker        ([#5749](https://github.com/google/ExoPlayer/issues/5749)).
2060*30877f79SAndroid Build Coastguard Worker    *   Add option to set preferred text role flags using
2061*30877f79SAndroid Build Coastguard Worker        `DefaultTrackSelector.ParametersBuilder.setPreferredTextRoleFlags`.
2062*30877f79SAndroid Build Coastguard Worker*   LoadControl:
2063*30877f79SAndroid Build Coastguard Worker    *   Default `prioritizeTimeOverSizeThresholds` to false to prevent OOM
2064*30877f79SAndroid Build Coastguard Worker        errors ([#6647](https://github.com/google/ExoPlayer/issues/6647)).
2065*30877f79SAndroid Build Coastguard Worker*   Android 10:
2066*30877f79SAndroid Build Coastguard Worker    *   Set `compileSdkVersion` to 29 to enable use of Android 10 APIs.
2067*30877f79SAndroid Build Coastguard Worker    *   Expose new `isHardwareAccelerated`, `isSoftwareOnly` and `isVendor`
2068*30877f79SAndroid Build Coastguard Worker        flags in `MediaCodecInfo`
2069*30877f79SAndroid Build Coastguard Worker        ([#5839](https://github.com/google/ExoPlayer/issues/5839)).
2070*30877f79SAndroid Build Coastguard Worker    *   Add `allowedCapturePolicy` field to `AudioAttributes` to allow to
2071*30877f79SAndroid Build Coastguard Worker        configuration of the audio capture policy.
2072*30877f79SAndroid Build Coastguard Worker*   Video:
2073*30877f79SAndroid Build Coastguard Worker    *   Pass the codec output `MediaFormat` to `VideoFrameMetadataListener`.
2074*30877f79SAndroid Build Coastguard Worker    *   Fix byte order of HDR10+ static metadata to match CTA-861.3.
2075*30877f79SAndroid Build Coastguard Worker    *   Support out-of-band HDR10+ dynamic metadata for VP9 in WebM/Matroska.
2076*30877f79SAndroid Build Coastguard Worker    *   Assume that protected content requires a secure decoder when evaluating
2077*30877f79SAndroid Build Coastguard Worker        whether `MediaCodecVideoRenderer` supports a given video format
2078*30877f79SAndroid Build Coastguard Worker        ([#5568](https://github.com/google/ExoPlayer/issues/5568)).
2079*30877f79SAndroid Build Coastguard Worker    *   Fix Dolby Vision fallback to AVC and HEVC.
2080*30877f79SAndroid Build Coastguard Worker    *   Fix early end-of-stream detection when using video tunneling, on API
2081*30877f79SAndroid Build Coastguard Worker        level 23 and above.
2082*30877f79SAndroid Build Coastguard Worker    *   Fix an issue where a keyframe was rendered rather than skipped when
2083*30877f79SAndroid Build Coastguard Worker        performing an exact seek to a non-zero position close to the start of
2084*30877f79SAndroid Build Coastguard Worker        the stream.
2085*30877f79SAndroid Build Coastguard Worker*   Audio:
2086*30877f79SAndroid Build Coastguard Worker    *   Fix the start of audio getting truncated when transitioning to a new
2087*30877f79SAndroid Build Coastguard Worker        item in a playlist of Opus streams.
2088*30877f79SAndroid Build Coastguard Worker    *   Workaround broken raw audio decoding on Oppo R9
2089*30877f79SAndroid Build Coastguard Worker        ([#5782](https://github.com/google/ExoPlayer/issues/5782)).
2090*30877f79SAndroid Build Coastguard Worker    *   Reconfigure audio sink when PCM encoding changes
2091*30877f79SAndroid Build Coastguard Worker        ([#6601](https://github.com/google/ExoPlayer/issues/6601)).
2092*30877f79SAndroid Build Coastguard Worker    *   Allow `AdtsExtractor` to encounter EOF when calculating average frame
2093*30877f79SAndroid Build Coastguard Worker        size ([#6700](https://github.com/google/ExoPlayer/issues/6700)).
2094*30877f79SAndroid Build Coastguard Worker*   Text:
2095*30877f79SAndroid Build Coastguard Worker    *   Add support for position and overlapping start/end times in SSA/ASS
2096*30877f79SAndroid Build Coastguard Worker        subtitles ([#6320](https://github.com/google/ExoPlayer/issues/6320)).
2097*30877f79SAndroid Build Coastguard Worker    *   Require an end time or duration for SubRip (SRT) and SubStation Alpha
2098*30877f79SAndroid Build Coastguard Worker        (SSA/ASS) subtitles. This applies to both sidecar files & subtitles
2099*30877f79SAndroid Build Coastguard Worker        [embedded in Matroska streams](https://matroska.org/technical/specs/subtitles/index.html).
2100*30877f79SAndroid Build Coastguard Worker*   UI:
2101*30877f79SAndroid Build Coastguard Worker    *   Make showing and hiding player controls accessible to TalkBack in
2102*30877f79SAndroid Build Coastguard Worker        `PlayerView`.
2103*30877f79SAndroid Build Coastguard Worker    *   Rename `spherical_view` surface type to `spherical_gl_surface_view`.
2104*30877f79SAndroid Build Coastguard Worker    *   Make it easier to override the shuffle, repeat, fullscreen, VR and small
2105*30877f79SAndroid Build Coastguard Worker        notification icon assets
2106*30877f79SAndroid Build Coastguard Worker        ([#6709](https://github.com/google/ExoPlayer/issues/6709)).
2107*30877f79SAndroid Build Coastguard Worker*   Analytics:
2108*30877f79SAndroid Build Coastguard Worker    *   Remove `AnalyticsCollector.Factory`. Instances should be created
2109*30877f79SAndroid Build Coastguard Worker        directly, and the `Player` should be set by calling
2110*30877f79SAndroid Build Coastguard Worker        `AnalyticsCollector.setPlayer`.
2111*30877f79SAndroid Build Coastguard Worker    *   Add `PlaybackStatsListener` to collect `PlaybackStats` for analysis and
2112*30877f79SAndroid Build Coastguard Worker        analytics reporting.
2113*30877f79SAndroid Build Coastguard Worker*   DataSource
2114*30877f79SAndroid Build Coastguard Worker    *   Add `DataSpec.httpRequestHeaders` to support setting per-request headers
2115*30877f79SAndroid Build Coastguard Worker        for HTTP and HTTPS.
2116*30877f79SAndroid Build Coastguard Worker    *   Remove the `DataSpec.FLAG_ALLOW_ICY_METADATA` flag. Use is replaced by
2117*30877f79SAndroid Build Coastguard Worker        setting the `IcyHeaders.REQUEST_HEADER_ENABLE_METADATA_NAME` header in
2118*30877f79SAndroid Build Coastguard Worker        `DataSpec.httpRequestHeaders`.
2119*30877f79SAndroid Build Coastguard Worker    *   Fail more explicitly when local file URIs contain invalid parts (e.g. a
2120*30877f79SAndroid Build Coastguard Worker        fragment) ([#6470](https://github.com/google/ExoPlayer/issues/6470)).
2121*30877f79SAndroid Build Coastguard Worker*   DASH: Support negative @r values in segment timelines
2122*30877f79SAndroid Build Coastguard Worker    ([#1787](https://github.com/google/ExoPlayer/issues/1787)).
2123*30877f79SAndroid Build Coastguard Worker*   HLS:
2124*30877f79SAndroid Build Coastguard Worker    *   Use peak bitrate rather than average bitrate for adaptive track
2125*30877f79SAndroid Build Coastguard Worker        selection.
2126*30877f79SAndroid Build Coastguard Worker    *   Fix issue where streams could get stuck in an infinite buffering state
2127*30877f79SAndroid Build Coastguard Worker        after a postroll ad
2128*30877f79SAndroid Build Coastguard Worker        ([#6314](https://github.com/google/ExoPlayer/issues/6314)).
2129*30877f79SAndroid Build Coastguard Worker*   Matroska: Support lacing in Blocks
2130*30877f79SAndroid Build Coastguard Worker    ([#3026](https://github.com/google/ExoPlayer/issues/3026)).
2131*30877f79SAndroid Build Coastguard Worker*   AV1 extension:
2132*30877f79SAndroid Build Coastguard Worker    *   New in this release. The AV1 extension allows use of the
2133*30877f79SAndroid Build Coastguard Worker        [libgav1 software decoder](https://chromium.googlesource.com/codecs/libgav1/)
2134*30877f79SAndroid Build Coastguard Worker        in ExoPlayer. You can read more about playing AV1 videos with ExoPlayer
2135*30877f79SAndroid Build Coastguard Worker        [here](https://medium.com/google-exoplayer/playing-av1-videos-with-exoplayer-a7cb19bedef9).
2136*30877f79SAndroid Build Coastguard Worker*   VP9 extension:
2137*30877f79SAndroid Build Coastguard Worker    *   Update to use NDK r20.
2138*30877f79SAndroid Build Coastguard Worker    *   Rename `VpxVideoSurfaceView` to `VideoDecoderSurfaceView` and move it to
2139*30877f79SAndroid Build Coastguard Worker        the core library.
2140*30877f79SAndroid Build Coastguard Worker    *   Move `LibvpxVideoRenderer.MSG_SET_OUTPUT_BUFFER_RENDERER` to
2141*30877f79SAndroid Build Coastguard Worker        `C.MSG_SET_OUTPUT_BUFFER_RENDERER`.
2142*30877f79SAndroid Build Coastguard Worker    *   Use `VideoDecoderRenderer` as an implementation of
2143*30877f79SAndroid Build Coastguard Worker        `VideoDecoderOutputBufferRenderer`, instead of
2144*30877f79SAndroid Build Coastguard Worker        `VideoDecoderSurfaceView`.
2145*30877f79SAndroid Build Coastguard Worker*   FLAC extension: Update to use NDK r20.
2146*30877f79SAndroid Build Coastguard Worker*   Opus extension: Update to use NDK r20.
2147*30877f79SAndroid Build Coastguard Worker*   FFmpeg extension:
2148*30877f79SAndroid Build Coastguard Worker    *   Update to use NDK r20.
2149*30877f79SAndroid Build Coastguard Worker    *   Update to use FFmpeg version 4.2. It is necessary to rebuild the native
2150*30877f79SAndroid Build Coastguard Worker        part of the extension after this change, following the instructions in
2151*30877f79SAndroid Build Coastguard Worker        the extension's readme.
2152*30877f79SAndroid Build Coastguard Worker*   MediaSession extension: Add `MediaSessionConnector.setCaptionCallback` to
2153*30877f79SAndroid Build Coastguard Worker    support `ACTION_SET_CAPTIONING_ENABLED` events.
2154*30877f79SAndroid Build Coastguard Worker*   GVR extension: This extension is now deprecated.
2155*30877f79SAndroid Build Coastguard Worker*   Demo apps:
2156*30877f79SAndroid Build Coastguard Worker    *   Add
2157*30877f79SAndroid Build Coastguard Worker        [SurfaceControl demo app](https://github.com/google/ExoPlayer/tree/r2.11.0/demos/surface)
2158*30877f79SAndroid Build Coastguard Worker        to show how to use the Android 10 `SurfaceControl` API with ExoPlayer
2159*30877f79SAndroid Build Coastguard Worker        ([#677](https://github.com/google/ExoPlayer/issues/677)).
2160*30877f79SAndroid Build Coastguard Worker    *   Add support for subtitle files to the
2161*30877f79SAndroid Build Coastguard Worker        [Main demo app](https://github.com/google/ExoPlayer/tree/r2.11.0/demos/main)
2162*30877f79SAndroid Build Coastguard Worker        ([#5523](https://github.com/google/ExoPlayer/issues/5523)).
2163*30877f79SAndroid Build Coastguard Worker    *   Remove the IMA demo app. IMA functionality is demonstrated by the
2164*30877f79SAndroid Build Coastguard Worker        [main demo app](https://github.com/google/ExoPlayer/tree/r2.11.0/demos/main).
2165*30877f79SAndroid Build Coastguard Worker    *   Add basic DRM support to the
2166*30877f79SAndroid Build Coastguard Worker        [Cast demo app](https://github.com/google/ExoPlayer/tree/r2.11.0/demos/cast).
2167*30877f79SAndroid Build Coastguard Worker*   TestUtils: Publish the `testutils` module to simplify unit testing with
2168*30877f79SAndroid Build Coastguard Worker    ExoPlayer ([#6267](https://github.com/google/ExoPlayer/issues/6267)).
2169*30877f79SAndroid Build Coastguard Worker*   IMA extension: Remove `AdsManager` listeners on release to avoid leaking an
2170*30877f79SAndroid Build Coastguard Worker    `AdEventListener` provided by the app
2171*30877f79SAndroid Build Coastguard Worker    ([#6687](https://github.com/google/ExoPlayer/issues/6687)).
2172*30877f79SAndroid Build Coastguard Worker
2173*30877f79SAndroid Build Coastguard Worker### 2.10.8 (2019-11-19)
2174*30877f79SAndroid Build Coastguard Worker
2175*30877f79SAndroid Build Coastguard Worker*   E-AC3 JOC
2176*30877f79SAndroid Build Coastguard Worker    *   Handle new signaling in DASH manifests
2177*30877f79SAndroid Build Coastguard Worker        ([#6636](https://github.com/google/ExoPlayer/issues/6636)).
2178*30877f79SAndroid Build Coastguard Worker    *   Fix E-AC3 JOC passthrough playback failing to initialize due to
2179*30877f79SAndroid Build Coastguard Worker        incorrect channel count check.
2180*30877f79SAndroid Build Coastguard Worker*   FLAC
2181*30877f79SAndroid Build Coastguard Worker    *   Fix sniffing for some FLAC streams.
2182*30877f79SAndroid Build Coastguard Worker    *   Fix FLAC `Format.bitrate` values.
2183*30877f79SAndroid Build Coastguard Worker*   Parse ALAC channel count and sample rate information from a more robust
2184*30877f79SAndroid Build Coastguard Worker    source when contained in MP4
2185*30877f79SAndroid Build Coastguard Worker    ([#6648](https://github.com/google/ExoPlayer/issues/6648)).
2186*30877f79SAndroid Build Coastguard Worker*   Fix seeking into multi-period content in the edge case that the period
2187*30877f79SAndroid Build Coastguard Worker    containing the seek position has just been removed
2188*30877f79SAndroid Build Coastguard Worker    ([#6641](https://github.com/google/ExoPlayer/issues/6641)).
2189*30877f79SAndroid Build Coastguard Worker
2190*30877f79SAndroid Build Coastguard Worker### 2.10.7 (2019-11-06)
2191*30877f79SAndroid Build Coastguard Worker
2192*30877f79SAndroid Build Coastguard Worker*   HLS: Fix detection of Dolby Atmos to match the HLS authoring specification.
2193*30877f79SAndroid Build Coastguard Worker*   MediaSession extension: Update shuffle and repeat modes when playback state
2194*30877f79SAndroid Build Coastguard Worker    is invalidated ([#6582](https://github.com/google/ExoPlayer/issues/6582)).
2195*30877f79SAndroid Build Coastguard Worker*   Fix the start of audio getting truncated when transitioning to a new item in
2196*30877f79SAndroid Build Coastguard Worker    a playlist of Opus streams.
2197*30877f79SAndroid Build Coastguard Worker
2198*30877f79SAndroid Build Coastguard Worker### 2.10.6 (2019-10-17)
2199*30877f79SAndroid Build Coastguard Worker
2200*30877f79SAndroid Build Coastguard Worker*   Add `Player.onPlaybackSuppressionReasonChanged` to allow listeners to detect
2201*30877f79SAndroid Build Coastguard Worker    playbacks suppressions (e.g. transient audio focus loss) directly
2202*30877f79SAndroid Build Coastguard Worker    ([#6203](https://github.com/google/ExoPlayer/issues/6203)).
2203*30877f79SAndroid Build Coastguard Worker*   DASH:
2204*30877f79SAndroid Build Coastguard Worker    *   Support `Label` elements
2205*30877f79SAndroid Build Coastguard Worker        ([#6297](https://github.com/google/ExoPlayer/issues/6297)).
2206*30877f79SAndroid Build Coastguard Worker    *   Support legacy audio channel configuration
2207*30877f79SAndroid Build Coastguard Worker        ([#6523](https://github.com/google/ExoPlayer/issues/6523)).
2208*30877f79SAndroid Build Coastguard Worker*   HLS: Add support for ID3 in EMSG when using FMP4 streams
2209*30877f79SAndroid Build Coastguard Worker    ([spec](https://aomediacodec.github.io/av1-id3/)).
2210*30877f79SAndroid Build Coastguard Worker*   MP3: Add workaround to avoid prematurely ending playback of some SHOUTcast
2211*30877f79SAndroid Build Coastguard Worker    live streams ([#6537](https://github.com/google/ExoPlayer/issues/6537),
2212*30877f79SAndroid Build Coastguard Worker    [#6315](https://github.com/google/ExoPlayer/issues/6315) and
2213*30877f79SAndroid Build Coastguard Worker    [#5658](https://github.com/google/ExoPlayer/issues/5658)).
2214*30877f79SAndroid Build Coastguard Worker*   Metadata: Expose the raw ICY metadata through `IcyInfo`
2215*30877f79SAndroid Build Coastguard Worker    ([#6476](https://github.com/google/ExoPlayer/issues/6476)).
2216*30877f79SAndroid Build Coastguard Worker*   UI:
2217*30877f79SAndroid Build Coastguard Worker    *   Setting `app:played_color` on `PlayerView` and `PlayerControlView` no
2218*30877f79SAndroid Build Coastguard Worker        longer adjusts the colors of the scrubber handle , buffered and unplayed
2219*30877f79SAndroid Build Coastguard Worker        parts of the time bar. These can be set separately using
2220*30877f79SAndroid Build Coastguard Worker        `app:scrubber_color`, `app:buffered_color` and `app_unplayed_color`
2221*30877f79SAndroid Build Coastguard Worker        respectively.
2222*30877f79SAndroid Build Coastguard Worker    *   Setting `app:ad_marker_color` on `PlayerView` and `PlayerControlView` no
2223*30877f79SAndroid Build Coastguard Worker        longer adjusts the color of played ad markers. The color of played ad
2224*30877f79SAndroid Build Coastguard Worker        markers can be set separately using `app:played_ad_marker_color`.
2225*30877f79SAndroid Build Coastguard Worker
2226*30877f79SAndroid Build Coastguard Worker### 2.10.5 (2019-09-20)
2227*30877f79SAndroid Build Coastguard Worker
2228*30877f79SAndroid Build Coastguard Worker*   Add `Player.isPlaying` and `EventListener.onIsPlayingChanged` to check
2229*30877f79SAndroid Build Coastguard Worker    whether the playback position is advancing. This helps to determine if
2230*30877f79SAndroid Build Coastguard Worker    playback is suppressed due to audio focus loss. Also add
2231*30877f79SAndroid Build Coastguard Worker    `Player.getPlaybackSuppressedReason` to determine the reason of the
2232*30877f79SAndroid Build Coastguard Worker    suppression ([#6203](https://github.com/google/ExoPlayer/issues/6203)).
2233*30877f79SAndroid Build Coastguard Worker*   Track selection
2234*30877f79SAndroid Build Coastguard Worker    *   Add `allowAudioMixedChannelCountAdaptiveness` parameter to
2235*30877f79SAndroid Build Coastguard Worker        `DefaultTrackSelector` to allow adaptive selections of audio tracks with
2236*30877f79SAndroid Build Coastguard Worker        different channel counts.
2237*30877f79SAndroid Build Coastguard Worker    *   Improve text selection logic to always prefer the better language
2238*30877f79SAndroid Build Coastguard Worker        matches over other selection parameters.
2239*30877f79SAndroid Build Coastguard Worker    *   Fix audio selection issue where languages are compared by bitrate
2240*30877f79SAndroid Build Coastguard Worker        ([#6335](https://github.com/google/ExoPlayer/issues/6335)).
2241*30877f79SAndroid Build Coastguard Worker*   Performance
2242*30877f79SAndroid Build Coastguard Worker    *   Increase maximum video buffer size from 13MB to 32MB. The previous
2243*30877f79SAndroid Build Coastguard Worker        default was too small for high quality streams.
2244*30877f79SAndroid Build Coastguard Worker    *   Reset `DefaultBandwidthMeter` to initial values on network change.
2245*30877f79SAndroid Build Coastguard Worker    *   Bypass sniffing in `ProgressiveMediaPeriod` in case a single extractor
2246*30877f79SAndroid Build Coastguard Worker        is provided ([#6325](https://github.com/google/ExoPlayer/issues/6325)).
2247*30877f79SAndroid Build Coastguard Worker*   Metadata
2248*30877f79SAndroid Build Coastguard Worker    *   Support EMSG V1 boxes in FMP4.
2249*30877f79SAndroid Build Coastguard Worker    *   Support unwrapping of nested metadata (e.g. ID3 and SCTE-35 in EMSG).
2250*30877f79SAndroid Build Coastguard Worker*   Add `HttpDataSource.getResponseCode` to provide the status code associated
2251*30877f79SAndroid Build Coastguard Worker    with the most recent HTTP response.
2252*30877f79SAndroid Build Coastguard Worker*   Fix transitions between packed audio and non-packed audio segments in HLS
2253*30877f79SAndroid Build Coastguard Worker    ([#6444](https://github.com/google/ExoPlayer/issues/6444)).
2254*30877f79SAndroid Build Coastguard Worker*   Fix issue where a request would be retried after encountering an error, even
2255*30877f79SAndroid Build Coastguard Worker    though the `LoadErrorHandlingPolicy` classified the error as fatal.
2256*30877f79SAndroid Build Coastguard Worker*   Fix initialization data handling for FLAC in MP4
2257*30877f79SAndroid Build Coastguard Worker    ([#6396](https://github.com/google/ExoPlayer/issues/6396),
2258*30877f79SAndroid Build Coastguard Worker    [#6397](https://github.com/google/ExoPlayer/issues/6397)).
2259*30877f79SAndroid Build Coastguard Worker*   Fix decoder selection for E-AC3 JOC streams
2260*30877f79SAndroid Build Coastguard Worker    ([#6398](https://github.com/google/ExoPlayer/issues/6398)).
2261*30877f79SAndroid Build Coastguard Worker*   Fix `PlayerNotificationManager` to show play icon rather than pause icon
2262*30877f79SAndroid Build Coastguard Worker    when playback is ended
2263*30877f79SAndroid Build Coastguard Worker    ([#6324](https://github.com/google/ExoPlayer/issues/6324)).
2264*30877f79SAndroid Build Coastguard Worker*   RTMP extension: Upgrade LibRtmp-Client-for-Android to fix RTMP playback
2265*30877f79SAndroid Build Coastguard Worker    issues ([#4200](https://github.com/google/ExoPlayer/issues/4200),
2266*30877f79SAndroid Build Coastguard Worker    [#4249](https://github.com/google/ExoPlayer/issues/4249),
2267*30877f79SAndroid Build Coastguard Worker    [#4319](https://github.com/google/ExoPlayer/issues/4319),
2268*30877f79SAndroid Build Coastguard Worker    [#4337](https://github.com/google/ExoPlayer/issues/4337)).
2269*30877f79SAndroid Build Coastguard Worker*   IMA extension: Fix crash in `ImaAdsLoader.onTimelineChanged`
2270*30877f79SAndroid Build Coastguard Worker    ([#5831](https://github.com/google/ExoPlayer/issues/5831)).
2271*30877f79SAndroid Build Coastguard Worker
2272*30877f79SAndroid Build Coastguard Worker### 2.10.4 (2019-07-26)
2273*30877f79SAndroid Build Coastguard Worker
2274*30877f79SAndroid Build Coastguard Worker*   Offline: Add `Scheduler` implementation that uses `WorkManager`.
2275*30877f79SAndroid Build Coastguard Worker*   Add ability to specify a description when creating notification channels via
2276*30877f79SAndroid Build Coastguard Worker    ExoPlayer library classes.
2277*30877f79SAndroid Build Coastguard Worker*   Switch normalized BCP-47 language codes to use 2-letter ISO 639-1 language
2278*30877f79SAndroid Build Coastguard Worker    tags instead of 3-letter ISO 639-2 language tags.
2279*30877f79SAndroid Build Coastguard Worker*   Ensure the `SilenceMediaSource` position is in range
2280*30877f79SAndroid Build Coastguard Worker    ([#6229](https://github.com/google/ExoPlayer/issues/6229)).
2281*30877f79SAndroid Build Coastguard Worker*   WAV: Calculate correct duration for clipped streams
2282*30877f79SAndroid Build Coastguard Worker    ([#6241](https://github.com/google/ExoPlayer/issues/6241)).
2283*30877f79SAndroid Build Coastguard Worker*   MP3: Use CBR header bitrate, not calculated bitrate. This reverts a change
2284*30877f79SAndroid Build Coastguard Worker    from 2.9.3 ([#6238](https://github.com/google/ExoPlayer/issues/6238)).
2285*30877f79SAndroid Build Coastguard Worker*   FLAC extension: Parse `VORBIS_COMMENT` and `PICTURE` metadata
2286*30877f79SAndroid Build Coastguard Worker    ([#5527](https://github.com/google/ExoPlayer/issues/5527)).
2287*30877f79SAndroid Build Coastguard Worker*   Fix issue where initial seek positions get ignored when playing a preroll ad
2288*30877f79SAndroid Build Coastguard Worker    ([#6201](https://github.com/google/ExoPlayer/issues/6201)).
2289*30877f79SAndroid Build Coastguard Worker*   Fix issue where invalid language tags were normalized to "und" instead of
2290*30877f79SAndroid Build Coastguard Worker    keeping the original
2291*30877f79SAndroid Build Coastguard Worker    ([#6153](https://github.com/google/ExoPlayer/issues/6153)).
2292*30877f79SAndroid Build Coastguard Worker*   Fix `DataSchemeDataSource` re-opening and range requests
2293*30877f79SAndroid Build Coastguard Worker    ([#6192](https://github.com/google/ExoPlayer/issues/6192)).
2294*30877f79SAndroid Build Coastguard Worker*   Fix FLAC and ALAC playback on some LG devices
2295*30877f79SAndroid Build Coastguard Worker    ([#5938](https://github.com/google/ExoPlayer/issues/5938)).
2296*30877f79SAndroid Build Coastguard Worker*   Fix issue when calling `performClick` on `PlayerView` without
2297*30877f79SAndroid Build Coastguard Worker    `PlayerControlView`
2298*30877f79SAndroid Build Coastguard Worker    ([#6260](https://github.com/google/ExoPlayer/issues/6260)).
2299*30877f79SAndroid Build Coastguard Worker*   Fix issue where playback speeds are not used in adaptive track selections
2300*30877f79SAndroid Build Coastguard Worker    after manual selection changes for other renderers
2301*30877f79SAndroid Build Coastguard Worker    ([#6256](https://github.com/google/ExoPlayer/issues/6256)).
2302*30877f79SAndroid Build Coastguard Worker
2303*30877f79SAndroid Build Coastguard Worker### 2.10.3 (2019-07-09)
2304*30877f79SAndroid Build Coastguard Worker
2305*30877f79SAndroid Build Coastguard Worker*   Display last frame when seeking to end of stream
2306*30877f79SAndroid Build Coastguard Worker    ([#2568](https://github.com/google/ExoPlayer/issues/2568)).
2307*30877f79SAndroid Build Coastguard Worker*   Audio:
2308*30877f79SAndroid Build Coastguard Worker    *   Fix an issue where not all audio was played out when the configuration
2309*30877f79SAndroid Build Coastguard Worker        for the underlying track was changing (e.g., at some period
2310*30877f79SAndroid Build Coastguard Worker        transitions).
2311*30877f79SAndroid Build Coastguard Worker    *   Fix an issue where playback speed was applied inaccurately in playlists
2312*30877f79SAndroid Build Coastguard Worker        ([#6117](https://github.com/google/ExoPlayer/issues/6117)).
2313*30877f79SAndroid Build Coastguard Worker*   UI: Fix `PlayerView` incorrectly consuming touch events if no controller is
2314*30877f79SAndroid Build Coastguard Worker    attached ([#6109](https://github.com/google/ExoPlayer/issues/6109)).
2315*30877f79SAndroid Build Coastguard Worker*   CEA608: Fix repetition of special North American characters
2316*30877f79SAndroid Build Coastguard Worker    ([#6133](https://github.com/google/ExoPlayer/issues/6133)).
2317*30877f79SAndroid Build Coastguard Worker*   FLV: Fix bug that caused playback of some live streams to not start
2318*30877f79SAndroid Build Coastguard Worker    ([#6111](https://github.com/google/ExoPlayer/issues/6111)).
2319*30877f79SAndroid Build Coastguard Worker*   SmoothStreaming: Parse text stream `Subtype` into `Format.roleFlags`.
2320*30877f79SAndroid Build Coastguard Worker*   MediaSession extension: Fix `MediaSessionConnector.play()` not resuming
2321*30877f79SAndroid Build Coastguard Worker    playback ([#6093](https://github.com/google/ExoPlayer/issues/6093)).
2322*30877f79SAndroid Build Coastguard Worker
2323*30877f79SAndroid Build Coastguard Worker### 2.10.2 (2019-06-03)
2324*30877f79SAndroid Build Coastguard Worker
2325*30877f79SAndroid Build Coastguard Worker*   Add `ResolvingDataSource` for just-in-time resolution of `DataSpec`s
2326*30877f79SAndroid Build Coastguard Worker    ([#5779](https://github.com/google/ExoPlayer/issues/5779)).
2327*30877f79SAndroid Build Coastguard Worker*   Add `SilenceMediaSource` that can be used to play silence of a given
2328*30877f79SAndroid Build Coastguard Worker    duration ([#5735](https://github.com/google/ExoPlayer/issues/5735)).
2329*30877f79SAndroid Build Coastguard Worker*   Offline:
2330*30877f79SAndroid Build Coastguard Worker    *   Prevent unexpected `DownloadHelper.Callback.onPrepared` callbacks after
2331*30877f79SAndroid Build Coastguard Worker        preparation of a `DownloadHelper` fails
2332*30877f79SAndroid Build Coastguard Worker        ([#5915](https://github.com/google/ExoPlayer/issues/5915)).
2333*30877f79SAndroid Build Coastguard Worker    *   Fix `CacheUtil.cache()` downloading too much data
2334*30877f79SAndroid Build Coastguard Worker        ([#5927](https://github.com/google/ExoPlayer/issues/5927)).
2335*30877f79SAndroid Build Coastguard Worker    *   Fix misreporting cached bytes when caching is paused
2336*30877f79SAndroid Build Coastguard Worker        ([#5573](https://github.com/google/ExoPlayer/issues/5573)).
2337*30877f79SAndroid Build Coastguard Worker*   UI:
2338*30877f79SAndroid Build Coastguard Worker    *   Allow setting `DefaultTimeBar` attributes on `PlayerView` and
2339*30877f79SAndroid Build Coastguard Worker        `PlayerControlView`.
2340*30877f79SAndroid Build Coastguard Worker    *   Change playback controls toggle from touch down to touch up events
2341*30877f79SAndroid Build Coastguard Worker        ([#5784](https://github.com/google/ExoPlayer/issues/5784)).
2342*30877f79SAndroid Build Coastguard Worker    *   Fix issue where playback controls were not kept visible on key presses
2343*30877f79SAndroid Build Coastguard Worker        ([#5963](https://github.com/google/ExoPlayer/issues/5963)).
2344*30877f79SAndroid Build Coastguard Worker*   Subtitles:
2345*30877f79SAndroid Build Coastguard Worker    *   CEA-608: Handle XDS and TEXT modes
2346*30877f79SAndroid Build Coastguard Worker        ([#5807](https://github.com/google/ExoPlayer/pull/5807)).
2347*30877f79SAndroid Build Coastguard Worker    *   TTML: Fix bitmap rendering
2348*30877f79SAndroid Build Coastguard Worker        ([#5633](https://github.com/google/ExoPlayer/pull/5633)).
2349*30877f79SAndroid Build Coastguard Worker*   IMA: Fix ad pod index offset calculation without preroll
2350*30877f79SAndroid Build Coastguard Worker    ([#5928](https://github.com/google/ExoPlayer/issues/5928)).
2351*30877f79SAndroid Build Coastguard Worker*   Add a `playWhenReady` flag to MediaSessionConnector.PlaybackPreparer methods
2352*30877f79SAndroid Build Coastguard Worker    to indicate whether a controller sent a play or only a prepare command. This
2353*30877f79SAndroid Build Coastguard Worker    allows to take advantage of decoder reuse with the MediaSessionConnector
2354*30877f79SAndroid Build Coastguard Worker    ([#5891](https://github.com/google/ExoPlayer/issues/5891)).
2355*30877f79SAndroid Build Coastguard Worker*   Add `ProgressUpdateListener` to `PlayerControlView`
2356*30877f79SAndroid Build Coastguard Worker    ([#5834](https://github.com/google/ExoPlayer/issues/5834)).
2357*30877f79SAndroid Build Coastguard Worker*   Add support for auto-detecting UDP streams in `DefaultDataSource`
2358*30877f79SAndroid Build Coastguard Worker    ([#6036](https://github.com/google/ExoPlayer/pull/6036)).
2359*30877f79SAndroid Build Coastguard Worker*   Allow enabling decoder fallback with `DefaultRenderersFactory`
2360*30877f79SAndroid Build Coastguard Worker    ([#5942](https://github.com/google/ExoPlayer/issues/5942)).
2361*30877f79SAndroid Build Coastguard Worker*   Gracefully handle revoked `ACCESS_NETWORK_STATE` permission
2362*30877f79SAndroid Build Coastguard Worker    ([#6019](https://github.com/google/ExoPlayer/issues/6019)).
2363*30877f79SAndroid Build Coastguard Worker*   Fix decoding problems when seeking back after seeking beyond a mid-roll ad
2364*30877f79SAndroid Build Coastguard Worker    ([#6009](https://github.com/google/ExoPlayer/issues/6009)).
2365*30877f79SAndroid Build Coastguard Worker*   Fix application of `maxAudioBitrate` for adaptive audio track groups
2366*30877f79SAndroid Build Coastguard Worker    ([#6006](https://github.com/google/ExoPlayer/issues/6006)).
2367*30877f79SAndroid Build Coastguard Worker*   Fix bug caused by parallel adaptive track selection using `Format`s without
2368*30877f79SAndroid Build Coastguard Worker    bitrate information
2369*30877f79SAndroid Build Coastguard Worker    ([#5971](https://github.com/google/ExoPlayer/issues/5971)).
2370*30877f79SAndroid Build Coastguard Worker*   Fix bug in `CastPlayer.getCurrentWindowIndex()`
2371*30877f79SAndroid Build Coastguard Worker    ([#5955](https://github.com/google/ExoPlayer/issues/5955)).
2372*30877f79SAndroid Build Coastguard Worker
2373*30877f79SAndroid Build Coastguard Worker### 2.10.1 (2019-05-16)
2374*30877f79SAndroid Build Coastguard Worker
2375*30877f79SAndroid Build Coastguard Worker*   Offline: Add option to remove all downloads.
2376*30877f79SAndroid Build Coastguard Worker*   HLS: Fix `NullPointerException` when using HLS chunkless preparation
2377*30877f79SAndroid Build Coastguard Worker    ([#5868](https://github.com/google/ExoPlayer/issues/5868)).
2378*30877f79SAndroid Build Coastguard Worker*   Fix handling of empty values and line terminators in SHOUTcast ICY metadata
2379*30877f79SAndroid Build Coastguard Worker    ([#5876](https://github.com/google/ExoPlayer/issues/5876)).
2380*30877f79SAndroid Build Coastguard Worker*   Fix DVB subtitles for SDK 28
2381*30877f79SAndroid Build Coastguard Worker    ([#5862](https://github.com/google/ExoPlayer/issues/5862)).
2382*30877f79SAndroid Build Coastguard Worker*   Add a workaround for a decoder failure on ZTE Axon7 mini devices when
2383*30877f79SAndroid Build Coastguard Worker    playing 48kHz audio
2384*30877f79SAndroid Build Coastguard Worker    ([#5821](https://github.com/google/ExoPlayer/issues/5821)).
2385*30877f79SAndroid Build Coastguard Worker
2386*30877f79SAndroid Build Coastguard Worker### 2.10.0 (2019-04-15)
2387*30877f79SAndroid Build Coastguard Worker
2388*30877f79SAndroid Build Coastguard Worker*   Core library:
2389*30877f79SAndroid Build Coastguard Worker    *   Improve decoder re-use between playbacks
2390*30877f79SAndroid Build Coastguard Worker        ([#2826](https://github.com/google/ExoPlayer/issues/2826)). Read
2391*30877f79SAndroid Build Coastguard Worker        [this blog post](https://medium.com/google-exoplayer/improved-decoder-reuse-in-exoplayer-ef4c6d99591d)
2392*30877f79SAndroid Build Coastguard Worker        for more details.
2393*30877f79SAndroid Build Coastguard Worker    *   Rename `ExtractorMediaSource` to `ProgressiveMediaSource`.
2394*30877f79SAndroid Build Coastguard Worker    *   Fix issue where using `ProgressiveMediaSource.Factory` would mean that
2395*30877f79SAndroid Build Coastguard Worker        `DefaultExtractorsFactory` would be kept by proguard. Custom
2396*30877f79SAndroid Build Coastguard Worker        `ExtractorsFactory` instances must now be passed via the
2397*30877f79SAndroid Build Coastguard Worker        `ProgressiveMediaSource.Factory` constructor, and `setExtractorsFactory`
2398*30877f79SAndroid Build Coastguard Worker        is deprecated.
2399*30877f79SAndroid Build Coastguard Worker    *   Make the default minimum buffer size equal the maximum buffer size for
2400*30877f79SAndroid Build Coastguard Worker        video playbacks
2401*30877f79SAndroid Build Coastguard Worker        ([#2083](https://github.com/google/ExoPlayer/issues/2083)).
2402*30877f79SAndroid Build Coastguard Worker    *   Move `PriorityTaskManager` from `DefaultLoadControl` to
2403*30877f79SAndroid Build Coastguard Worker        `SimpleExoPlayer`.
2404*30877f79SAndroid Build Coastguard Worker    *   Add new `ExoPlaybackException` types for remote exceptions and
2405*30877f79SAndroid Build Coastguard Worker        out-of-memory errors.
2406*30877f79SAndroid Build Coastguard Worker    *   Use full BCP 47 language tags in `Format`.
2407*30877f79SAndroid Build Coastguard Worker    *   Do not retry failed loads whose error is `FileNotFoundException`.
2408*30877f79SAndroid Build Coastguard Worker    *   Fix issue where not resetting the position for a new `MediaSource` in
2409*30877f79SAndroid Build Coastguard Worker        calls to `ExoPlayer.prepare` causes an `IndexOutOfBoundsException`
2410*30877f79SAndroid Build Coastguard Worker        ([#5520](https://github.com/google/ExoPlayer/issues/5520)).
2411*30877f79SAndroid Build Coastguard Worker*   Offline:
2412*30877f79SAndroid Build Coastguard Worker    *   Improve offline support. `DownloadManager` now tracks all offline
2413*30877f79SAndroid Build Coastguard Worker        content, not just tasks in progress. Read
2414*30877f79SAndroid Build Coastguard Worker        [this page](https://exoplayer.dev/downloading-media.html) for more
2415*30877f79SAndroid Build Coastguard Worker        details.
2416*30877f79SAndroid Build Coastguard Worker*   Caching:
2417*30877f79SAndroid Build Coastguard Worker    *   Improve performance of `SimpleCache`
2418*30877f79SAndroid Build Coastguard Worker        ([#4253](https://github.com/google/ExoPlayer/issues/4253)).
2419*30877f79SAndroid Build Coastguard Worker    *   Cache data with unknown length by default. The previous flag to opt in
2420*30877f79SAndroid Build Coastguard Worker        to this behavior (`DataSpec.FLAG_ALLOW_CACHING_UNKNOWN_LENGTH`) has been
2421*30877f79SAndroid Build Coastguard Worker        replaced with an opt out flag
2422*30877f79SAndroid Build Coastguard Worker        (`DataSpec.FLAG_DONT_CACHE_IF_LENGTH_UNKNOWN`).
2423*30877f79SAndroid Build Coastguard Worker*   Extractors:
2424*30877f79SAndroid Build Coastguard Worker    *   MP4/FMP4: Add support for Dolby Vision.
2425*30877f79SAndroid Build Coastguard Worker    *   MP4: Fix issue handling meta atoms in some streams
2426*30877f79SAndroid Build Coastguard Worker        ([#5698](https://github.com/google/ExoPlayer/issues/5698),
2427*30877f79SAndroid Build Coastguard Worker        [#5694](https://github.com/google/ExoPlayer/issues/5694)).
2428*30877f79SAndroid Build Coastguard Worker    *   MP3: Add support for SHOUTcast ICY metadata
2429*30877f79SAndroid Build Coastguard Worker        ([#3735](https://github.com/google/ExoPlayer/issues/3735)).
2430*30877f79SAndroid Build Coastguard Worker    *   MP3: Fix ID3 frame unsychronization
2431*30877f79SAndroid Build Coastguard Worker        ([#5673](https://github.com/google/ExoPlayer/issues/5673)).
2432*30877f79SAndroid Build Coastguard Worker    *   MP3: Fix playback of badly clipped files
2433*30877f79SAndroid Build Coastguard Worker        ([#5772](https://github.com/google/ExoPlayer/issues/5772)).
2434*30877f79SAndroid Build Coastguard Worker    *   MPEG-TS: Enable HDMV DTS stream detection only if a flag is set. By
2435*30877f79SAndroid Build Coastguard Worker        default (i.e. if the flag is not set), the 0x82 elementary stream type
2436*30877f79SAndroid Build Coastguard Worker        is now treated as an SCTE subtitle track
2437*30877f79SAndroid Build Coastguard Worker        ([#5330](https://github.com/google/ExoPlayer/issues/5330)).
2438*30877f79SAndroid Build Coastguard Worker*   Track selection:
2439*30877f79SAndroid Build Coastguard Worker    *   Add options for controlling audio track selections to
2440*30877f79SAndroid Build Coastguard Worker        `DefaultTrackSelector`
2441*30877f79SAndroid Build Coastguard Worker        ([#3314](https://github.com/google/ExoPlayer/issues/3314)).
2442*30877f79SAndroid Build Coastguard Worker    *   Update `TrackSelection.Factory` interface to support creating all track
2443*30877f79SAndroid Build Coastguard Worker        selections together.
2444*30877f79SAndroid Build Coastguard Worker    *   Allow to specify a selection reason for a `SelectionOverride`.
2445*30877f79SAndroid Build Coastguard Worker    *   Select audio track based on system language if no preference is
2446*30877f79SAndroid Build Coastguard Worker        provided.
2447*30877f79SAndroid Build Coastguard Worker    *   When no text language preference matches, only select forced text tracks
2448*30877f79SAndroid Build Coastguard Worker        whose language matches the selected audio language.
2449*30877f79SAndroid Build Coastguard Worker*   UI:
2450*30877f79SAndroid Build Coastguard Worker    *   Update `DefaultTimeBar` based on duration of media and add parameter to
2451*30877f79SAndroid Build Coastguard Worker        set the minimum update interval to control the smoothness of the updates
2452*30877f79SAndroid Build Coastguard Worker        ([#5040](https://github.com/google/ExoPlayer/issues/5040)).
2453*30877f79SAndroid Build Coastguard Worker    *   Move creation of dialogs for `TrackSelectionView`s to
2454*30877f79SAndroid Build Coastguard Worker        `TrackSelectionDialogBuilder` and add option to select multiple
2455*30877f79SAndroid Build Coastguard Worker        overrides.
2456*30877f79SAndroid Build Coastguard Worker    *   Change signature of `PlayerNotificationManager.NotificationListener` to
2457*30877f79SAndroid Build Coastguard Worker        better fit service requirements.
2458*30877f79SAndroid Build Coastguard Worker    *   Add option to include navigation actions in the compact mode of
2459*30877f79SAndroid Build Coastguard Worker        notifications created using `PlayerNotificationManager`.
2460*30877f79SAndroid Build Coastguard Worker    *   Fix issues with flickering notifications on KitKat when using
2461*30877f79SAndroid Build Coastguard Worker        `PlayerNotificationManager` and `DownloadNotificationUtil`. For the
2462*30877f79SAndroid Build Coastguard Worker        latter, applications should switch to using
2463*30877f79SAndroid Build Coastguard Worker        `DownloadNotificationHelper`.
2464*30877f79SAndroid Build Coastguard Worker    *   Fix accuracy of D-pad seeking in `DefaultTimeBar`
2465*30877f79SAndroid Build Coastguard Worker        ([#5767](https://github.com/google/ExoPlayer/issues/5767)).
2466*30877f79SAndroid Build Coastguard Worker*   Audio:
2467*30877f79SAndroid Build Coastguard Worker    *   Allow `AudioProcessor`s to be drained of pending output after they are
2468*30877f79SAndroid Build Coastguard Worker        reconfigured.
2469*30877f79SAndroid Build Coastguard Worker    *   Fix an issue that caused audio to be truncated at the end of a period
2470*30877f79SAndroid Build Coastguard Worker        when switching to a new period where gapless playback information was
2471*30877f79SAndroid Build Coastguard Worker        newly present or newly absent.
2472*30877f79SAndroid Build Coastguard Worker    *   Add support for reading AC-4 streams
2473*30877f79SAndroid Build Coastguard Worker        ([#5303](https://github.com/google/ExoPlayer/pull/5303)).
2474*30877f79SAndroid Build Coastguard Worker*   Video:
2475*30877f79SAndroid Build Coastguard Worker    *   Remove `MediaCodecSelector.DEFAULT_WITH_FALLBACK`. Apps should instead
2476*30877f79SAndroid Build Coastguard Worker        signal that fallback should be used by passing `true` as the
2477*30877f79SAndroid Build Coastguard Worker        `enableDecoderFallback` parameter when instantiating the video renderer.
2478*30877f79SAndroid Build Coastguard Worker    *   Support video tunneling when the decoder is not listed first for the
2479*30877f79SAndroid Build Coastguard Worker        MIME type ([#3100](https://github.com/google/ExoPlayer/issues/3100)).
2480*30877f79SAndroid Build Coastguard Worker    *   Query `MediaCodecList.ALL_CODECS` when selecting a tunneling decoder
2481*30877f79SAndroid Build Coastguard Worker        ([#5547](https://github.com/google/ExoPlayer/issues/5547)).
2482*30877f79SAndroid Build Coastguard Worker*   DRM:
2483*30877f79SAndroid Build Coastguard Worker    *   Fix black flicker when keys rotate in DRM protected content
2484*30877f79SAndroid Build Coastguard Worker        ([#3561](https://github.com/google/ExoPlayer/issues/3561)).
2485*30877f79SAndroid Build Coastguard Worker    *   Work around lack of LA_URL attribute in PlayReady key request init data.
2486*30877f79SAndroid Build Coastguard Worker*   CEA-608: Improved conformance to the specification
2487*30877f79SAndroid Build Coastguard Worker    ([#3860](https://github.com/google/ExoPlayer/issues/3860)).
2488*30877f79SAndroid Build Coastguard Worker*   DASH:
2489*30877f79SAndroid Build Coastguard Worker    *   Parse role and accessibility descriptors into `Format.roleFlags`.
2490*30877f79SAndroid Build Coastguard Worker    *   Support multiple CEA-608 channels muxed into FMP4 representations
2491*30877f79SAndroid Build Coastguard Worker        ([#5656](https://github.com/google/ExoPlayer/issues/5656)).
2492*30877f79SAndroid Build Coastguard Worker*   HLS:
2493*30877f79SAndroid Build Coastguard Worker    *   Prevent unnecessary reloads of initialization segments.
2494*30877f79SAndroid Build Coastguard Worker    *   Form an adaptive track group out of audio renditions with matching name.
2495*30877f79SAndroid Build Coastguard Worker    *   Support encrypted initialization segments
2496*30877f79SAndroid Build Coastguard Worker        ([#5441](https://github.com/google/ExoPlayer/issues/5441)).
2497*30877f79SAndroid Build Coastguard Worker    *   Parse `EXT-X-MEDIA` `CHARACTERISTICS` attribute into `Format.roleFlags`.
2498*30877f79SAndroid Build Coastguard Worker    *   Add metadata entry for HLS tracks to expose master playlist information.
2499*30877f79SAndroid Build Coastguard Worker    *   Prevent `IndexOutOfBoundsException` in some live HLS scenarios
2500*30877f79SAndroid Build Coastguard Worker        ([#5816](https://github.com/google/ExoPlayer/issues/5816)).
2501*30877f79SAndroid Build Coastguard Worker*   Support for playing spherical videos on Daydream.
2502*30877f79SAndroid Build Coastguard Worker*   Cast extension: Work around Cast framework returning a limited-size queue
2503*30877f79SAndroid Build Coastguard Worker    items list ([#4964](https://github.com/google/ExoPlayer/issues/4964)).
2504*30877f79SAndroid Build Coastguard Worker*   VP9 extension: Remove RGB output mode and libyuv dependency, and switch to
2505*30877f79SAndroid Build Coastguard Worker    surface YUV output as the default. Remove constructor parameters
2506*30877f79SAndroid Build Coastguard Worker    `scaleToFit` and `useSurfaceYuvOutput`.
2507*30877f79SAndroid Build Coastguard Worker*   MediaSession extension:
2508*30877f79SAndroid Build Coastguard Worker    *   Let apps intercept media button events
2509*30877f79SAndroid Build Coastguard Worker        ([#5179](https://github.com/google/ExoPlayer/issues/5179)).
2510*30877f79SAndroid Build Coastguard Worker    *   Fix issue with `TimelineQueueNavigator` not publishing the queue in
2511*30877f79SAndroid Build Coastguard Worker        shuffled order when in shuffle mode.
2512*30877f79SAndroid Build Coastguard Worker    *   Allow handling of custom commands via `registerCustomCommandReceiver`.
2513*30877f79SAndroid Build Coastguard Worker    *   Add ability to include an extras `Bundle` when reporting a custom error.
2514*30877f79SAndroid Build Coastguard Worker*   Log warnings when extension native libraries can't be used, to help with
2515*30877f79SAndroid Build Coastguard Worker    diagnosing playback failures
2516*30877f79SAndroid Build Coastguard Worker    ([#5788](https://github.com/google/ExoPlayer/issues/5788)).
2517*30877f79SAndroid Build Coastguard Worker
2518*30877f79SAndroid Build Coastguard Worker### 2.9.6 (2019-02-19)
2519*30877f79SAndroid Build Coastguard Worker
2520*30877f79SAndroid Build Coastguard Worker*   Remove `player` and `isTopLevelSource` parameters from
2521*30877f79SAndroid Build Coastguard Worker    `MediaSource.prepare`.
2522*30877f79SAndroid Build Coastguard Worker*   IMA extension:
2523*30877f79SAndroid Build Coastguard Worker    *   Require setting the `Player` on `AdsLoader` instances before playback.
2524*30877f79SAndroid Build Coastguard Worker    *   Remove deprecated `ImaAdsMediaSource`. Create `AdsMediaSource` with an
2525*30877f79SAndroid Build Coastguard Worker        `ImaAdsLoader` instead.
2526*30877f79SAndroid Build Coastguard Worker    *   Remove deprecated `AdsMediaSource` constructors. Listen for media source
2527*30877f79SAndroid Build Coastguard Worker        events using `AdsMediaSource.addEventListener`, and ad interaction
2528*30877f79SAndroid Build Coastguard Worker        events by adding a listener when building `ImaAdsLoader`.
2529*30877f79SAndroid Build Coastguard Worker    *   Allow apps to register playback-related obstructing views that are on
2530*30877f79SAndroid Build Coastguard Worker        top of their ad display containers via `AdsLoader.AdViewProvider`.
2531*30877f79SAndroid Build Coastguard Worker        `PlayerView` implements this interface and will register its control
2532*30877f79SAndroid Build Coastguard Worker        view. This makes it possible for ad loading SDKs to calculate ad
2533*30877f79SAndroid Build Coastguard Worker        viewability accurately.
2534*30877f79SAndroid Build Coastguard Worker*   DASH: Fix issue handling large `EventStream` presentation timestamps
2535*30877f79SAndroid Build Coastguard Worker    ([#5490](https://github.com/google/ExoPlayer/issues/5490)).
2536*30877f79SAndroid Build Coastguard Worker*   HLS: Fix transition to STATE_ENDED when playing fragmented mp4 in chunkless
2537*30877f79SAndroid Build Coastguard Worker    preparation ([#5524](https://github.com/google/ExoPlayer/issues/5524)).
2538*30877f79SAndroid Build Coastguard Worker*   Revert workaround for video quality problems with Amlogic decoders, as this
2539*30877f79SAndroid Build Coastguard Worker    may cause problems for some devices and/or non-interlaced content
2540*30877f79SAndroid Build Coastguard Worker    ([#5003](https://github.com/google/ExoPlayer/issues/5003)).
2541*30877f79SAndroid Build Coastguard Worker
2542*30877f79SAndroid Build Coastguard Worker### 2.9.5 (2019-01-31)
2543*30877f79SAndroid Build Coastguard Worker
2544*30877f79SAndroid Build Coastguard Worker*   HLS: Parse `CHANNELS` attribute from `EXT-X-MEDIA` tag.
2545*30877f79SAndroid Build Coastguard Worker*   ConcatenatingMediaSource:
2546*30877f79SAndroid Build Coastguard Worker    *   Add `Handler` parameter to methods that take a callback `Runnable`.
2547*30877f79SAndroid Build Coastguard Worker    *   Fix issue with dropped messages when releasing the source
2548*30877f79SAndroid Build Coastguard Worker        ([#5464](https://github.com/google/ExoPlayer/issues/5464)).
2549*30877f79SAndroid Build Coastguard Worker*   ExtractorMediaSource: Fix issue that could cause the player to get stuck
2550*30877f79SAndroid Build Coastguard Worker    buffering at the end of the media.
2551*30877f79SAndroid Build Coastguard Worker*   PlayerView: Fix issue preventing `OnClickListener` from receiving events
2552*30877f79SAndroid Build Coastguard Worker    ([#5433](https://github.com/google/ExoPlayer/issues/5433)).
2553*30877f79SAndroid Build Coastguard Worker*   IMA extension: Upgrade IMA dependency to 3.10.6.
2554*30877f79SAndroid Build Coastguard Worker*   Cronet extension: Upgrade Cronet dependency to 71.3578.98.
2555*30877f79SAndroid Build Coastguard Worker*   OkHttp extension: Upgrade OkHttp dependency to 3.12.1.
2556*30877f79SAndroid Build Coastguard Worker*   MP3: Wider fix for issue where streams would play twice on some Samsung
2557*30877f79SAndroid Build Coastguard Worker    devices ([#4519](https://github.com/google/ExoPlayer/issues/4519)).
2558*30877f79SAndroid Build Coastguard Worker
2559*30877f79SAndroid Build Coastguard Worker### 2.9.4 (2019-01-15)
2560*30877f79SAndroid Build Coastguard Worker
2561*30877f79SAndroid Build Coastguard Worker*   IMA extension: Clear ads loader listeners on release
2562*30877f79SAndroid Build Coastguard Worker    ([#4114](https://github.com/google/ExoPlayer/issues/4114)).
2563*30877f79SAndroid Build Coastguard Worker*   SmoothStreaming: Fix support for subtitles in DRM protected streams
2564*30877f79SAndroid Build Coastguard Worker    ([#5378](https://github.com/google/ExoPlayer/issues/5378)).
2565*30877f79SAndroid Build Coastguard Worker*   FFmpeg extension: Treat invalid data errors as non-fatal to match the
2566*30877f79SAndroid Build Coastguard Worker    behavior of MediaCodec
2567*30877f79SAndroid Build Coastguard Worker    ([#5293](https://github.com/google/ExoPlayer/issues/5293)).
2568*30877f79SAndroid Build Coastguard Worker*   GVR extension: upgrade GVR SDK dependency to 1.190.0.
2569*30877f79SAndroid Build Coastguard Worker*   Associate fatal player errors of type SOURCE with the loading source in
2570*30877f79SAndroid Build Coastguard Worker    `AnalyticsListener.EventTime`
2571*30877f79SAndroid Build Coastguard Worker    ([#5407](https://github.com/google/ExoPlayer/issues/5407)).
2572*30877f79SAndroid Build Coastguard Worker*   Add `startPositionUs` to `MediaSource.createPeriod`. This fixes an issue
2573*30877f79SAndroid Build Coastguard Worker    where using lazy preparation in `ConcatenatingMediaSource` with an
2574*30877f79SAndroid Build Coastguard Worker    `ExtractorMediaSource` overrides initial seek positions
2575*30877f79SAndroid Build Coastguard Worker    ([#5350](https://github.com/google/ExoPlayer/issues/5350)).
2576*30877f79SAndroid Build Coastguard Worker*   Add subtext to the `MediaDescriptionAdapter` of the
2577*30877f79SAndroid Build Coastguard Worker    `PlayerNotificationManager`.
2578*30877f79SAndroid Build Coastguard Worker*   Add workaround for video quality problems with Amlogic decoders
2579*30877f79SAndroid Build Coastguard Worker    ([#5003](https://github.com/google/ExoPlayer/issues/5003)).
2580*30877f79SAndroid Build Coastguard Worker*   Fix issue where sending callbacks for playlist changes may cause problems
2581*30877f79SAndroid Build Coastguard Worker    because of parallel player access
2582*30877f79SAndroid Build Coastguard Worker    ([#5240](https://github.com/google/ExoPlayer/issues/5240)).
2583*30877f79SAndroid Build Coastguard Worker*   Fix issue with reusing a `ClippingMediaSource` with an inner
2584*30877f79SAndroid Build Coastguard Worker    `ExtractorMediaSource` and a non-zero start position
2585*30877f79SAndroid Build Coastguard Worker    ([#5351](https://github.com/google/ExoPlayer/issues/5351)).
2586*30877f79SAndroid Build Coastguard Worker*   Fix issue where uneven track durations in MP4 streams can cause OOM problems
2587*30877f79SAndroid Build Coastguard Worker    ([#3670](https://github.com/google/ExoPlayer/issues/3670)).
2588*30877f79SAndroid Build Coastguard Worker
2589*30877f79SAndroid Build Coastguard Worker### 2.9.3 (2018-12-20)
2590*30877f79SAndroid Build Coastguard Worker
2591*30877f79SAndroid Build Coastguard Worker*   Captions: Support PNG subtitles in SMPTE-TT
2592*30877f79SAndroid Build Coastguard Worker    ([#1583](https://github.com/google/ExoPlayer/issues/1583)).
2593*30877f79SAndroid Build Coastguard Worker*   MPEG-TS: Use random access indicators to minimize the need for
2594*30877f79SAndroid Build Coastguard Worker    `FLAG_ALLOW_NON_IDR_KEYFRAMES`.
2595*30877f79SAndroid Build Coastguard Worker*   Downloading: Reduce time taken to remove downloads
2596*30877f79SAndroid Build Coastguard Worker    ([#5136](https://github.com/google/ExoPlayer/issues/5136)).
2597*30877f79SAndroid Build Coastguard Worker*   MP3:
2598*30877f79SAndroid Build Coastguard Worker    *   Use the true bitrate for constant-bitrate MP3 seeking.
2599*30877f79SAndroid Build Coastguard Worker    *   Fix issue where streams would play twice on some Samsung devices
2600*30877f79SAndroid Build Coastguard Worker        ([#4519](https://github.com/google/ExoPlayer/issues/4519)).
2601*30877f79SAndroid Build Coastguard Worker*   Fix regression where some audio formats were incorrectly marked as being
2602*30877f79SAndroid Build Coastguard Worker    unplayable due to under-reporting of platform decoder capabilities
2603*30877f79SAndroid Build Coastguard Worker    ([#5145](https://github.com/google/ExoPlayer/issues/5145)).
2604*30877f79SAndroid Build Coastguard Worker*   Fix decode-only frame skipping on Nvidia Shield TV devices.
2605*30877f79SAndroid Build Coastguard Worker*   Workaround for MiTV (dangal) issue when swapping output surface
2606*30877f79SAndroid Build Coastguard Worker    ([#5169](https://github.com/google/ExoPlayer/issues/5169)).
2607*30877f79SAndroid Build Coastguard Worker
2608*30877f79SAndroid Build Coastguard Worker### 2.9.2 (2018-11-28)
2609*30877f79SAndroid Build Coastguard Worker
2610*30877f79SAndroid Build Coastguard Worker*   HLS:
2611*30877f79SAndroid Build Coastguard Worker    *   Fix issue causing unnecessary media playlist requests when playing live
2612*30877f79SAndroid Build Coastguard Worker        streams ([#5059](https://github.com/google/ExoPlayer/issues/5059)).
2613*30877f79SAndroid Build Coastguard Worker    *   Fix decoder re-instantiation issue for packed audio streams
2614*30877f79SAndroid Build Coastguard Worker        ([#5063](https://github.com/google/ExoPlayer/issues/5063)).
2615*30877f79SAndroid Build Coastguard Worker*   MP4: Support Opus and FLAC in the MP4 container, and in DASH
2616*30877f79SAndroid Build Coastguard Worker    ([#4883](https://github.com/google/ExoPlayer/issues/4883)).
2617*30877f79SAndroid Build Coastguard Worker*   DASH: Fix detecting the end of live events
2618*30877f79SAndroid Build Coastguard Worker    ([#4780](https://github.com/google/ExoPlayer/issues/4780)).
2619*30877f79SAndroid Build Coastguard Worker*   Spherical video: Fall back to `TYPE_ROTATION_VECTOR` if
2620*30877f79SAndroid Build Coastguard Worker    `TYPE_GAME_ROTATION_VECTOR` is unavailable
2621*30877f79SAndroid Build Coastguard Worker    ([#5119](https://github.com/google/ExoPlayer/issues/5119)).
2622*30877f79SAndroid Build Coastguard Worker*   Support seeking for a wider range of MPEG-TS streams
2623*30877f79SAndroid Build Coastguard Worker    ([#5097](https://github.com/google/ExoPlayer/issues/5097)).
2624*30877f79SAndroid Build Coastguard Worker*   Include channel count in audio capabilities check
2625*30877f79SAndroid Build Coastguard Worker    ([#4690](https://github.com/google/ExoPlayer/issues/4690)).
2626*30877f79SAndroid Build Coastguard Worker*   Fix issue with applying the `show_buffering` attribute in `PlayerView`
2627*30877f79SAndroid Build Coastguard Worker    ([#5139](https://github.com/google/ExoPlayer/issues/5139)).
2628*30877f79SAndroid Build Coastguard Worker*   Fix issue where null `Metadata` was output when it failed to decode
2629*30877f79SAndroid Build Coastguard Worker    ([#5149](https://github.com/google/ExoPlayer/issues/5149)).
2630*30877f79SAndroid Build Coastguard Worker*   Fix playback of some invalid but playable MP4 streams by replacing
2631*30877f79SAndroid Build Coastguard Worker    assertions with logged warnings in sample table parsing code
2632*30877f79SAndroid Build Coastguard Worker    ([#5162](https://github.com/google/ExoPlayer/issues/5162)).
2633*30877f79SAndroid Build Coastguard Worker*   Fix UUID passed to `MediaCrypto` when using `C.CLEARKEY_UUID` before API 27.
2634*30877f79SAndroid Build Coastguard Worker
2635*30877f79SAndroid Build Coastguard Worker### 2.9.1 (2018-11-01)
2636*30877f79SAndroid Build Coastguard Worker
2637*30877f79SAndroid Build Coastguard Worker*   Add convenience methods `Player.next`, `Player.previous`, `Player.hasNext`
2638*30877f79SAndroid Build Coastguard Worker    and `Player.hasPrevious`
2639*30877f79SAndroid Build Coastguard Worker    ([#4863](https://github.com/google/ExoPlayer/issues/4863)).
2640*30877f79SAndroid Build Coastguard Worker*   Improve initial bandwidth meter estimates using the current country and
2641*30877f79SAndroid Build Coastguard Worker    network type.
2642*30877f79SAndroid Build Coastguard Worker*   IMA extension:
2643*30877f79SAndroid Build Coastguard Worker    *   For preroll to live stream transitions, project forward the loading
2644*30877f79SAndroid Build Coastguard Worker        position to avoid being behind the live window.
2645*30877f79SAndroid Build Coastguard Worker    *   Let apps specify whether to focus the skip button on ATV
2646*30877f79SAndroid Build Coastguard Worker        ([#5019](https://github.com/google/ExoPlayer/issues/5019)).
2647*30877f79SAndroid Build Coastguard Worker*   MP3:
2648*30877f79SAndroid Build Coastguard Worker    *   Support seeking based on MLLT metadata
2649*30877f79SAndroid Build Coastguard Worker        ([#3241](https://github.com/google/ExoPlayer/issues/3241)).
2650*30877f79SAndroid Build Coastguard Worker    *   Fix handling of streams with appended data
2651*30877f79SAndroid Build Coastguard Worker        ([#4954](https://github.com/google/ExoPlayer/issues/4954)).
2652*30877f79SAndroid Build Coastguard Worker*   DASH: Parse ProgramInformation element if present in the manifest.
2653*30877f79SAndroid Build Coastguard Worker*   HLS:
2654*30877f79SAndroid Build Coastguard Worker    *   Add constructor to `DefaultHlsExtractorFactory` for adding TS payload
2655*30877f79SAndroid Build Coastguard Worker        reader factory flags
2656*30877f79SAndroid Build Coastguard Worker        ([#4861](https://github.com/google/ExoPlayer/issues/4861)).
2657*30877f79SAndroid Build Coastguard Worker    *   Fix bug in segment sniffing
2658*30877f79SAndroid Build Coastguard Worker        ([#5039](https://github.com/google/ExoPlayer/issues/5039)).
2659*30877f79SAndroid Build Coastguard Worker*   SubRip: Add support for alignment tags, and remove tags from the displayed
2660*30877f79SAndroid Build Coastguard Worker    captions ([#4306](https://github.com/google/ExoPlayer/issues/4306)).
2661*30877f79SAndroid Build Coastguard Worker*   Fix issue with blind seeking to windows with non-zero offset in a
2662*30877f79SAndroid Build Coastguard Worker    `ConcatenatingMediaSource`
2663*30877f79SAndroid Build Coastguard Worker    ([#4873](https://github.com/google/ExoPlayer/issues/4873)).
2664*30877f79SAndroid Build Coastguard Worker*   Fix logic for enabling next and previous actions in `TimelineQueueNavigator`
2665*30877f79SAndroid Build Coastguard Worker    ([#5065](https://github.com/google/ExoPlayer/issues/5065)).
2666*30877f79SAndroid Build Coastguard Worker*   Fix issue where audio focus handling could not be disabled after enabling it
2667*30877f79SAndroid Build Coastguard Worker    ([#5055](https://github.com/google/ExoPlayer/issues/5055)).
2668*30877f79SAndroid Build Coastguard Worker*   Fix issue where subtitles were positioned incorrectly if `SubtitleView` had
2669*30877f79SAndroid Build Coastguard Worker    a non-zero position offset to its parent
2670*30877f79SAndroid Build Coastguard Worker    ([#4788](https://github.com/google/ExoPlayer/issues/4788)).
2671*30877f79SAndroid Build Coastguard Worker*   Fix issue where the buffered position was not updated correctly when
2672*30877f79SAndroid Build Coastguard Worker    transitioning between periods
2673*30877f79SAndroid Build Coastguard Worker    ([#4899](https://github.com/google/ExoPlayer/issues/4899)).
2674*30877f79SAndroid Build Coastguard Worker*   Fix issue where a `NullPointerException` is thrown when removing an
2675*30877f79SAndroid Build Coastguard Worker    unprepared media source from a `ConcatenatingMediaSource` with the
2676*30877f79SAndroid Build Coastguard Worker    `useLazyPreparation` option enabled
2677*30877f79SAndroid Build Coastguard Worker    ([#4986](https://github.com/google/ExoPlayer/issues/4986)).
2678*30877f79SAndroid Build Coastguard Worker*   Work around an issue where a non-empty end-of-stream audio buffer would be
2679*30877f79SAndroid Build Coastguard Worker    output with timestamp zero, causing the player position to jump backwards
2680*30877f79SAndroid Build Coastguard Worker    ([#5045](https://github.com/google/ExoPlayer/issues/5045)).
2681*30877f79SAndroid Build Coastguard Worker*   Suppress a spurious assertion failure on some Samsung devices
2682*30877f79SAndroid Build Coastguard Worker    ([#4532](https://github.com/google/ExoPlayer/issues/4532)).
2683*30877f79SAndroid Build Coastguard Worker*   Suppress spurious "references unknown class member" shrinking warning
2684*30877f79SAndroid Build Coastguard Worker    ([#4890](https://github.com/google/ExoPlayer/issues/4890)).
2685*30877f79SAndroid Build Coastguard Worker*   Swap recommended order for google() and jcenter() in gradle config
2686*30877f79SAndroid Build Coastguard Worker    ([#4997](https://github.com/google/ExoPlayer/issues/4997)).
2687*30877f79SAndroid Build Coastguard Worker
2688*30877f79SAndroid Build Coastguard Worker### 2.9.0 (2018-09-06)
2689*30877f79SAndroid Build Coastguard Worker
2690*30877f79SAndroid Build Coastguard Worker*   Turn on Java 8 compiler support for the ExoPlayer library. Apps may need to
2691*30877f79SAndroid Build Coastguard Worker    add `compileOptions { targetCompatibility JavaVersion.VERSION_1_8 }` to
2692*30877f79SAndroid Build Coastguard Worker    their gradle settings to ensure bytecode compatibility.
2693*30877f79SAndroid Build Coastguard Worker*   Set `compileSdkVersion` and `targetSdkVersion` to 28.
2694*30877f79SAndroid Build Coastguard Worker*   Support for automatic audio focus handling via
2695*30877f79SAndroid Build Coastguard Worker    `SimpleExoPlayer.setAudioAttributes`.
2696*30877f79SAndroid Build Coastguard Worker*   Add `ExoPlayer.retry` convenience method.
2697*30877f79SAndroid Build Coastguard Worker*   Add `AudioListener` for listening to changes in audio configuration during
2698*30877f79SAndroid Build Coastguard Worker    playback ([#3994](https://github.com/google/ExoPlayer/issues/3994)).
2699*30877f79SAndroid Build Coastguard Worker*   Add `LoadErrorHandlingPolicy` to allow configuration of load error handling
2700*30877f79SAndroid Build Coastguard Worker    across `MediaSource` implementations
2701*30877f79SAndroid Build Coastguard Worker    ([#3370](https://github.com/google/ExoPlayer/issues/3370)).
2702*30877f79SAndroid Build Coastguard Worker*   Allow passing a `Looper`, which specifies the thread that must be used to
2703*30877f79SAndroid Build Coastguard Worker    access the player, when instantiating player instances using
2704*30877f79SAndroid Build Coastguard Worker    `ExoPlayerFactory`
2705*30877f79SAndroid Build Coastguard Worker    ([#4278](https://github.com/google/ExoPlayer/issues/4278)).
2706*30877f79SAndroid Build Coastguard Worker*   Allow setting log level for ExoPlayer logcat output
2707*30877f79SAndroid Build Coastguard Worker    ([#4665](https://github.com/google/ExoPlayer/issues/4665)).
2708*30877f79SAndroid Build Coastguard Worker*   Simplify `BandwidthMeter` injection: The `BandwidthMeter` should now be
2709*30877f79SAndroid Build Coastguard Worker    passed directly to `ExoPlayerFactory`, instead of to
2710*30877f79SAndroid Build Coastguard Worker    `TrackSelection.Factory` and `DataSource.Factory`. The `BandwidthMeter` is
2711*30877f79SAndroid Build Coastguard Worker    passed to the components that need it internally. The `BandwidthMeter` may
2712*30877f79SAndroid Build Coastguard Worker    also be omitted, in which case a default instance will be used.
2713*30877f79SAndroid Build Coastguard Worker*   Spherical video:
2714*30877f79SAndroid Build Coastguard Worker    *   Support for spherical video by setting `surface_type="spherical_view"`
2715*30877f79SAndroid Build Coastguard Worker        on `PlayerView`.
2716*30877f79SAndroid Build Coastguard Worker    *   Support for
2717*30877f79SAndroid Build Coastguard Worker        [VR180](https://github.com/google/spatial-media/blob/master/docs/vr180.md).
2718*30877f79SAndroid Build Coastguard Worker*   HLS:
2719*30877f79SAndroid Build Coastguard Worker    *   Support PlayReady.
2720*30877f79SAndroid Build Coastguard Worker    *   Add container format sniffing
2721*30877f79SAndroid Build Coastguard Worker        ([#2025](https://github.com/google/ExoPlayer/issues/2025)).
2722*30877f79SAndroid Build Coastguard Worker    *   Support alternative `EXT-X-KEY` tags.
2723*30877f79SAndroid Build Coastguard Worker    *   Support `EXT-X-INDEPENDENT-SEGMENTS` in the master playlist.
2724*30877f79SAndroid Build Coastguard Worker    *   Support variable substitution
2725*30877f79SAndroid Build Coastguard Worker        ([#4422](https://github.com/google/ExoPlayer/issues/4422)).
2726*30877f79SAndroid Build Coastguard Worker    *   Fix the bitrate being unset on primary track sample formats
2727*30877f79SAndroid Build Coastguard Worker        ([#3297](https://github.com/google/ExoPlayer/issues/3297)).
2728*30877f79SAndroid Build Coastguard Worker    *   Make `HlsMediaSource.Factory` take a factory of trackers instead of a
2729*30877f79SAndroid Build Coastguard Worker        tracker instance
2730*30877f79SAndroid Build Coastguard Worker        ([#4814](https://github.com/google/ExoPlayer/issues/4814)).
2731*30877f79SAndroid Build Coastguard Worker*   DASH:
2732*30877f79SAndroid Build Coastguard Worker    *   Support `messageData` attribute for in-manifest event streams.
2733*30877f79SAndroid Build Coastguard Worker    *   Clip periods to their specified durations
2734*30877f79SAndroid Build Coastguard Worker        ([#4185](https://github.com/google/ExoPlayer/issues/4185)).
2735*30877f79SAndroid Build Coastguard Worker*   Improve seeking support for progressive streams:
2736*30877f79SAndroid Build Coastguard Worker    *   Support seeking in MPEG-TS
2737*30877f79SAndroid Build Coastguard Worker        ([#966](https://github.com/google/ExoPlayer/issues/966)).
2738*30877f79SAndroid Build Coastguard Worker    *   Support seeking in MPEG-PS
2739*30877f79SAndroid Build Coastguard Worker        ([#4476](https://github.com/google/ExoPlayer/issues/4476)).
2740*30877f79SAndroid Build Coastguard Worker    *   Support approximate seeking in ADTS using a constant bitrate assumption
2741*30877f79SAndroid Build Coastguard Worker        ([#4548](https://github.com/google/ExoPlayer/issues/4548)). The
2742*30877f79SAndroid Build Coastguard Worker        `FLAG_ENABLE_CONSTANT_BITRATE_SEEKING` flag must be set on the extractor
2743*30877f79SAndroid Build Coastguard Worker        to enable this functionality.
2744*30877f79SAndroid Build Coastguard Worker    *   Support approximate seeking in AMR using a constant bitrate assumption.
2745*30877f79SAndroid Build Coastguard Worker        The `FLAG_ENABLE_CONSTANT_BITRATE_SEEKING` flag must be set on the
2746*30877f79SAndroid Build Coastguard Worker        extractor to enable this functionality.
2747*30877f79SAndroid Build Coastguard Worker    *   Add `DefaultExtractorsFactory.setConstantBitrateSeekingEnabled` to
2748*30877f79SAndroid Build Coastguard Worker        enable approximate seeking using a constant bitrate assumption on all
2749*30877f79SAndroid Build Coastguard Worker        extractors that support it.
2750*30877f79SAndroid Build Coastguard Worker*   Video:
2751*30877f79SAndroid Build Coastguard Worker    *   Add callback to `VideoListener` to notify of surface size changes.
2752*30877f79SAndroid Build Coastguard Worker    *   Improve performance when playing high frame-rate content, and when
2753*30877f79SAndroid Build Coastguard Worker        playing at greater than 1x speed
2754*30877f79SAndroid Build Coastguard Worker        ([#2777](https://github.com/google/ExoPlayer/issues/2777)).
2755*30877f79SAndroid Build Coastguard Worker    *   Scale up the initial video decoder maximum input size so playlist
2756*30877f79SAndroid Build Coastguard Worker        transitions with small increases in maximum sample size do not require
2757*30877f79SAndroid Build Coastguard Worker        reinitialization
2758*30877f79SAndroid Build Coastguard Worker        ([#4510](https://github.com/google/ExoPlayer/issues/4510)).
2759*30877f79SAndroid Build Coastguard Worker    *   Fix a bug where the player would not transition to the ended state when
2760*30877f79SAndroid Build Coastguard Worker        playing video in tunneled mode.
2761*30877f79SAndroid Build Coastguard Worker*   Audio:
2762*30877f79SAndroid Build Coastguard Worker    *   Support attaching auxiliary audio effects to the `AudioTrack` via
2763*30877f79SAndroid Build Coastguard Worker        `Player.setAuxEffectInfo` and `Player.clearAuxEffectInfo`.
2764*30877f79SAndroid Build Coastguard Worker    *   Support seamless adaptation while playing xHE-AAC streams.
2765*30877f79SAndroid Build Coastguard Worker        ([#4360](https://github.com/google/ExoPlayer/issues/4360)).
2766*30877f79SAndroid Build Coastguard Worker    *   Increase `AudioTrack` buffer sizes to the theoretical maximum required
2767*30877f79SAndroid Build Coastguard Worker        for each encoding for passthrough playbacks
2768*30877f79SAndroid Build Coastguard Worker        ([#3803](https://github.com/google/ExoPlayer/issues/3803)).
2769*30877f79SAndroid Build Coastguard Worker    *   WAV: Fix issue where white noise would be output at the end of playback
2770*30877f79SAndroid Build Coastguard Worker        ([#4724](https://github.com/google/ExoPlayer/issues/4724)).
2771*30877f79SAndroid Build Coastguard Worker    *   MP3: Fix issue where streams would play twice on the SM-T530
2772*30877f79SAndroid Build Coastguard Worker        ([#4519](https://github.com/google/ExoPlayer/issues/4519)).
2773*30877f79SAndroid Build Coastguard Worker*   Analytics:
2774*30877f79SAndroid Build Coastguard Worker    *   Add callbacks to `DefaultDrmSessionEventListener` and
2775*30877f79SAndroid Build Coastguard Worker        `AnalyticsListener` to be notified of acquired and released DRM
2776*30877f79SAndroid Build Coastguard Worker        sessions.
2777*30877f79SAndroid Build Coastguard Worker    *   Add uri field to `LoadEventInfo` in `MediaSourceEventListener` and
2778*30877f79SAndroid Build Coastguard Worker        `AnalyticsListener` callbacks. This uri is the redirected uri if
2779*30877f79SAndroid Build Coastguard Worker        redirection occurred
2780*30877f79SAndroid Build Coastguard Worker        ([#2054](https://github.com/google/ExoPlayer/issues/2054)).
2781*30877f79SAndroid Build Coastguard Worker    *   Add response headers field to `LoadEventInfo` in
2782*30877f79SAndroid Build Coastguard Worker        `MediaSourceEventListener` and `AnalyticsListener` callbacks
2783*30877f79SAndroid Build Coastguard Worker        ([#4361](https://github.com/google/ExoPlayer/issues/4361) and
2784*30877f79SAndroid Build Coastguard Worker        [#4615](https://github.com/google/ExoPlayer/issues/4615)).
2785*30877f79SAndroid Build Coastguard Worker*   UI:
2786*30877f79SAndroid Build Coastguard Worker    *   Add option to `PlayerView` to show buffering view when playWhenReady is
2787*30877f79SAndroid Build Coastguard Worker        false ([#4304](https://github.com/google/ExoPlayer/issues/4304)).
2788*30877f79SAndroid Build Coastguard Worker    *   Allow any `Drawable` to be used as `PlayerView` default artwork.
2789*30877f79SAndroid Build Coastguard Worker*   ConcatenatingMediaSource:
2790*30877f79SAndroid Build Coastguard Worker    *   Support lazy preparation of playlist media sources
2791*30877f79SAndroid Build Coastguard Worker        ([#3972](https://github.com/google/ExoPlayer/issues/3972)).
2792*30877f79SAndroid Build Coastguard Worker    *   Support range removal with `removeMediaSourceRange` methods
2793*30877f79SAndroid Build Coastguard Worker        ([#4542](https://github.com/google/ExoPlayer/issues/4542)).
2794*30877f79SAndroid Build Coastguard Worker    *   Support setting a new shuffle order with `setShuffleOrder`
2795*30877f79SAndroid Build Coastguard Worker        ([#4791](https://github.com/google/ExoPlayer/issues/4791)).
2796*30877f79SAndroid Build Coastguard Worker*   MPEG-TS: Support CEA-608/708 in H262
2797*30877f79SAndroid Build Coastguard Worker    ([#2565](https://github.com/google/ExoPlayer/issues/2565)).
2798*30877f79SAndroid Build Coastguard Worker*   Allow configuration of the back buffer in `DefaultLoadControl.Builder`
2799*30877f79SAndroid Build Coastguard Worker    ([#4857](https://github.com/google/ExoPlayer/issues/4857)).
2800*30877f79SAndroid Build Coastguard Worker*   Allow apps to pass a `CacheKeyFactory` for setting custom cache keys when
2801*30877f79SAndroid Build Coastguard Worker    creating a `CacheDataSource`.
2802*30877f79SAndroid Build Coastguard Worker*   Provide additional information for adaptive track selection.
2803*30877f79SAndroid Build Coastguard Worker    `TrackSelection.updateSelectedTrack` has two new parameters for the current
2804*30877f79SAndroid Build Coastguard Worker    queue of media chunks and iterators for information about upcoming chunks.
2805*30877f79SAndroid Build Coastguard Worker*   Allow `MediaCodecSelector`s to return multiple compatible decoders for
2806*30877f79SAndroid Build Coastguard Worker    `MediaCodecRenderer`, and provide an (optional) `MediaCodecSelector` that
2807*30877f79SAndroid Build Coastguard Worker    falls back to less preferred decoders like `MediaCodec.createDecoderByType`
2808*30877f79SAndroid Build Coastguard Worker    ([#273](https://github.com/google/ExoPlayer/issues/273)).
2809*30877f79SAndroid Build Coastguard Worker*   Enable gzip for requests made by `SingleSampleMediaSource`
2810*30877f79SAndroid Build Coastguard Worker    ([#4771](https://github.com/google/ExoPlayer/issues/4771)).
2811*30877f79SAndroid Build Coastguard Worker*   Fix bug reporting buffered position for multi-period windows, and add
2812*30877f79SAndroid Build Coastguard Worker    convenience methods `Player.getTotalBufferedDuration` and
2813*30877f79SAndroid Build Coastguard Worker    `Player.getContentBufferedDuration`
2814*30877f79SAndroid Build Coastguard Worker    ([#4023](https://github.com/google/ExoPlayer/issues/4023)).
2815*30877f79SAndroid Build Coastguard Worker*   Fix bug where transitions to clipped media sources would happen too early
2816*30877f79SAndroid Build Coastguard Worker    ([#4583](https://github.com/google/ExoPlayer/issues/4583)).
2817*30877f79SAndroid Build Coastguard Worker*   Fix bugs reporting events for multi-period media sources
2818*30877f79SAndroid Build Coastguard Worker    ([#4492](https://github.com/google/ExoPlayer/issues/4492) and
2819*30877f79SAndroid Build Coastguard Worker    [#4634](https://github.com/google/ExoPlayer/issues/4634)).
2820*30877f79SAndroid Build Coastguard Worker*   Fix issue where removing looping media from a playlist throws an exception
2821*30877f79SAndroid Build Coastguard Worker    ([#4871](https://github.com/google/ExoPlayer/issues/4871)).
2822*30877f79SAndroid Build Coastguard Worker*   Fix issue where the preferred audio or text track would not be selected if
2823*30877f79SAndroid Build Coastguard Worker    mapped onto a secondary renderer of the corresponding type
2824*30877f79SAndroid Build Coastguard Worker    ([#4711](http://github.com/google/ExoPlayer/issues/4711)).
2825*30877f79SAndroid Build Coastguard Worker*   Fix issue where errors of upcoming playlist items are thrown too early
2826*30877f79SAndroid Build Coastguard Worker    ([#4661](https://github.com/google/ExoPlayer/issues/4661)).
2827*30877f79SAndroid Build Coastguard Worker*   Allow edit lists which do not start with a sync sample.
2828*30877f79SAndroid Build Coastguard Worker    ([#4774](https://github.com/google/ExoPlayer/issues/4774)).
2829*30877f79SAndroid Build Coastguard Worker*   Fix issue with audio discontinuities at period transitions, e.g. when
2830*30877f79SAndroid Build Coastguard Worker    looping ([#3829](https://github.com/google/ExoPlayer/issues/3829)).
2831*30877f79SAndroid Build Coastguard Worker*   Fix issue where `player.getCurrentTag()` throws an
2832*30877f79SAndroid Build Coastguard Worker    `IndexOutOfBoundsException`
2833*30877f79SAndroid Build Coastguard Worker    ([#4822](https://github.com/google/ExoPlayer/issues/4822)).
2834*30877f79SAndroid Build Coastguard Worker*   Fix bug preventing use of multiple key session support (`multiSession=true`)
2835*30877f79SAndroid Build Coastguard Worker    for non-Widevine `DefaultDrmSessionManager` instances
2836*30877f79SAndroid Build Coastguard Worker    ([#4834](https://github.com/google/ExoPlayer/issues/4834)).
2837*30877f79SAndroid Build Coastguard Worker*   Fix issue where audio and video would desynchronize when playing
2838*30877f79SAndroid Build Coastguard Worker    concatenations of gapless content
2839*30877f79SAndroid Build Coastguard Worker    ([#4559](https://github.com/google/ExoPlayer/issues/4559)).
2840*30877f79SAndroid Build Coastguard Worker*   IMA extension:
2841*30877f79SAndroid Build Coastguard Worker    *   Refine the previous fix for empty ad groups to avoid discarding ad
2842*30877f79SAndroid Build Coastguard Worker        breaks unnecessarily
2843*30877f79SAndroid Build Coastguard Worker        ([#4030](https://github.com/google/ExoPlayer/issues/4030) and
2844*30877f79SAndroid Build Coastguard Worker        [#4280](https://github.com/google/ExoPlayer/issues/4280)).
2845*30877f79SAndroid Build Coastguard Worker    *   Fix handling of empty postrolls
2846*30877f79SAndroid Build Coastguard Worker        ([#4681](https://github.com/google/ExoPlayer/issues/4681)).
2847*30877f79SAndroid Build Coastguard Worker    *   Fix handling of postrolls with multiple ads
2848*30877f79SAndroid Build Coastguard Worker        ([#4710](https://github.com/google/ExoPlayer/issues/4710)).
2849*30877f79SAndroid Build Coastguard Worker*   MediaSession extension:
2850*30877f79SAndroid Build Coastguard Worker    *   Add `MediaSessionConnector.setCustomErrorMessage` to support setting
2851*30877f79SAndroid Build Coastguard Worker        custom error messages.
2852*30877f79SAndroid Build Coastguard Worker    *   Add `MediaMetadataProvider` to support setting custom metadata
2853*30877f79SAndroid Build Coastguard Worker        ([#3497](https://github.com/google/ExoPlayer/issues/3497)).
2854*30877f79SAndroid Build Coastguard Worker*   Cronet extension: Now distributed via jCenter.
2855*30877f79SAndroid Build Coastguard Worker*   FFmpeg extension: Support mu-law and A-law PCM.
2856*30877f79SAndroid Build Coastguard Worker
2857*30877f79SAndroid Build Coastguard Worker### 2.8.4 (2018-08-17)
2858*30877f79SAndroid Build Coastguard Worker
2859*30877f79SAndroid Build Coastguard Worker*   IMA extension: Improve handling of consecutive empty ad groups
2860*30877f79SAndroid Build Coastguard Worker    ([#4030](https://github.com/google/ExoPlayer/issues/4030)),
2861*30877f79SAndroid Build Coastguard Worker    ([#4280](https://github.com/google/ExoPlayer/issues/4280)).
2862*30877f79SAndroid Build Coastguard Worker
2863*30877f79SAndroid Build Coastguard Worker### 2.8.3 (2018-07-23)
2864*30877f79SAndroid Build Coastguard Worker
2865*30877f79SAndroid Build Coastguard Worker*   IMA extension:
2866*30877f79SAndroid Build Coastguard Worker    *   Fix behavior when creating/releasing the player then releasing
2867*30877f79SAndroid Build Coastguard Worker        `ImaAdsLoader`
2868*30877f79SAndroid Build Coastguard Worker        ([#3879](https://github.com/google/ExoPlayer/issues/3879)).
2869*30877f79SAndroid Build Coastguard Worker    *   Add support for setting slots for companion ads.
2870*30877f79SAndroid Build Coastguard Worker*   Captions:
2871*30877f79SAndroid Build Coastguard Worker    *   TTML: Fix an issue with TTML using font size as % of cell resolution
2872*30877f79SAndroid Build Coastguard Worker        that makes `SubtitleView.setApplyEmbeddedFontSizes()` not work
2873*30877f79SAndroid Build Coastguard Worker        correctly. ([#4491](https://github.com/google/ExoPlayer/issues/4491)).
2874*30877f79SAndroid Build Coastguard Worker    *   CEA-608: Improve handling of embedded styles
2875*30877f79SAndroid Build Coastguard Worker        ([#4321](https://github.com/google/ExoPlayer/issues/4321)).
2876*30877f79SAndroid Build Coastguard Worker*   DASH:
2877*30877f79SAndroid Build Coastguard Worker    *   Exclude text streams from duration calculations
2878*30877f79SAndroid Build Coastguard Worker        ([#4029](https://github.com/google/ExoPlayer/issues/4029)).
2879*30877f79SAndroid Build Coastguard Worker    *   Fix freezing when playing multi-period manifests with `EventStream`s
2880*30877f79SAndroid Build Coastguard Worker        ([#4492](https://github.com/google/ExoPlayer/issues/4492)).
2881*30877f79SAndroid Build Coastguard Worker*   DRM: Allow DrmInitData to carry a license server URL
2882*30877f79SAndroid Build Coastguard Worker    ([#3393](https://github.com/google/ExoPlayer/issues/3393)).
2883*30877f79SAndroid Build Coastguard Worker*   MPEG-TS: Fix bug preventing SCTE-35 cues from being output
2884*30877f79SAndroid Build Coastguard Worker    ([#4573](https://github.com/google/ExoPlayer/issues/4573)).
2885*30877f79SAndroid Build Coastguard Worker*   Expose all internal ID3 data stored in MP4 udta boxes, and switch from using
2886*30877f79SAndroid Build Coastguard Worker    CommentFrame to InternalFrame for frames with gapless metadata in MP4.
2887*30877f79SAndroid Build Coastguard Worker*   Add `PlayerView.isControllerVisible`
2888*30877f79SAndroid Build Coastguard Worker    ([#4385](https://github.com/google/ExoPlayer/issues/4385)).
2889*30877f79SAndroid Build Coastguard Worker*   Fix issue playing DRM protected streams on Asus Zenfone 2
2890*30877f79SAndroid Build Coastguard Worker    ([#4403](https://github.com/google/ExoPlayer/issues/4413)).
2891*30877f79SAndroid Build Coastguard Worker*   Add support for multiple audio and video tracks in MPEG-PS streams
2892*30877f79SAndroid Build Coastguard Worker    ([#4406](https://github.com/google/ExoPlayer/issues/4406)).
2893*30877f79SAndroid Build Coastguard Worker*   Add workaround for track index mismatches between trex and tkhd boxes in
2894*30877f79SAndroid Build Coastguard Worker    fragmented MP4 files
2895*30877f79SAndroid Build Coastguard Worker    ([#4477](https://github.com/google/ExoPlayer/issues/4477)).
2896*30877f79SAndroid Build Coastguard Worker*   Add workaround for track index mismatches between tfhd and tkhd boxes in
2897*30877f79SAndroid Build Coastguard Worker    fragmented MP4 files
2898*30877f79SAndroid Build Coastguard Worker    ([#4083](https://github.com/google/ExoPlayer/issues/4083)).
2899*30877f79SAndroid Build Coastguard Worker*   Ignore all MP4 edit lists if one edit list couldn't be handled
2900*30877f79SAndroid Build Coastguard Worker    ([#4348](https://github.com/google/ExoPlayer/issues/4348)).
2901*30877f79SAndroid Build Coastguard Worker*   Fix issue when switching track selection from an embedded track to a primary
2902*30877f79SAndroid Build Coastguard Worker    track in DASH ([#4477](https://github.com/google/ExoPlayer/issues/4477)).
2903*30877f79SAndroid Build Coastguard Worker*   Fix accessibility class name for `DefaultTimeBar`
2904*30877f79SAndroid Build Coastguard Worker    ([#4611](https://github.com/google/ExoPlayer/issues/4611)).
2905*30877f79SAndroid Build Coastguard Worker*   Improved compatibility with FireOS devices.
2906*30877f79SAndroid Build Coastguard Worker
2907*30877f79SAndroid Build Coastguard Worker### 2.8.2 (2018-06-06)
2908*30877f79SAndroid Build Coastguard Worker
2909*30877f79SAndroid Build Coastguard Worker*   IMA extension: Don't advertise support for video/mpeg ad media, as we don't
2910*30877f79SAndroid Build Coastguard Worker    have an extractor for this
2911*30877f79SAndroid Build Coastguard Worker    ([#4297](https://github.com/google/ExoPlayer/issues/4297)).
2912*30877f79SAndroid Build Coastguard Worker*   DASH: Fix playback getting stuck when playing representations that have both
2913*30877f79SAndroid Build Coastguard Worker    sidx atoms and non-zero presentationTimeOffset values.
2914*30877f79SAndroid Build Coastguard Worker*   HLS:
2915*30877f79SAndroid Build Coastguard Worker    *   Allow injection of custom playlist trackers.
2916*30877f79SAndroid Build Coastguard Worker    *   Fix adaptation in live playlists with EXT-X-PROGRAM-DATE-TIME tags.
2917*30877f79SAndroid Build Coastguard Worker*   Mitigate memory leaks when `MediaSource` loads are slow to cancel
2918*30877f79SAndroid Build Coastguard Worker    ([#4249](https://github.com/google/ExoPlayer/issues/4249)).
2919*30877f79SAndroid Build Coastguard Worker*   Fix inconsistent `Player.EventListener` invocations for recursive player
2920*30877f79SAndroid Build Coastguard Worker    state changes ([#4276](https://github.com/google/ExoPlayer/issues/4276)).
2921*30877f79SAndroid Build Coastguard Worker*   Fix `MediaCodec.native_setSurface` crash on Moto C
2922*30877f79SAndroid Build Coastguard Worker    ([#4315](https://github.com/google/ExoPlayer/issues/4315)).
2923*30877f79SAndroid Build Coastguard Worker*   Fix missing whitespace in CEA-608
2924*30877f79SAndroid Build Coastguard Worker    ([#3906](https://github.com/google/ExoPlayer/issues/3906)).
2925*30877f79SAndroid Build Coastguard Worker*   Fix crash downloading HLS media playlists
2926*30877f79SAndroid Build Coastguard Worker    ([#4396](https://github.com/google/ExoPlayer/issues/4396)).
2927*30877f79SAndroid Build Coastguard Worker*   Fix a bug where download cancellation was ignored
2928*30877f79SAndroid Build Coastguard Worker    ([#4403](https://github.com/google/ExoPlayer/issues/4403)).
2929*30877f79SAndroid Build Coastguard Worker*   Set `METADATA_KEY_TITLE` on media descriptions
2930*30877f79SAndroid Build Coastguard Worker    ([#4292](https://github.com/google/ExoPlayer/issues/4292)).
2931*30877f79SAndroid Build Coastguard Worker*   Allow apps to register custom MIME types
2932*30877f79SAndroid Build Coastguard Worker    ([#4264](https://github.com/google/ExoPlayer/issues/4264)).
2933*30877f79SAndroid Build Coastguard Worker
2934*30877f79SAndroid Build Coastguard Worker### 2.8.1 (2018-05-22)
2935*30877f79SAndroid Build Coastguard Worker
2936*30877f79SAndroid Build Coastguard Worker*   HLS:
2937*30877f79SAndroid Build Coastguard Worker    *   Fix playback of livestreams with EXT-X-PROGRAM-DATE-TIME tags
2938*30877f79SAndroid Build Coastguard Worker        ([#4239](https://github.com/google/ExoPlayer/issues/4239)).
2939*30877f79SAndroid Build Coastguard Worker    *   Fix playback of clipped streams starting from non-keyframe positions
2940*30877f79SAndroid Build Coastguard Worker        ([#4241](https://github.com/google/ExoPlayer/issues/4241)).
2941*30877f79SAndroid Build Coastguard Worker*   OkHttp extension: Fix to correctly include response headers in thrown
2942*30877f79SAndroid Build Coastguard Worker    `InvalidResponseCodeException`s.
2943*30877f79SAndroid Build Coastguard Worker*   Add possibility to cancel `PlayerMessage`s.
2944*30877f79SAndroid Build Coastguard Worker*   UI:
2945*30877f79SAndroid Build Coastguard Worker    *   Add `PlayerView.setKeepContentOnPlayerReset` to keep the currently
2946*30877f79SAndroid Build Coastguard Worker        displayed video frame or media artwork visible when the player is reset
2947*30877f79SAndroid Build Coastguard Worker        ([#2843](https://github.com/google/ExoPlayer/issues/2843)).
2948*30877f79SAndroid Build Coastguard Worker*   Fix crash when switching surface on Moto E(4)
2949*30877f79SAndroid Build Coastguard Worker    ([#4134](https://github.com/google/ExoPlayer/issues/4134)).
2950*30877f79SAndroid Build Coastguard Worker*   Fix a bug that could cause event listeners to be called with inconsistent
2951*30877f79SAndroid Build Coastguard Worker    information if an event listener interacted with the player
2952*30877f79SAndroid Build Coastguard Worker    ([#4262](https://github.com/google/ExoPlayer/issues/4262)).
2953*30877f79SAndroid Build Coastguard Worker*   Audio:
2954*30877f79SAndroid Build Coastguard Worker    *   Fix extraction of PCM in MP4/MOV
2955*30877f79SAndroid Build Coastguard Worker        ([#4228](https://github.com/google/ExoPlayer/issues/4228)).
2956*30877f79SAndroid Build Coastguard Worker    *   FLAC: Supports seeking for FLAC files without SEEKTABLE
2957*30877f79SAndroid Build Coastguard Worker        ([#1808](https://github.com/google/ExoPlayer/issues/1808)).
2958*30877f79SAndroid Build Coastguard Worker*   Captions:
2959*30877f79SAndroid Build Coastguard Worker    *   TTML:
2960*30877f79SAndroid Build Coastguard Worker    *   Fix a styling issue when there are multiple regions displayed at the
2961*30877f79SAndroid Build Coastguard Worker        same time that can make text size of each region much smaller than
2962*30877f79SAndroid Build Coastguard Worker        defined.
2963*30877f79SAndroid Build Coastguard Worker    *   Fix an issue when the caption line has no text (empty line or only line
2964*30877f79SAndroid Build Coastguard Worker        break), and the line's background is still displayed.
2965*30877f79SAndroid Build Coastguard Worker    *   Support TTML font size using % correctly (as percentage of document cell
2966*30877f79SAndroid Build Coastguard Worker        resolution).
2967*30877f79SAndroid Build Coastguard Worker
2968*30877f79SAndroid Build Coastguard Worker### 2.8.0 (2018-05-03)
2969*30877f79SAndroid Build Coastguard Worker
2970*30877f79SAndroid Build Coastguard Worker*   Downloading:
2971*30877f79SAndroid Build Coastguard Worker    *   Add `DownloadService`, `DownloadManager` and related classes
2972*30877f79SAndroid Build Coastguard Worker        ([#2643](https://github.com/google/ExoPlayer/issues/2643)). Information
2973*30877f79SAndroid Build Coastguard Worker        on using these components to download progressive formats can be found
2974*30877f79SAndroid Build Coastguard Worker        [here](https://medium.com/google-exoplayer/downloading-streams-6d259eec7f95).
2975*30877f79SAndroid Build Coastguard Worker        To see how to download DASH, HLS and SmoothStreaming media, take a look
2976*30877f79SAndroid Build Coastguard Worker        at the app.
2977*30877f79SAndroid Build Coastguard Worker    *   Updated main demo app to support downloading DASH, HLS, SmoothStreaming
2978*30877f79SAndroid Build Coastguard Worker        and progressive media.
2979*30877f79SAndroid Build Coastguard Worker*   MediaSources:
2980*30877f79SAndroid Build Coastguard Worker    *   Allow reusing media sources after they have been released and also in
2981*30877f79SAndroid Build Coastguard Worker        parallel to allow adding them multiple times to a concatenation.
2982*30877f79SAndroid Build Coastguard Worker        ([#3498](https://github.com/google/ExoPlayer/issues/3498)).
2983*30877f79SAndroid Build Coastguard Worker    *   Merged `DynamicConcatenatingMediaSource` into `ConcatenatingMediaSource`
2984*30877f79SAndroid Build Coastguard Worker        and deprecated `DynamicConcatenatingMediaSource`.
2985*30877f79SAndroid Build Coastguard Worker    *   Allow clipping of child media sources where the period and window have a
2986*30877f79SAndroid Build Coastguard Worker        non-zero offset with `ClippingMediaSource`.
2987*30877f79SAndroid Build Coastguard Worker    *   Allow adding and removing `MediaSourceEventListener`s to MediaSources
2988*30877f79SAndroid Build Coastguard Worker        after they have been created. Listening to events is now supported for
2989*30877f79SAndroid Build Coastguard Worker        all media sources including composite sources.
2990*30877f79SAndroid Build Coastguard Worker    *   Added callbacks to `MediaSourceEventListener` to get notified when media
2991*30877f79SAndroid Build Coastguard Worker        periods are created, released and being read from.
2992*30877f79SAndroid Build Coastguard Worker    *   Support live stream clipping with `ClippingMediaSource`.
2993*30877f79SAndroid Build Coastguard Worker    *   Allow setting tags for all media sources in their factories. The tag of
2994*30877f79SAndroid Build Coastguard Worker        the current window can be retrieved with `Player.getCurrentTag`.
2995*30877f79SAndroid Build Coastguard Worker*   UI:
2996*30877f79SAndroid Build Coastguard Worker    *   Add support for displaying error messages and a buffering spinner in
2997*30877f79SAndroid Build Coastguard Worker        `PlayerView`.
2998*30877f79SAndroid Build Coastguard Worker    *   Add support for listening to `AspectRatioFrameLayout`'s aspect ratio
2999*30877f79SAndroid Build Coastguard Worker        update ([#3736](https://github.com/google/ExoPlayer/issues/3736)).
3000*30877f79SAndroid Build Coastguard Worker    *   Add `PlayerNotificationManager` for displaying notifications reflecting
3001*30877f79SAndroid Build Coastguard Worker        the player state.
3002*30877f79SAndroid Build Coastguard Worker    *   Add `TrackSelectionView` for selecting tracks with
3003*30877f79SAndroid Build Coastguard Worker        `DefaultTrackSelector`.
3004*30877f79SAndroid Build Coastguard Worker    *   Add `TrackNameProvider` for converting track `Format`s to textual
3005*30877f79SAndroid Build Coastguard Worker        descriptions, and `DefaultTrackNameProvider` as a default
3006*30877f79SAndroid Build Coastguard Worker        implementation.
3007*30877f79SAndroid Build Coastguard Worker*   Track selection:
3008*30877f79SAndroid Build Coastguard Worker    *   Reworked `MappingTrackSelector` and `DefaultTrackSelector`.
3009*30877f79SAndroid Build Coastguard Worker    *   `DefaultTrackSelector.Parameters` now implements `Parcelable`.
3010*30877f79SAndroid Build Coastguard Worker    *   Added UI components for track selection (see above).
3011*30877f79SAndroid Build Coastguard Worker*   Audio:
3012*30877f79SAndroid Build Coastguard Worker    *   Support extracting data from AMR container formats, including both
3013*30877f79SAndroid Build Coastguard Worker        narrow and wide band
3014*30877f79SAndroid Build Coastguard Worker        ([#2527](https://github.com/google/ExoPlayer/issues/2527)).
3015*30877f79SAndroid Build Coastguard Worker    *   FLAC:
3016*30877f79SAndroid Build Coastguard Worker    *   Sniff FLAC files correctly if they have ID3 headers
3017*30877f79SAndroid Build Coastguard Worker        ([#4055](https://github.com/google/ExoPlayer/issues/4055)).
3018*30877f79SAndroid Build Coastguard Worker    *   Supports FLAC files with high sample rate (176400 and 192000)
3019*30877f79SAndroid Build Coastguard Worker        ([#3769](https://github.com/google/ExoPlayer/issues/3769)).
3020*30877f79SAndroid Build Coastguard Worker    *   Factor out `AudioTrack` position tracking from `DefaultAudioSink`.
3021*30877f79SAndroid Build Coastguard Worker    *   Fix an issue where the playback position would pause just after playback
3022*30877f79SAndroid Build Coastguard Worker        begins, and poll the audio timestamp less frequently once it starts
3023*30877f79SAndroid Build Coastguard Worker        advancing ([#3841](https://github.com/google/ExoPlayer/issues/3841)).
3024*30877f79SAndroid Build Coastguard Worker    *   Add an option to skip silent audio in `PlaybackParameters`
3025*30877f79SAndroid Build Coastguard Worker        ([#2635](https://github.com/google/ExoPlayer/issues/2635)).
3026*30877f79SAndroid Build Coastguard Worker    *   Fix an issue where playback of TrueHD streams would get stuck after
3027*30877f79SAndroid Build Coastguard Worker        seeking due to not finding a syncframe
3028*30877f79SAndroid Build Coastguard Worker        ([#3845](https://github.com/google/ExoPlayer/issues/3845)).
3029*30877f79SAndroid Build Coastguard Worker    *   Fix an issue with eac3-joc playback where a codec would fail to
3030*30877f79SAndroid Build Coastguard Worker        configure ([#4165](https://github.com/google/ExoPlayer/issues/4165)).
3031*30877f79SAndroid Build Coastguard Worker    *   Handle non-empty end-of-stream buffers, to fix gapless playback of
3032*30877f79SAndroid Build Coastguard Worker        streams with encoder padding when the decoder returns a non-empty final
3033*30877f79SAndroid Build Coastguard Worker        buffer.
3034*30877f79SAndroid Build Coastguard Worker    *   Allow trimming more than one sample when applying an elst audio edit via
3035*30877f79SAndroid Build Coastguard Worker        gapless playback info.
3036*30877f79SAndroid Build Coastguard Worker    *   Allow overriding skipping/scaling with custom `AudioProcessor`s
3037*30877f79SAndroid Build Coastguard Worker        ([#3142](https://github.com/google/ExoPlayer/issues/3142)).
3038*30877f79SAndroid Build Coastguard Worker*   Caching:
3039*30877f79SAndroid Build Coastguard Worker    *   Add release method to the `Cache` interface, and prevent multiple
3040*30877f79SAndroid Build Coastguard Worker        instances of `SimpleCache` using the same folder at the same time.
3041*30877f79SAndroid Build Coastguard Worker    *   Cache redirect URLs
3042*30877f79SAndroid Build Coastguard Worker        ([#2360](https://github.com/google/ExoPlayer/issues/2360)).
3043*30877f79SAndroid Build Coastguard Worker*   DRM:
3044*30877f79SAndroid Build Coastguard Worker    *   Allow multiple listeners for `DefaultDrmSessionManager`.
3045*30877f79SAndroid Build Coastguard Worker    *   Pass `DrmSessionManager` to `ExoPlayerFactory` instead of
3046*30877f79SAndroid Build Coastguard Worker        `RendererFactory`.
3047*30877f79SAndroid Build Coastguard Worker    *   Change minimum API requirement for CBC and pattern encryption from 24 to
3048*30877f79SAndroid Build Coastguard Worker        25 ([#4022](https://github.com/google/ExoPlayer/issues/4022)).
3049*30877f79SAndroid Build Coastguard Worker    *   Fix handling of 307/308 redirects when making license requests
3050*30877f79SAndroid Build Coastguard Worker        ([#4108](https://github.com/google/ExoPlayer/issues/4108)).
3051*30877f79SAndroid Build Coastguard Worker*   HLS:
3052*30877f79SAndroid Build Coastguard Worker    *   Fix playlist loading error propagation when the current selection does
3053*30877f79SAndroid Build Coastguard Worker        not include all of the playlist's variants.
3054*30877f79SAndroid Build Coastguard Worker    *   Fix SAMPLE-AES-CENC and SAMPLE-AES-CTR EXT-X-KEY methods
3055*30877f79SAndroid Build Coastguard Worker        ([#4145](https://github.com/google/ExoPlayer/issues/4145)).
3056*30877f79SAndroid Build Coastguard Worker    *   Preeptively declare an ID3 track in chunkless preparation
3057*30877f79SAndroid Build Coastguard Worker        ([#4016](https://github.com/google/ExoPlayer/issues/4016)).
3058*30877f79SAndroid Build Coastguard Worker    *   Add support for multiple #EXT-X-MAP tags in a media playlist
3059*30877f79SAndroid Build Coastguard Worker        ([#4164](https://github.com/google/ExoPlayer/issues/4182)).
3060*30877f79SAndroid Build Coastguard Worker    *   Fix seeking in live streams
3061*30877f79SAndroid Build Coastguard Worker        ([#4187](https://github.com/google/ExoPlayer/issues/4187)).
3062*30877f79SAndroid Build Coastguard Worker*   IMA extension:
3063*30877f79SAndroid Build Coastguard Worker    *   Allow setting the ad media load timeout
3064*30877f79SAndroid Build Coastguard Worker        ([#3691](https://github.com/google/ExoPlayer/issues/3691)).
3065*30877f79SAndroid Build Coastguard Worker    *   Expose ad load errors via `MediaSourceEventListener` on
3066*30877f79SAndroid Build Coastguard Worker        `AdsMediaSource`, and allow setting an ad event listener on
3067*30877f79SAndroid Build Coastguard Worker        `ImaAdsLoader`. Deprecate the `AdsMediaSource.EventListener`.
3068*30877f79SAndroid Build Coastguard Worker*   Add `AnalyticsListener` interface which can be registered in
3069*30877f79SAndroid Build Coastguard Worker    `SimpleExoPlayer` to receive detailed metadata for each ExoPlayer event.
3070*30877f79SAndroid Build Coastguard Worker*   Optimize seeking in FMP4 by enabling seeking to the nearest sync sample
3071*30877f79SAndroid Build Coastguard Worker    within a fragment. This benefits standalone FMP4 playbacks, DASH and
3072*30877f79SAndroid Build Coastguard Worker    SmoothStreaming.
3073*30877f79SAndroid Build Coastguard Worker*   Updated default max buffer length in `DefaultLoadControl`.
3074*30877f79SAndroid Build Coastguard Worker*   Fix ClearKey decryption error if the key contains a forward slash
3075*30877f79SAndroid Build Coastguard Worker    ([#4075](https://github.com/google/ExoPlayer/issues/4075)).
3076*30877f79SAndroid Build Coastguard Worker*   Fix crash when switching surface on Huawei P9 Lite
3077*30877f79SAndroid Build Coastguard Worker    ([#4084](https://github.com/google/ExoPlayer/issues/4084)), and Philips
3078*30877f79SAndroid Build Coastguard Worker    QM163E ([#4104](https://github.com/google/ExoPlayer/issues/4104)).
3079*30877f79SAndroid Build Coastguard Worker*   Support ZLIB compressed PGS subtitles.
3080*30877f79SAndroid Build Coastguard Worker*   Added `getPlaybackError` to `Player` interface.
3081*30877f79SAndroid Build Coastguard Worker*   Moved initial bitrate estimate from `AdaptiveTrackSelection` to
3082*30877f79SAndroid Build Coastguard Worker    `DefaultBandwidthMeter`.
3083*30877f79SAndroid Build Coastguard Worker*   Removed default renderer time offset of 60000000 from internal player. The
3084*30877f79SAndroid Build Coastguard Worker    actual renderer timestamp offset can be obtained by listening to
3085*30877f79SAndroid Build Coastguard Worker    `BaseRenderer.onStreamChanged`.
3086*30877f79SAndroid Build Coastguard Worker*   Added dependencies on checkerframework annotations for static code analysis.
3087*30877f79SAndroid Build Coastguard Worker
3088*30877f79SAndroid Build Coastguard Worker### 2.7.3 (2018-04-04)
3089*30877f79SAndroid Build Coastguard Worker
3090*30877f79SAndroid Build Coastguard Worker*   Fix ProGuard configuration for Cast, IMA and OkHttp extensions.
3091*30877f79SAndroid Build Coastguard Worker*   Update OkHttp extension to depend on OkHttp 3.10.0.
3092*30877f79SAndroid Build Coastguard Worker
3093*30877f79SAndroid Build Coastguard Worker### 2.7.2 (2018-03-29)
3094*30877f79SAndroid Build Coastguard Worker
3095*30877f79SAndroid Build Coastguard Worker*   Gradle: Upgrade Gradle version from 4.1 to 4.4 so it can work with Android
3096*30877f79SAndroid Build Coastguard Worker    Studio 3.1 ([#3708](https://github.com/google/ExoPlayer/issues/3708)).
3097*30877f79SAndroid Build Coastguard Worker*   Match codecs starting with "mp4a" to different Audio MimeTypes
3098*30877f79SAndroid Build Coastguard Worker    ([#3779](https://github.com/google/ExoPlayer/issues/3779)).
3099*30877f79SAndroid Build Coastguard Worker*   Fix ANR issue on Redmi 4X and Redmi Note 4
3100*30877f79SAndroid Build Coastguard Worker    ([#4006](https://github.com/google/ExoPlayer/issues/4006)).
3101*30877f79SAndroid Build Coastguard Worker*   Fix handling of zero padded strings when parsing Matroska streams
3102*30877f79SAndroid Build Coastguard Worker    ([#4010](https://github.com/google/ExoPlayer/issues/4010)).
3103*30877f79SAndroid Build Coastguard Worker*   Fix "Decoder input buffer too small" error when playing some FLAC streams.
3104*30877f79SAndroid Build Coastguard Worker*   MediaSession extension: Omit fast forward and rewind actions when media is
3105*30877f79SAndroid Build Coastguard Worker    not seekable ([#4001](https://github.com/google/ExoPlayer/issues/4001)).
3106*30877f79SAndroid Build Coastguard Worker
3107*30877f79SAndroid Build Coastguard Worker### 2.7.1 (2018-03-09)
3108*30877f79SAndroid Build Coastguard Worker
3109*30877f79SAndroid Build Coastguard Worker*   Gradle: Replaced 'compile' (deprecated) with 'implementation' and 'api'.
3110*30877f79SAndroid Build Coastguard Worker    This may lead to build breakage for applications upgrading from previous
3111*30877f79SAndroid Build Coastguard Worker    version that rely on indirect dependencies of certain modules. In such
3112*30877f79SAndroid Build Coastguard Worker    cases, application developers need to add the missing dependency to their
3113*30877f79SAndroid Build Coastguard Worker    gradle file. You can read more about the new dependency configurations
3114*30877f79SAndroid Build Coastguard Worker    [here](https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#new_configurations).
3115*30877f79SAndroid Build Coastguard Worker*   HlsMediaSource: Make HLS periods start at zero instead of the epoch.
3116*30877f79SAndroid Build Coastguard Worker    Applications that rely on HLS timelines having a period starting at the
3117*30877f79SAndroid Build Coastguard Worker    epoch will need to update their handling of HLS timelines. The program date
3118*30877f79SAndroid Build Coastguard Worker    time is still available via the informational
3119*30877f79SAndroid Build Coastguard Worker    `Timeline.Window.windowStartTimeMs` field
3120*30877f79SAndroid Build Coastguard Worker    ([#3865](https://github.com/google/ExoPlayer/issues/3865),
3121*30877f79SAndroid Build Coastguard Worker    [#3888](https://github.com/google/ExoPlayer/issues/3888)).
3122*30877f79SAndroid Build Coastguard Worker*   Enable seeking in MP4 streams where duration is set incorrectly in the track
3123*30877f79SAndroid Build Coastguard Worker    header ([#3926](https://github.com/google/ExoPlayer/issues/3926)).
3124*30877f79SAndroid Build Coastguard Worker*   Video: Force rendering a frame periodically in `MediaCodecVideoRenderer` and
3125*30877f79SAndroid Build Coastguard Worker    `LibvpxVideoRenderer`, even if it is late.
3126*30877f79SAndroid Build Coastguard Worker
3127*30877f79SAndroid Build Coastguard Worker### 2.7.0 (2018-02-19)
3128*30877f79SAndroid Build Coastguard Worker
3129*30877f79SAndroid Build Coastguard Worker*   Player interface:
3130*30877f79SAndroid Build Coastguard Worker    *   Add optional parameter to `stop` to reset the player when stopping.
3131*30877f79SAndroid Build Coastguard Worker    *   Add a reason to `EventListener.onTimelineChanged` to distinguish between
3132*30877f79SAndroid Build Coastguard Worker        initial preparation, reset and dynamic updates.
3133*30877f79SAndroid Build Coastguard Worker    *   Add `Player.DISCONTINUITY_REASON_AD_INSERTION` to the possible reasons
3134*30877f79SAndroid Build Coastguard Worker        reported in `Eventlistener.onPositionDiscontinuity` to distinguish
3135*30877f79SAndroid Build Coastguard Worker        transitions to and from ads within one period from transitions between
3136*30877f79SAndroid Build Coastguard Worker        periods.
3137*30877f79SAndroid Build Coastguard Worker    *   Replaced `ExoPlayer.sendMessages` with `ExoPlayer.createMessage` to
3138*30877f79SAndroid Build Coastguard Worker        allow more customization of the message. Now supports setting a message
3139*30877f79SAndroid Build Coastguard Worker        delivery playback position and/or a delivery handler
3140*30877f79SAndroid Build Coastguard Worker        ([#2189](https://github.com/google/ExoPlayer/issues/2189)).
3141*30877f79SAndroid Build Coastguard Worker    *   Add `Player.VideoComponent`, `Player.TextComponent` and
3142*30877f79SAndroid Build Coastguard Worker        `Player.MetadataComponent` interfaces that define optional video, text
3143*30877f79SAndroid Build Coastguard Worker        and metadata output functionality. New `getVideoComponent`,
3144*30877f79SAndroid Build Coastguard Worker        `getTextComponent` and `getMetadataComponent` methods provide access to
3145*30877f79SAndroid Build Coastguard Worker        this functionality.
3146*30877f79SAndroid Build Coastguard Worker*   Add `ExoPlayer.setSeekParameters` for controlling how seek operations are
3147*30877f79SAndroid Build Coastguard Worker    performed. The `SeekParameters` class contains defaults for exact seeking
3148*30877f79SAndroid Build Coastguard Worker    and seeking to the closest sync points before, either side or after
3149*30877f79SAndroid Build Coastguard Worker    specified seek positions. `SeekParameters` are not currently supported when
3150*30877f79SAndroid Build Coastguard Worker    playing HLS streams.
3151*30877f79SAndroid Build Coastguard Worker*   DefaultTrackSelector:
3152*30877f79SAndroid Build Coastguard Worker    *   Replace `DefaultTrackSelector.Parameters` copy methods with a builder.
3153*30877f79SAndroid Build Coastguard Worker    *   Support disabling of individual text track selection flags.
3154*30877f79SAndroid Build Coastguard Worker*   Buffering:
3155*30877f79SAndroid Build Coastguard Worker    *   Allow a back-buffer of media to be retained behind the current playback
3156*30877f79SAndroid Build Coastguard Worker        position, for fast backward seeking. The back-buffer can be configured
3157*30877f79SAndroid Build Coastguard Worker        by custom `LoadControl` implementations.
3158*30877f79SAndroid Build Coastguard Worker    *   Add ability for `SequenceableLoader` to re-evaluate its buffer and
3159*30877f79SAndroid Build Coastguard Worker        discard buffered media so that it can be re-buffered in a different
3160*30877f79SAndroid Build Coastguard Worker        quality.
3161*30877f79SAndroid Build Coastguard Worker    *   Allow more flexible loading strategy when playing media containing
3162*30877f79SAndroid Build Coastguard Worker        multiple sub-streams, by allowing injection of custom
3163*30877f79SAndroid Build Coastguard Worker        `CompositeSequenceableLoader` factories through
3164*30877f79SAndroid Build Coastguard Worker        `DashMediaSource.Factory`, `HlsMediaSource.Factory`,
3165*30877f79SAndroid Build Coastguard Worker        `SsMediaSource.Factory`, and `MergingMediaSource`.
3166*30877f79SAndroid Build Coastguard Worker    *   Play out existing buffer before retrying for progressive live streams
3167*30877f79SAndroid Build Coastguard Worker        ([#1606](https://github.com/google/ExoPlayer/issues/1606)).
3168*30877f79SAndroid Build Coastguard Worker*   UI:
3169*30877f79SAndroid Build Coastguard Worker    *   Generalized player and control views to allow them to bind with any
3170*30877f79SAndroid Build Coastguard Worker        `Player`, and renamed them to `PlayerView` and `PlayerControlView`
3171*30877f79SAndroid Build Coastguard Worker        respectively.
3172*30877f79SAndroid Build Coastguard Worker    *   Made `PlayerView` automatically apply video rotation when configured to
3173*30877f79SAndroid Build Coastguard Worker        use `TextureView`
3174*30877f79SAndroid Build Coastguard Worker        ([#91](https://github.com/google/ExoPlayer/issues/91)).
3175*30877f79SAndroid Build Coastguard Worker    *   Made `PlayerView` play button behave correctly when the player is ended
3176*30877f79SAndroid Build Coastguard Worker        ([#3689](https://github.com/google/ExoPlayer/issues/3689)), and call a
3177*30877f79SAndroid Build Coastguard Worker        `PlaybackPreparer` when the player is idle.
3178*30877f79SAndroid Build Coastguard Worker*   DRM: Optimistically attempt playback of DRM protected content that does not
3179*30877f79SAndroid Build Coastguard Worker    declare scheme specific init data in the manifest. If playback of clear
3180*30877f79SAndroid Build Coastguard Worker    samples without keys is allowed, delay DRM session error propagation until
3181*30877f79SAndroid Build Coastguard Worker    keys are actually needed
3182*30877f79SAndroid Build Coastguard Worker    ([#3630](https://github.com/google/ExoPlayer/issues/3630)).
3183*30877f79SAndroid Build Coastguard Worker*   DASH:
3184*30877f79SAndroid Build Coastguard Worker    *   Support in-band Emsg events targeting the player with scheme id
3185*30877f79SAndroid Build Coastguard Worker        `urn:mpeg:dash:event:2012` and scheme values "1", "2" and "3".
3186*30877f79SAndroid Build Coastguard Worker    *   Support EventStream elements in DASH manifests.
3187*30877f79SAndroid Build Coastguard Worker*   HLS:
3188*30877f79SAndroid Build Coastguard Worker    *   Add opt-in support for chunkless preparation in HLS. This allows an HLS
3189*30877f79SAndroid Build Coastguard Worker        source to finish preparation without downloading any chunks, which can
3190*30877f79SAndroid Build Coastguard Worker        significantly reduce initial buffering time
3191*30877f79SAndroid Build Coastguard Worker        ([#3149](https://github.com/google/ExoPlayer/issues/3149)). More details
3192*30877f79SAndroid Build Coastguard Worker        can be found
3193*30877f79SAndroid Build Coastguard Worker        [here](https://medium.com/google-exoplayer/faster-hls-preparation-f6611aa15ea6).
3194*30877f79SAndroid Build Coastguard Worker    *   Fail if unable to sync with the Transport Stream, rather than entering
3195*30877f79SAndroid Build Coastguard Worker        stuck in an indefinite buffering state.
3196*30877f79SAndroid Build Coastguard Worker    *   Fix mime type propagation
3197*30877f79SAndroid Build Coastguard Worker        ([#3653](https://github.com/google/ExoPlayer/issues/3653)).
3198*30877f79SAndroid Build Coastguard Worker    *   Fix ID3 context reuse across segment format changes
3199*30877f79SAndroid Build Coastguard Worker        ([#3622](https://github.com/google/ExoPlayer/issues/3622)).
3200*30877f79SAndroid Build Coastguard Worker    *   Use long for media sequence numbers
3201*30877f79SAndroid Build Coastguard Worker        ([#3747](https://github.com/google/ExoPlayer/issues/3747))
3202*30877f79SAndroid Build Coastguard Worker    *   Add initial support for the EXT-X-GAP tag.
3203*30877f79SAndroid Build Coastguard Worker*   Audio:
3204*30877f79SAndroid Build Coastguard Worker    *   Support TrueHD passthrough for rechunked samples in Matroska files
3205*30877f79SAndroid Build Coastguard Worker        ([#2147](https://github.com/google/ExoPlayer/issues/2147)).
3206*30877f79SAndroid Build Coastguard Worker    *   Support resampling 24-bit and 32-bit integer to 32-bit float for high
3207*30877f79SAndroid Build Coastguard Worker        resolution output in `DefaultAudioSink`
3208*30877f79SAndroid Build Coastguard Worker        ([#3635](https://github.com/google/ExoPlayer/pull/3635)).
3209*30877f79SAndroid Build Coastguard Worker*   Captions:
3210*30877f79SAndroid Build Coastguard Worker    *   Basic support for PGS subtitles
3211*30877f79SAndroid Build Coastguard Worker        ([#3008](https://github.com/google/ExoPlayer/issues/3008)).
3212*30877f79SAndroid Build Coastguard Worker    *   Fix handling of CEA-608 captions where multiple buffers have the same
3213*30877f79SAndroid Build Coastguard Worker        presentation timestamp
3214*30877f79SAndroid Build Coastguard Worker        ([#3782](https://github.com/google/ExoPlayer/issues/3782)).
3215*30877f79SAndroid Build Coastguard Worker*   Caching:
3216*30877f79SAndroid Build Coastguard Worker    *   Fix cache corruption issue
3217*30877f79SAndroid Build Coastguard Worker        ([#3762](https://github.com/google/ExoPlayer/issues/3762)).
3218*30877f79SAndroid Build Coastguard Worker    *   Implement periodic check in `CacheDataSource` to see whether it's
3219*30877f79SAndroid Build Coastguard Worker        possible to switch to reading/writing the cache having initially
3220*30877f79SAndroid Build Coastguard Worker        bypassed it.
3221*30877f79SAndroid Build Coastguard Worker*   IMA extension:
3222*30877f79SAndroid Build Coastguard Worker    *   Fix the player getting stuck when an ad group fails to load
3223*30877f79SAndroid Build Coastguard Worker        ([#3584](https://github.com/google/ExoPlayer/issues/3584)).
3224*30877f79SAndroid Build Coastguard Worker    *   Work around loadAd not being called beore the LOADED AdEvent arrives
3225*30877f79SAndroid Build Coastguard Worker        ([#3552](https://github.com/google/ExoPlayer/issues/3552)).
3226*30877f79SAndroid Build Coastguard Worker    *   Handle asset mismatch errors
3227*30877f79SAndroid Build Coastguard Worker        ([#3801](https://github.com/google/ExoPlayer/issues/3801)).
3228*30877f79SAndroid Build Coastguard Worker    *   Add support for playing non-Extractor content MediaSources in the IMA
3229*30877f79SAndroid Build Coastguard Worker        demo app ([#3676](https://github.com/google/ExoPlayer/issues/3676)).
3230*30877f79SAndroid Build Coastguard Worker    *   Fix handling of ad tags where ad groups are out of order
3231*30877f79SAndroid Build Coastguard Worker        ([#3716](https://github.com/google/ExoPlayer/issues/3716)).
3232*30877f79SAndroid Build Coastguard Worker    *   Fix handling of ad tags with only preroll/postroll ad groups
3233*30877f79SAndroid Build Coastguard Worker        ([#3715](https://github.com/google/ExoPlayer/issues/3715)).
3234*30877f79SAndroid Build Coastguard Worker    *   Propagate ad media preparation errors to IMA so that the ads can be
3235*30877f79SAndroid Build Coastguard Worker        skipped.
3236*30877f79SAndroid Build Coastguard Worker    *   Handle exceptions in IMA callbacks so that can be logged less verbosely.
3237*30877f79SAndroid Build Coastguard Worker*   New Cast extension. Simplifies toggling between local and Cast playbacks.
3238*30877f79SAndroid Build Coastguard Worker*   `EventLogger` moved from the demo app into the core library.
3239*30877f79SAndroid Build Coastguard Worker*   Fix ANR issue on the Huawei P8 Lite, Huawei Y6II, Moto C+, Meizu M5C, Lenovo
3240*30877f79SAndroid Build Coastguard Worker    K4 Note and Sony Xperia E5.
3241*30877f79SAndroid Build Coastguard Worker    ([#3724](https://github.com/google/ExoPlayer/issues/3724),
3242*30877f79SAndroid Build Coastguard Worker    [#3835](https://github.com/google/ExoPlayer/issues/3835)).
3243*30877f79SAndroid Build Coastguard Worker*   Fix potential NPE when removing media sources from a
3244*30877f79SAndroid Build Coastguard Worker    DynamicConcatenatingMediaSource
3245*30877f79SAndroid Build Coastguard Worker    ([#3796](https://github.com/google/ExoPlayer/issues/3796)).
3246*30877f79SAndroid Build Coastguard Worker*   Check `sys.display-size` on Philips ATVs
3247*30877f79SAndroid Build Coastguard Worker    ([#3807](https://github.com/google/ExoPlayer/issues/3807)).
3248*30877f79SAndroid Build Coastguard Worker*   Release `Extractor`s on the loading thread to avoid potentially leaking
3249*30877f79SAndroid Build Coastguard Worker    resources when the playback thread has quit by the time the loading task has
3250*30877f79SAndroid Build Coastguard Worker    completed.
3251*30877f79SAndroid Build Coastguard Worker*   ID3: Better handle malformed ID3 data
3252*30877f79SAndroid Build Coastguard Worker    ([#3792](https://github.com/google/ExoPlayer/issues/3792)).
3253*30877f79SAndroid Build Coastguard Worker*   Support 14-bit mode and little endianness in DTS PES packets
3254*30877f79SAndroid Build Coastguard Worker    ([#3340](https://github.com/google/ExoPlayer/issues/3340)).
3255*30877f79SAndroid Build Coastguard Worker*   Demo app: Add ability to download not DRM protected content.
3256*30877f79SAndroid Build Coastguard Worker
3257*30877f79SAndroid Build Coastguard Worker### 2.6.1 (2017-12-15)
3258*30877f79SAndroid Build Coastguard Worker
3259*30877f79SAndroid Build Coastguard Worker*   Add factories to `ExtractorMediaSource`, `HlsMediaSource`, `SsMediaSource`,
3260*30877f79SAndroid Build Coastguard Worker    `DashMediaSource` and `SingleSampleMediaSource`.
3261*30877f79SAndroid Build Coastguard Worker*   Use the same listener `MediaSourceEventListener` for all MediaSource
3262*30877f79SAndroid Build Coastguard Worker    implementations.
3263*30877f79SAndroid Build Coastguard Worker*   IMA extension:
3264*30877f79SAndroid Build Coastguard Worker    *   Support non-ExtractorMediaSource ads
3265*30877f79SAndroid Build Coastguard Worker        ([#3302](https://github.com/google/ExoPlayer/issues/3302)).
3266*30877f79SAndroid Build Coastguard Worker    *   Skip ads before the ad preceding the player's initial seek position
3267*30877f79SAndroid Build Coastguard Worker        ([#3527](https://github.com/google/ExoPlayer/issues/3527)).
3268*30877f79SAndroid Build Coastguard Worker    *   Fix ad loading when there is no preroll.
3269*30877f79SAndroid Build Coastguard Worker    *   Add an option to turn off hiding controls during ad playback
3270*30877f79SAndroid Build Coastguard Worker        ([#3532](https://github.com/google/ExoPlayer/issues/3532)).
3271*30877f79SAndroid Build Coastguard Worker    *   Support specifying an ads response instead of an ad tag
3272*30877f79SAndroid Build Coastguard Worker        ([#3548](https://github.com/google/ExoPlayer/issues/3548)).
3273*30877f79SAndroid Build Coastguard Worker    *   Support overriding the ad load timeout
3274*30877f79SAndroid Build Coastguard Worker        ([#3556](https://github.com/google/ExoPlayer/issues/3556)).
3275*30877f79SAndroid Build Coastguard Worker*   DASH: Support time zone designators in ISO8601 UTCTiming elements
3276*30877f79SAndroid Build Coastguard Worker    ([#3524](https://github.com/google/ExoPlayer/issues/3524)).
3277*30877f79SAndroid Build Coastguard Worker*   Audio:
3278*30877f79SAndroid Build Coastguard Worker    *   Support 32-bit PCM float output from `DefaultAudioSink`, and add an
3279*30877f79SAndroid Build Coastguard Worker        option to use this with `FfmpegAudioRenderer`.
3280*30877f79SAndroid Build Coastguard Worker    *   Add support for extracting 32-bit WAVE files
3281*30877f79SAndroid Build Coastguard Worker        ([#3379](https://github.com/google/ExoPlayer/issues/3379)).
3282*30877f79SAndroid Build Coastguard Worker    *   Support extraction and decoding of Dolby Atmos
3283*30877f79SAndroid Build Coastguard Worker        ([#2465](https://github.com/google/ExoPlayer/issues/2465)).
3284*30877f79SAndroid Build Coastguard Worker    *   Fix handling of playback parameter changes while paused when followed by
3285*30877f79SAndroid Build Coastguard Worker        a seek.
3286*30877f79SAndroid Build Coastguard Worker*   SimpleExoPlayer: Allow multiple audio and video debug listeners.
3287*30877f79SAndroid Build Coastguard Worker*   DefaultTrackSelector: Support undefined language text track selection when
3288*30877f79SAndroid Build Coastguard Worker    the preferred language is not available
3289*30877f79SAndroid Build Coastguard Worker    ([#2980](https://github.com/google/ExoPlayer/issues/2980)).
3290*30877f79SAndroid Build Coastguard Worker*   Add options to `DefaultLoadControl` to set maximum buffer size in bytes and
3291*30877f79SAndroid Build Coastguard Worker    to choose whether size or time constraints are prioritized.
3292*30877f79SAndroid Build Coastguard Worker*   Use surfaceless context for secure `DummySurface`, if available
3293*30877f79SAndroid Build Coastguard Worker    ([#3558](https://github.com/google/ExoPlayer/issues/3558)).
3294*30877f79SAndroid Build Coastguard Worker*   FLV: Fix playback of live streams that do not contain an audio track
3295*30877f79SAndroid Build Coastguard Worker    ([#3188](https://github.com/google/ExoPlayer/issues/3188)).
3296*30877f79SAndroid Build Coastguard Worker*   CEA-608: Fix handling of row count changes in roll-up mode
3297*30877f79SAndroid Build Coastguard Worker    ([#3513](https://github.com/google/ExoPlayer/issues/3513)).
3298*30877f79SAndroid Build Coastguard Worker*   Prevent period transitions when seeking to the end of a period when paused
3299*30877f79SAndroid Build Coastguard Worker    ([#2439](https://github.com/google/ExoPlayer/issues/2439)).
3300*30877f79SAndroid Build Coastguard Worker
3301*30877f79SAndroid Build Coastguard Worker### 2.6.0 (2017-11-03)
3302*30877f79SAndroid Build Coastguard Worker
3303*30877f79SAndroid Build Coastguard Worker*   Removed "r" prefix from versions. This release is "2.6.0", not "r2.6.0".
3304*30877f79SAndroid Build Coastguard Worker*   New `Player.DefaultEventListener` abstract class can be extended to avoid
3305*30877f79SAndroid Build Coastguard Worker    having to implement all methods defined by `Player.EventListener`.
3306*30877f79SAndroid Build Coastguard Worker*   Added a reason to `EventListener.onPositionDiscontinuity`
3307*30877f79SAndroid Build Coastguard Worker    ([#3252](https://github.com/google/ExoPlayer/issues/3252)).
3308*30877f79SAndroid Build Coastguard Worker*   New `setShuffleModeEnabled` method for enabling shuffled playback.
3309*30877f79SAndroid Build Coastguard Worker*   SimpleExoPlayer: Support for multiple video, text and metadata outputs.
3310*30877f79SAndroid Build Coastguard Worker*   Support for `Renderer`s that don't consume any media
3311*30877f79SAndroid Build Coastguard Worker    ([#3212](https://github.com/google/ExoPlayer/issues/3212)).
3312*30877f79SAndroid Build Coastguard Worker*   Fix reporting of internal position discontinuities via
3313*30877f79SAndroid Build Coastguard Worker    `Player.onPositionDiscontinuity`. `DISCONTINUITY_REASON_SEEK_ADJUSTMENT` is
3314*30877f79SAndroid Build Coastguard Worker    added to disambiguate position adjustments during seeks from other types of
3315*30877f79SAndroid Build Coastguard Worker    internal position discontinuity.
3316*30877f79SAndroid Build Coastguard Worker*   Fix potential `IndexOutOfBoundsException` when calling
3317*30877f79SAndroid Build Coastguard Worker    `ExoPlayer.getDuration`
3318*30877f79SAndroid Build Coastguard Worker    ([#3362](https://github.com/google/ExoPlayer/issues/3362)).
3319*30877f79SAndroid Build Coastguard Worker*   Fix playbacks involving looping, concatenation and ads getting stuck when
3320*30877f79SAndroid Build Coastguard Worker    media contains tracks with uneven durations
3321*30877f79SAndroid Build Coastguard Worker    ([#1874](https://github.com/google/ExoPlayer/issues/1874)).
3322*30877f79SAndroid Build Coastguard Worker*   Fix issue with `ContentDataSource` when reading from certain
3323*30877f79SAndroid Build Coastguard Worker    `ContentProvider` implementations
3324*30877f79SAndroid Build Coastguard Worker    ([#3426](https://github.com/google/ExoPlayer/issues/3426)).
3325*30877f79SAndroid Build Coastguard Worker*   Better playback experience when the video decoder cannot keep up, by
3326*30877f79SAndroid Build Coastguard Worker    skipping to key-frames. This is particularly relevant for variable speed
3327*30877f79SAndroid Build Coastguard Worker    playbacks.
3328*30877f79SAndroid Build Coastguard Worker*   Allow `SingleSampleMediaSource` to suppress load errors
3329*30877f79SAndroid Build Coastguard Worker    ([#3140](https://github.com/google/ExoPlayer/issues/3140)).
3330*30877f79SAndroid Build Coastguard Worker*   `DynamicConcatenatingMediaSource`: Allow specifying a callback to be invoked
3331*30877f79SAndroid Build Coastguard Worker    after a dynamic playlist modification has been applied
3332*30877f79SAndroid Build Coastguard Worker    ([#3407](https://github.com/google/ExoPlayer/issues/3407)).
3333*30877f79SAndroid Build Coastguard Worker*   Audio: New `AudioSink` interface allows customization of audio output path.
3334*30877f79SAndroid Build Coastguard Worker*   Offline: Added `Downloader` implementations for DASH, HLS, SmoothStreaming
3335*30877f79SAndroid Build Coastguard Worker    and progressive streams.
3336*30877f79SAndroid Build Coastguard Worker*   Track selection:
3337*30877f79SAndroid Build Coastguard Worker    *   Fixed adaptive track selection logic for live playbacks
3338*30877f79SAndroid Build Coastguard Worker        ([#3017](https://github.com/google/ExoPlayer/issues/3017)).
3339*30877f79SAndroid Build Coastguard Worker    *   Added ability to select the lowest bitrate tracks.
3340*30877f79SAndroid Build Coastguard Worker*   DASH:
3341*30877f79SAndroid Build Coastguard Worker    *   Don't crash when a malformed or unexpected manifest update occurs
3342*30877f79SAndroid Build Coastguard Worker        ([#2795](https://github.com/google/ExoPlayer/issues/2795)).
3343*30877f79SAndroid Build Coastguard Worker*   HLS:
3344*30877f79SAndroid Build Coastguard Worker    *   Support for Widevine protected FMP4 variants.
3345*30877f79SAndroid Build Coastguard Worker    *   Support CEA-608 in FMP4 variants.
3346*30877f79SAndroid Build Coastguard Worker    *   Support extractor injection
3347*30877f79SAndroid Build Coastguard Worker        ([#2748](https://github.com/google/ExoPlayer/issues/2748)).
3348*30877f79SAndroid Build Coastguard Worker*   DRM:
3349*30877f79SAndroid Build Coastguard Worker    *   Improved compatibility with ClearKey content
3350*30877f79SAndroid Build Coastguard Worker        ([#3138](https://github.com/google/ExoPlayer/issues/3138)).
3351*30877f79SAndroid Build Coastguard Worker    *   Support multiple PSSH boxes of the same type.
3352*30877f79SAndroid Build Coastguard Worker    *   Retry initial provisioning and key requests if they fail
3353*30877f79SAndroid Build Coastguard Worker    *   Fix incorrect parsing of non-CENC sinf boxes.
3354*30877f79SAndroid Build Coastguard Worker*   IMA extension:
3355*30877f79SAndroid Build Coastguard Worker    *   Expose `AdsLoader` via getter
3356*30877f79SAndroid Build Coastguard Worker        ([#3322](https://github.com/google/ExoPlayer/issues/3322)).
3357*30877f79SAndroid Build Coastguard Worker    *   Handle `setPlayWhenReady` calls during ad playbacks
3358*30877f79SAndroid Build Coastguard Worker        ([#3303](https://github.com/google/ExoPlayer/issues/3303)).
3359*30877f79SAndroid Build Coastguard Worker    *   Ignore seeks if an ad is playing
3360*30877f79SAndroid Build Coastguard Worker        ([#3309](https://github.com/google/ExoPlayer/issues/3309)).
3361*30877f79SAndroid Build Coastguard Worker    *   Improve robustness of `ImaAdsLoader` in case content is not paused
3362*30877f79SAndroid Build Coastguard Worker        between content to ad transitions
3363*30877f79SAndroid Build Coastguard Worker        ([#3430](https://github.com/google/ExoPlayer/issues/3430)).
3364*30877f79SAndroid Build Coastguard Worker*   UI:
3365*30877f79SAndroid Build Coastguard Worker    *   Allow specifying a `Drawable` for the `TimeBar` scrubber
3366*30877f79SAndroid Build Coastguard Worker        ([#3337](https://github.com/google/ExoPlayer/issues/3337)).
3367*30877f79SAndroid Build Coastguard Worker    *   Allow multiple listeners on `TimeBar`
3368*30877f79SAndroid Build Coastguard Worker        ([#3406](https://github.com/google/ExoPlayer/issues/3406)).
3369*30877f79SAndroid Build Coastguard Worker*   New Leanback extension: Simplifies binding Exoplayer to Leanback UI
3370*30877f79SAndroid Build Coastguard Worker    components.
3371*30877f79SAndroid Build Coastguard Worker*   Unit tests moved to Robolectric.
3372*30877f79SAndroid Build Coastguard Worker*   Misc bugfixes.
3373*30877f79SAndroid Build Coastguard Worker
3374*30877f79SAndroid Build Coastguard Worker### r2.5.4 (2017-10-19)
3375*30877f79SAndroid Build Coastguard Worker
3376*30877f79SAndroid Build Coastguard Worker*   Remove unnecessary media playlist fetches during playback of live HLS
3377*30877f79SAndroid Build Coastguard Worker    streams.
3378*30877f79SAndroid Build Coastguard Worker*   Add the ability to inject a HLS playlist parser through `HlsMediaSource`.
3379*30877f79SAndroid Build Coastguard Worker*   Fix potential `IndexOutOfBoundsException` when using `ImaMediaSource`
3380*30877f79SAndroid Build Coastguard Worker    ([#3334](https://github.com/google/ExoPlayer/issues/3334)).
3381*30877f79SAndroid Build Coastguard Worker*   Fix an issue parsing MP4 content containing non-CENC sinf boxes.
3382*30877f79SAndroid Build Coastguard Worker*   Fix memory leak when seeking with repeated periods.
3383*30877f79SAndroid Build Coastguard Worker*   Fix playback position when `ExoPlayer.prepare` is called with
3384*30877f79SAndroid Build Coastguard Worker    `resetPosition` set to false.
3385*30877f79SAndroid Build Coastguard Worker*   Ignore MP4 edit lists that seem invalid
3386*30877f79SAndroid Build Coastguard Worker    ([#3351](https://github.com/google/ExoPlayer/issues/3351)).
3387*30877f79SAndroid Build Coastguard Worker*   Add extractor flag for ignoring all MP4 edit lists
3388*30877f79SAndroid Build Coastguard Worker    ([#3358](https://github.com/google/ExoPlayer/issues/3358)).
3389*30877f79SAndroid Build Coastguard Worker*   Improve extensibility by exposing public constructors for
3390*30877f79SAndroid Build Coastguard Worker    `FrameworkMediaCrypto` and by making `DefaultDashChunkSource.getNextChunk`
3391*30877f79SAndroid Build Coastguard Worker    non-final.
3392*30877f79SAndroid Build Coastguard Worker
3393*30877f79SAndroid Build Coastguard Worker### r2.5.3 (2017-09-20)
3394*30877f79SAndroid Build Coastguard Worker
3395*30877f79SAndroid Build Coastguard Worker*   IMA extension: Support skipping of skippable ads on AndroidTV and other
3396*30877f79SAndroid Build Coastguard Worker    non-touch devices
3397*30877f79SAndroid Build Coastguard Worker    ([#3258](https://github.com/google/ExoPlayer/issues/3258)).
3398*30877f79SAndroid Build Coastguard Worker*   HLS: Fix broken WebVTT captions when PTS wraps around
3399*30877f79SAndroid Build Coastguard Worker    ([#2928](https://github.com/google/ExoPlayer/issues/2928)).
3400*30877f79SAndroid Build Coastguard Worker*   Captions: Fix issues rendering CEA-608 captions
3401*30877f79SAndroid Build Coastguard Worker    ([#3250](https://github.com/google/ExoPlayer/issues/3250)).
3402*30877f79SAndroid Build Coastguard Worker*   Workaround broken AAC decoders on Galaxy S6
3403*30877f79SAndroid Build Coastguard Worker    ([#3249](https://github.com/google/ExoPlayer/issues/3249)).
3404*30877f79SAndroid Build Coastguard Worker*   Caching: Fix infinite loop when cache eviction fails
3405*30877f79SAndroid Build Coastguard Worker    ([#3260](https://github.com/google/ExoPlayer/issues/3260)).
3406*30877f79SAndroid Build Coastguard Worker*   Caching: Force use of BouncyCastle on JellyBean to fix decryption issue
3407*30877f79SAndroid Build Coastguard Worker    ([#2755](https://github.com/google/ExoPlayer/issues/2755)).
3408*30877f79SAndroid Build Coastguard Worker
3409*30877f79SAndroid Build Coastguard Worker### r2.5.2 (2017-09-11)
3410*30877f79SAndroid Build Coastguard Worker
3411*30877f79SAndroid Build Coastguard Worker*   IMA extension: Fix issue where ad playback could end prematurely for some
3412*30877f79SAndroid Build Coastguard Worker    content types ([#3180](https://github.com/google/ExoPlayer/issues/3180)).
3413*30877f79SAndroid Build Coastguard Worker*   RTMP extension: Fix SIGABRT on fast RTMP stream restart
3414*30877f79SAndroid Build Coastguard Worker    ([#3156](https://github.com/google/ExoPlayer/issues/3156)).
3415*30877f79SAndroid Build Coastguard Worker*   UI: Allow app to manually specify ad markers
3416*30877f79SAndroid Build Coastguard Worker    ([#3184](https://github.com/google/ExoPlayer/issues/3184)).
3417*30877f79SAndroid Build Coastguard Worker*   DASH: Expose segment indices to subclasses of DefaultDashChunkSource
3418*30877f79SAndroid Build Coastguard Worker    ([#3037](https://github.com/google/ExoPlayer/issues/3037)).
3419*30877f79SAndroid Build Coastguard Worker*   Captions: Added robustness against malformed WebVTT captions
3420*30877f79SAndroid Build Coastguard Worker    ([#3228](https://github.com/google/ExoPlayer/issues/3228)).
3421*30877f79SAndroid Build Coastguard Worker*   DRM: Support forcing a specific license URL.
3422*30877f79SAndroid Build Coastguard Worker*   Fix playback error when seeking in media loaded through content:// URIs
3423*30877f79SAndroid Build Coastguard Worker    ([#3216](https://github.com/google/ExoPlayer/issues/3216)).
3424*30877f79SAndroid Build Coastguard Worker*   Fix issue playing MP4s in which the last atom specifies a size of zero
3425*30877f79SAndroid Build Coastguard Worker    ([#3191](https://github.com/google/ExoPlayer/issues/3191)).
3426*30877f79SAndroid Build Coastguard Worker*   Workaround playback failures on some Xiaomi devices
3427*30877f79SAndroid Build Coastguard Worker    ([#3171](https://github.com/google/ExoPlayer/issues/3171)).
3428*30877f79SAndroid Build Coastguard Worker*   Workaround SIGSEGV issue on some devices when setting and swapping surface
3429*30877f79SAndroid Build Coastguard Worker    for secure playbacks
3430*30877f79SAndroid Build Coastguard Worker    ([#3215](https://github.com/google/ExoPlayer/issues/3215)).
3431*30877f79SAndroid Build Coastguard Worker*   Workaround for Nexus 7 issue when swapping output surface
3432*30877f79SAndroid Build Coastguard Worker    ([#3236](https://github.com/google/ExoPlayer/issues/3236)).
3433*30877f79SAndroid Build Coastguard Worker*   Workaround for SimpleExoPlayerView's surface not being hidden properly
3434*30877f79SAndroid Build Coastguard Worker    ([#3160](https://github.com/google/ExoPlayer/issues/3160)).
3435*30877f79SAndroid Build Coastguard Worker
3436*30877f79SAndroid Build Coastguard Worker### r2.5.1 (2017-08-08)
3437*30877f79SAndroid Build Coastguard Worker
3438*30877f79SAndroid Build Coastguard Worker*   Fix an issue that could cause the reported playback position to stop
3439*30877f79SAndroid Build Coastguard Worker    advancing in some cases.
3440*30877f79SAndroid Build Coastguard Worker*   Fix an issue where a Surface could be released whilst still in use by the
3441*30877f79SAndroid Build Coastguard Worker    player.
3442*30877f79SAndroid Build Coastguard Worker
3443*30877f79SAndroid Build Coastguard Worker### r2.5.0 (2017-08-07)
3444*30877f79SAndroid Build Coastguard Worker
3445*30877f79SAndroid Build Coastguard Worker*   IMA extension: Wraps the Google Interactive Media Ads (IMA) SDK to provide
3446*30877f79SAndroid Build Coastguard Worker    an easy and seamless way of incorporating display ads into ExoPlayer
3447*30877f79SAndroid Build Coastguard Worker    playbacks. You can read more about the IMA extension
3448*30877f79SAndroid Build Coastguard Worker    [here](https://medium.com/google-exoplayer/playing-ads-with-exoplayer-and-ima-868dfd767ea).
3449*30877f79SAndroid Build Coastguard Worker*   MediaSession extension: Provides an easy way to connect ExoPlayer with
3450*30877f79SAndroid Build Coastguard Worker    MediaSessionCompat in the Android Support Library.
3451*30877f79SAndroid Build Coastguard Worker*   RTMP extension: An extension for playing streams over RTMP.
3452*30877f79SAndroid Build Coastguard Worker*   Build: Made it easier for application developers to depend on a local
3453*30877f79SAndroid Build Coastguard Worker    checkout of ExoPlayer. You can learn how to do this
3454*30877f79SAndroid Build Coastguard Worker    [here](https://medium.com/google-exoplayer/howto-2-depend-on-a-local-checkout-of-exoplayer-bcd7f8531720).
3455*30877f79SAndroid Build Coastguard Worker*   Core playback improvements:
3456*30877f79SAndroid Build Coastguard Worker    *   Eliminated re-buffering when changing audio and text track selections
3457*30877f79SAndroid Build Coastguard Worker        during playback of progressive streams
3458*30877f79SAndroid Build Coastguard Worker        ([#2926](https://github.com/google/ExoPlayer/issues/2926)).
3459*30877f79SAndroid Build Coastguard Worker    *   New DynamicConcatenatingMediaSource class to support playback of dynamic
3460*30877f79SAndroid Build Coastguard Worker        playlists.
3461*30877f79SAndroid Build Coastguard Worker    *   New ExoPlayer.setRepeatMode method for dynamic toggling of repeat mode
3462*30877f79SAndroid Build Coastguard Worker        during playback. Use of setRepeatMode should be preferred to
3463*30877f79SAndroid Build Coastguard Worker        LoopingMediaSource for most looping use cases. You can read more about
3464*30877f79SAndroid Build Coastguard Worker        setRepeatMode
3465*30877f79SAndroid Build Coastguard Worker        [here](https://medium.com/google-exoplayer/repeat-modes-in-exoplayer-19dd85f036d3).
3466*30877f79SAndroid Build Coastguard Worker    *   Eliminated jank when switching video playback from one Surface to
3467*30877f79SAndroid Build Coastguard Worker        another on API level 23+ for unencrypted content, and on devices that
3468*30877f79SAndroid Build Coastguard Worker        support the EGL_EXT_protected_content OpenGL extension for protected
3469*30877f79SAndroid Build Coastguard Worker        content ([#677](https://github.com/google/ExoPlayer/issues/677)).
3470*30877f79SAndroid Build Coastguard Worker    *   Enabled ExoPlayer instantiation on background threads without Loopers.
3471*30877f79SAndroid Build Coastguard Worker        Events from such players are delivered on the application's main thread.
3472*30877f79SAndroid Build Coastguard Worker*   HLS improvements:
3473*30877f79SAndroid Build Coastguard Worker    *   Optimized adaptive switches for playlists that specify the
3474*30877f79SAndroid Build Coastguard Worker        EXT-X-INDEPENDENT-SEGMENTS tag.
3475*30877f79SAndroid Build Coastguard Worker    *   Optimized in-buffer seeking
3476*30877f79SAndroid Build Coastguard Worker        ([#551](https://github.com/google/ExoPlayer/issues/551)).
3477*30877f79SAndroid Build Coastguard Worker    *   Eliminated re-buffering when changing audio and text track selections
3478*30877f79SAndroid Build Coastguard Worker        during playback, provided the new selection does not require switching
3479*30877f79SAndroid Build Coastguard Worker        to different renditions
3480*30877f79SAndroid Build Coastguard Worker        ([#2718](https://github.com/google/ExoPlayer/issues/2718)).
3481*30877f79SAndroid Build Coastguard Worker    *   Exposed all media playlist tags in ExoPlayer's MediaPlaylist object.
3482*30877f79SAndroid Build Coastguard Worker*   DASH: Support for seamless switching across streams in different
3483*30877f79SAndroid Build Coastguard Worker    AdaptationSet elements
3484*30877f79SAndroid Build Coastguard Worker    ([#2431](https://github.com/google/ExoPlayer/issues/2431)).
3485*30877f79SAndroid Build Coastguard Worker*   DRM: Support for additional crypto schemes (cbc1, cbcs and cens) on API
3486*30877f79SAndroid Build Coastguard Worker    level 24+ ([#1989](https://github.com/google/ExoPlayer/issues/1989)).
3487*30877f79SAndroid Build Coastguard Worker*   Captions: Initial support for SSA/ASS subtitles
3488*30877f79SAndroid Build Coastguard Worker    ([#889](https://github.com/google/ExoPlayer/issues/889)).
3489*30877f79SAndroid Build Coastguard Worker*   AndroidTV: Fixed issue where tunneled video playback would not start on some
3490*30877f79SAndroid Build Coastguard Worker    devices ([#2985](https://github.com/google/ExoPlayer/issues/2985)).
3491*30877f79SAndroid Build Coastguard Worker*   MPEG-TS: Fixed segmentation issue when parsing H262
3492*30877f79SAndroid Build Coastguard Worker    ([#2891](https://github.com/google/ExoPlayer/issues/2891)).
3493*30877f79SAndroid Build Coastguard Worker*   Cronet extension: Support for a user-defined fallback if Cronet library is
3494*30877f79SAndroid Build Coastguard Worker    not present.
3495*30877f79SAndroid Build Coastguard Worker*   Fix buffer too small IllegalStateException issue affecting some composite
3496*30877f79SAndroid Build Coastguard Worker    media playbacks ([#2900](https://github.com/google/ExoPlayer/issues/2900)).
3497*30877f79SAndroid Build Coastguard Worker*   Misc bugfixes.
3498*30877f79SAndroid Build Coastguard Worker
3499*30877f79SAndroid Build Coastguard Worker### r2.4.4 (2017-07-19)
3500*30877f79SAndroid Build Coastguard Worker
3501*30877f79SAndroid Build Coastguard Worker*   HLS/MPEG-TS: Some initial optimizations of MPEG-TS extractor performance
3502*30877f79SAndroid Build Coastguard Worker    ([#3040](https://github.com/google/ExoPlayer/issues/3040)).
3503*30877f79SAndroid Build Coastguard Worker*   HLS: Fix propagation of format identifier for CEA-608
3504*30877f79SAndroid Build Coastguard Worker    ([#3033](https://github.com/google/ExoPlayer/issues/3033)).
3505*30877f79SAndroid Build Coastguard Worker*   HLS: Detect playlist stuck and reset conditions
3506*30877f79SAndroid Build Coastguard Worker    ([#2872](https://github.com/google/ExoPlayer/issues/2872)).
3507*30877f79SAndroid Build Coastguard Worker*   Video: Fix video dimension reporting on some devices
3508*30877f79SAndroid Build Coastguard Worker    ([#3007](https://github.com/google/ExoPlayer/issues/3007)).
3509*30877f79SAndroid Build Coastguard Worker
3510*30877f79SAndroid Build Coastguard Worker### r2.4.3 (2017-06-30)
3511*30877f79SAndroid Build Coastguard Worker
3512*30877f79SAndroid Build Coastguard Worker*   Audio: Workaround custom audio decoders misreporting their maximum supported
3513*30877f79SAndroid Build Coastguard Worker    channel counts ([#2940](https://github.com/google/ExoPlayer/issues/2940)).
3514*30877f79SAndroid Build Coastguard Worker*   Audio: Workaround for broken MediaTek raw decoder on some devices
3515*30877f79SAndroid Build Coastguard Worker    ([#2873](https://github.com/google/ExoPlayer/issues/2873)).
3516*30877f79SAndroid Build Coastguard Worker*   Captions: Fix TTML captions appearing at the top of the screen
3517*30877f79SAndroid Build Coastguard Worker    ([#2953](https://github.com/google/ExoPlayer/issues/2953)).
3518*30877f79SAndroid Build Coastguard Worker*   Captions: Fix handling of some DVB subtitles
3519*30877f79SAndroid Build Coastguard Worker    ([#2957](https://github.com/google/ExoPlayer/issues/2957)).
3520*30877f79SAndroid Build Coastguard Worker*   Track selection: Fix setSelectionOverride(index, tracks, null)
3521*30877f79SAndroid Build Coastguard Worker    ([#2988](https://github.com/google/ExoPlayer/issues/2988)).
3522*30877f79SAndroid Build Coastguard Worker*   GVR extension: Add support for mono input
3523*30877f79SAndroid Build Coastguard Worker    ([#2710](https://github.com/google/ExoPlayer/issues/2710)).
3524*30877f79SAndroid Build Coastguard Worker*   FLAC extension: Fix failing build
3525*30877f79SAndroid Build Coastguard Worker    ([#2977](https://github.com/google/ExoPlayer/pull/2977)).
3526*30877f79SAndroid Build Coastguard Worker*   Misc bugfixes.
3527*30877f79SAndroid Build Coastguard Worker
3528*30877f79SAndroid Build Coastguard Worker### r2.4.2 (2017-06-06)
3529*30877f79SAndroid Build Coastguard Worker
3530*30877f79SAndroid Build Coastguard Worker*   Stability: Work around Nexus 10 reboot when playing certain content
3531*30877f79SAndroid Build Coastguard Worker    ([#2806](https://github.com/google/ExoPlayer/issues/2806)).
3532*30877f79SAndroid Build Coastguard Worker*   MP3: Correctly treat MP3s with INFO headers as constant bitrate
3533*30877f79SAndroid Build Coastguard Worker    ([#2895](https://github.com/google/ExoPlayer/issues/2895)).
3534*30877f79SAndroid Build Coastguard Worker*   HLS: Use average rather than peak bandwidth when available
3535*30877f79SAndroid Build Coastguard Worker    ([#2863](https://github.com/google/ExoPlayer/issues/2863)).
3536*30877f79SAndroid Build Coastguard Worker*   SmoothStreaming: Fix timeline for live streams
3537*30877f79SAndroid Build Coastguard Worker    ([#2760](https://github.com/google/ExoPlayer/issues/2760)).
3538*30877f79SAndroid Build Coastguard Worker*   UI: Fix DefaultTimeBar invalidation
3539*30877f79SAndroid Build Coastguard Worker    ([#2871](https://github.com/google/ExoPlayer/issues/2871)).
3540*30877f79SAndroid Build Coastguard Worker*   Misc bugfixes.
3541*30877f79SAndroid Build Coastguard Worker
3542*30877f79SAndroid Build Coastguard Worker### r2.4.1 (2017-05-23)
3543*30877f79SAndroid Build Coastguard Worker
3544*30877f79SAndroid Build Coastguard Worker*   Stability: Avoid OutOfMemoryError in extractors when parsing malformed media
3545*30877f79SAndroid Build Coastguard Worker    ([#2780](https://github.com/google/ExoPlayer/issues/2780)).
3546*30877f79SAndroid Build Coastguard Worker*   Stability: Avoid native crash on Galaxy Nexus. Avoid unnecessarily large
3547*30877f79SAndroid Build Coastguard Worker    codec input buffer allocations on all devices
3548*30877f79SAndroid Build Coastguard Worker    ([#2607](https://github.com/google/ExoPlayer/issues/2607)).
3549*30877f79SAndroid Build Coastguard Worker*   Variable speed playback: Fix interpolation for rate/pitch adjustment
3550*30877f79SAndroid Build Coastguard Worker    ([#2774](https://github.com/google/ExoPlayer/issues/2774)).
3551*30877f79SAndroid Build Coastguard Worker*   HLS: Include EXT-X-DATERANGE tags in HlsMediaPlaylist.
3552*30877f79SAndroid Build Coastguard Worker*   HLS: Don't expose CEA-608 track if CLOSED-CAPTIONS=NONE
3553*30877f79SAndroid Build Coastguard Worker    ([#2743](https://github.com/google/ExoPlayer/issues/2743)).
3554*30877f79SAndroid Build Coastguard Worker*   HLS: Correctly propagate errors loading the media playlist
3555*30877f79SAndroid Build Coastguard Worker    ([#2623](https://github.com/google/ExoPlayer/issues/2623)).
3556*30877f79SAndroid Build Coastguard Worker*   UI: DefaultTimeBar enhancements and bug fixes
3557*30877f79SAndroid Build Coastguard Worker    ([#2740](https://github.com/google/ExoPlayer/issues/2740)).
3558*30877f79SAndroid Build Coastguard Worker*   Ogg: Fix failure to play some Ogg files
3559*30877f79SAndroid Build Coastguard Worker    ([#2782](https://github.com/google/ExoPlayer/issues/2782)).
3560*30877f79SAndroid Build Coastguard Worker*   Captions: Don't select text tack with no language by default.
3561*30877f79SAndroid Build Coastguard Worker*   Captions: TTML positioning fixes
3562*30877f79SAndroid Build Coastguard Worker    ([#2824](https://github.com/google/ExoPlayer/issues/2824)).
3563*30877f79SAndroid Build Coastguard Worker*   Misc bugfixes.
3564*30877f79SAndroid Build Coastguard Worker
3565*30877f79SAndroid Build Coastguard Worker### r2.4.0 (2017-04-25)
3566*30877f79SAndroid Build Coastguard Worker
3567*30877f79SAndroid Build Coastguard Worker*   New modular library structure. You can read more about depending on
3568*30877f79SAndroid Build Coastguard Worker    individual library modules
3569*30877f79SAndroid Build Coastguard Worker    [here](https://medium.com/google-exoplayer/exoplayers-new-modular-structure-a916c0874907).
3570*30877f79SAndroid Build Coastguard Worker*   Variable speed playback support on API level 16+. You can read more about
3571*30877f79SAndroid Build Coastguard Worker    changing the playback speed
3572*30877f79SAndroid Build Coastguard Worker    [here](https://medium.com/google-exoplayer/variable-speed-playback-with-exoplayer-e6e6a71e0343)
3573*30877f79SAndroid Build Coastguard Worker    ([#26](https://github.com/google/ExoPlayer/issues/26)).
3574*30877f79SAndroid Build Coastguard Worker*   New time bar view, including support for displaying ad break markers.
3575*30877f79SAndroid Build Coastguard Worker*   Support DVB subtitles in MPEG-TS and MKV.
3576*30877f79SAndroid Build Coastguard Worker*   Support adaptive playback for audio only DASH, HLS and SmoothStreaming
3577*30877f79SAndroid Build Coastguard Worker    ([#1975](https://github.com/google/ExoPlayer/issues/1975)).
3578*30877f79SAndroid Build Coastguard Worker*   Support for setting extractor flags on DefaultExtractorsFactory
3579*30877f79SAndroid Build Coastguard Worker    ([#2657](https://github.com/google/ExoPlayer/issues/2657)).
3580*30877f79SAndroid Build Coastguard Worker*   Support injecting custom renderers into SimpleExoPlayer using a new
3581*30877f79SAndroid Build Coastguard Worker    RenderersFactory interface.
3582*30877f79SAndroid Build Coastguard Worker*   Correctly set ExoPlayer's internal thread priority to
3583*30877f79SAndroid Build Coastguard Worker    `THREAD_PRIORITY_AUDIO`.
3584*30877f79SAndroid Build Coastguard Worker*   TX3G: Support styling and positioning.
3585*30877f79SAndroid Build Coastguard Worker*   FLV:
3586*30877f79SAndroid Build Coastguard Worker    *   Support MP3 in FLV.
3587*30877f79SAndroid Build Coastguard Worker    *   Skip unhandled metadata rather than failing
3588*30877f79SAndroid Build Coastguard Worker        ([#2634](https://github.com/google/ExoPlayer/issues/2634)).
3589*30877f79SAndroid Build Coastguard Worker    *   Fix potential OutOfMemory errors.
3590*30877f79SAndroid Build Coastguard Worker*   ID3: Better handle malformed ID3 data
3591*30877f79SAndroid Build Coastguard Worker    ([#2604](https://github.com/google/ExoPlayer/issues/2604),
3592*30877f79SAndroid Build Coastguard Worker    [#2663](https://github.com/google/ExoPlayer/issues/2663)).
3593*30877f79SAndroid Build Coastguard Worker*   FFmpeg extension: Fixed build instructions
3594*30877f79SAndroid Build Coastguard Worker    ([#2561](https://github.com/google/ExoPlayer/issues/2561)).
3595*30877f79SAndroid Build Coastguard Worker*   VP9 extension: Reduced binary size.
3596*30877f79SAndroid Build Coastguard Worker*   FLAC extension: Enabled 64 bit targets.
3597*30877f79SAndroid Build Coastguard Worker*   Misc bugfixes.
3598*30877f79SAndroid Build Coastguard Worker
3599*30877f79SAndroid Build Coastguard Worker### r2.3.1 (2017-03-23)
3600*30877f79SAndroid Build Coastguard Worker
3601*30877f79SAndroid Build Coastguard Worker*   Fix NPE enabling WebVTT subtitles in DASH streams
3602*30877f79SAndroid Build Coastguard Worker    ([#2596](https://github.com/google/ExoPlayer/issues/2596)).
3603*30877f79SAndroid Build Coastguard Worker*   Fix skipping to keyframes when MediaCodecVideoRenderer is enabled but
3604*30877f79SAndroid Build Coastguard Worker    without a Surface
3605*30877f79SAndroid Build Coastguard Worker    ([#2575](https://github.com/google/ExoPlayer/issues/2575)).
3606*30877f79SAndroid Build Coastguard Worker*   Minor fix for CEA-708 decoder
3607*30877f79SAndroid Build Coastguard Worker    ([#2595](https://github.com/google/ExoPlayer/issues/2595)).
3608*30877f79SAndroid Build Coastguard Worker
3609*30877f79SAndroid Build Coastguard Worker### r2.3.0 (2017-03-16)
3610*30877f79SAndroid Build Coastguard Worker
3611*30877f79SAndroid Build Coastguard Worker*   GVR extension: Wraps the Google VR Audio SDK to provide spatial audio
3612*30877f79SAndroid Build Coastguard Worker    rendering. You can read more about the GVR extension
3613*30877f79SAndroid Build Coastguard Worker    [here](https://medium.com/google-exoplayer/spatial-audio-with-exoplayer-and-gvr-cecb00e9da5f#.xdjebjd7g).
3614*30877f79SAndroid Build Coastguard Worker*   DASH improvements:
3615*30877f79SAndroid Build Coastguard Worker    *   Support embedded CEA-608 closed captions
3616*30877f79SAndroid Build Coastguard Worker        ([#2362](https://github.com/google/ExoPlayer/issues/2362)).
3617*30877f79SAndroid Build Coastguard Worker    *   Support embedded EMSG events
3618*30877f79SAndroid Build Coastguard Worker        ([#2176](https://github.com/google/ExoPlayer/issues/2176)).
3619*30877f79SAndroid Build Coastguard Worker    *   Support mspr:pro manifest element
3620*30877f79SAndroid Build Coastguard Worker        ([#2386](https://github.com/google/ExoPlayer/issues/2386)).
3621*30877f79SAndroid Build Coastguard Worker    *   Correct handling of empty segment indices at the start of live events
3622*30877f79SAndroid Build Coastguard Worker        ([#1865](https://github.com/google/ExoPlayer/issues/1865)).
3623*30877f79SAndroid Build Coastguard Worker*   HLS improvements:
3624*30877f79SAndroid Build Coastguard Worker    *   Respect initial track selection
3625*30877f79SAndroid Build Coastguard Worker        ([#2353](https://github.com/google/ExoPlayer/issues/2353)).
3626*30877f79SAndroid Build Coastguard Worker    *   Reduced frequency of media playlist requests when playback position is
3627*30877f79SAndroid Build Coastguard Worker        close to the live edge
3628*30877f79SAndroid Build Coastguard Worker        ([#2548](https://github.com/google/ExoPlayer/issues/2548)).
3629*30877f79SAndroid Build Coastguard Worker    *   Exposed the master playlist through ExoPlayer.getCurrentManifest()
3630*30877f79SAndroid Build Coastguard Worker        ([#2537](https://github.com/google/ExoPlayer/issues/2537)).
3631*30877f79SAndroid Build Coastguard Worker    *   Support CLOSED-CAPTIONS #EXT-X-MEDIA type
3632*30877f79SAndroid Build Coastguard Worker        ([#341](https://github.com/google/ExoPlayer/issues/341)).
3633*30877f79SAndroid Build Coastguard Worker    *   Fixed handling of negative values in #EXT-X-SUPPORT
3634*30877f79SAndroid Build Coastguard Worker        ([#2495](https://github.com/google/ExoPlayer/issues/2495)).
3635*30877f79SAndroid Build Coastguard Worker    *   Fixed potential endless buffering state for streams with WebVTT
3636*30877f79SAndroid Build Coastguard Worker        subtitles ([#2424](https://github.com/google/ExoPlayer/issues/2424)).
3637*30877f79SAndroid Build Coastguard Worker*   MPEG-TS improvements:
3638*30877f79SAndroid Build Coastguard Worker    *   Support for multiple programs.
3639*30877f79SAndroid Build Coastguard Worker    *   Support for multiple closed captions and caption service descriptors
3640*30877f79SAndroid Build Coastguard Worker        ([#2161](https://github.com/google/ExoPlayer/issues/2161)).
3641*30877f79SAndroid Build Coastguard Worker*   MP3: Add `FLAG_ENABLE_CONSTANT_BITRATE_SEEKING` extractor option to enable
3642*30877f79SAndroid Build Coastguard Worker    constant bitrate seeking in MP3 files that would otherwise be unseekable
3643*30877f79SAndroid Build Coastguard Worker    ([#2445](https://github.com/google/ExoPlayer/issues/2445)).
3644*30877f79SAndroid Build Coastguard Worker*   ID3: Better handle malformed ID3 data
3645*30877f79SAndroid Build Coastguard Worker    ([#2486](https://github.com/google/ExoPlayer/issues/2486)).
3646*30877f79SAndroid Build Coastguard Worker*   Track selection: Added maxVideoBitrate parameter to DefaultTrackSelector.
3647*30877f79SAndroid Build Coastguard Worker*   DRM: Add support for CENC ClearKey on API level 21+
3648*30877f79SAndroid Build Coastguard Worker    ([#2361](https://github.com/google/ExoPlayer/issues/2361)).
3649*30877f79SAndroid Build Coastguard Worker*   DRM: Support dynamic setting of key request headers
3650*30877f79SAndroid Build Coastguard Worker    ([#1924](https://github.com/google/ExoPlayer/issues/1924)).
3651*30877f79SAndroid Build Coastguard Worker*   SmoothStreaming: Fixed handling of start_time placeholder
3652*30877f79SAndroid Build Coastguard Worker    ([#2447](https://github.com/google/ExoPlayer/issues/2447)).
3653*30877f79SAndroid Build Coastguard Worker*   FLAC extension: Fix proguard configuration
3654*30877f79SAndroid Build Coastguard Worker    ([#2427](https://github.com/google/ExoPlayer/issues/2427)).
3655*30877f79SAndroid Build Coastguard Worker*   Misc bugfixes.
3656*30877f79SAndroid Build Coastguard Worker
3657*30877f79SAndroid Build Coastguard Worker### r2.2.0 (2017-01-30)
3658*30877f79SAndroid Build Coastguard Worker
3659*30877f79SAndroid Build Coastguard Worker*   Demo app: Automatic recovery from BehindLiveWindowException, plus improved
3660*30877f79SAndroid Build Coastguard Worker    handling of pausing and resuming live streams
3661*30877f79SAndroid Build Coastguard Worker    ([#2344](https://github.com/google/ExoPlayer/issues/2344)).
3662*30877f79SAndroid Build Coastguard Worker*   AndroidTV: Added Support for tunneled video playback
3663*30877f79SAndroid Build Coastguard Worker    ([#1688](https://github.com/google/ExoPlayer/issues/1688)).
3664*30877f79SAndroid Build Coastguard Worker*   DRM: Renamed StreamingDrmSessionManager to DefaultDrmSessionManager and
3665*30877f79SAndroid Build Coastguard Worker    added support for using offline licenses
3666*30877f79SAndroid Build Coastguard Worker    ([#876](https://github.com/google/ExoPlayer/issues/876)).
3667*30877f79SAndroid Build Coastguard Worker*   DRM: Introduce OfflineLicenseHelper to help with offline license
3668*30877f79SAndroid Build Coastguard Worker    acquisition, renewal and release.
3669*30877f79SAndroid Build Coastguard Worker*   UI: Updated player control assets. Added vector drawables for use on API
3670*30877f79SAndroid Build Coastguard Worker    level 21 and above.
3671*30877f79SAndroid Build Coastguard Worker*   UI: Made player control seek bar work correctly with key events if focusable
3672*30877f79SAndroid Build Coastguard Worker    ([#2278](https://github.com/google/ExoPlayer/issues/2278)).
3673*30877f79SAndroid Build Coastguard Worker*   HLS: Improved support for streams that use EXT-X-DISCONTINUITY without
3674*30877f79SAndroid Build Coastguard Worker    EXT-X-DISCONTINUITY-SEQUENCE
3675*30877f79SAndroid Build Coastguard Worker    ([#1789](https://github.com/google/ExoPlayer/issues/1789)).
3676*30877f79SAndroid Build Coastguard Worker*   HLS: Support for EXT-X-START tag
3677*30877f79SAndroid Build Coastguard Worker    ([#1544](https://github.com/google/ExoPlayer/issues/1544)).
3678*30877f79SAndroid Build Coastguard Worker*   HLS: Check #EXTM3U header is present when parsing the playlist. Fail
3679*30877f79SAndroid Build Coastguard Worker    gracefully if not
3680*30877f79SAndroid Build Coastguard Worker    ([#2301](https://github.com/google/ExoPlayer/issues/2301)).
3681*30877f79SAndroid Build Coastguard Worker*   HLS: Fix memory leak
3682*30877f79SAndroid Build Coastguard Worker    ([#2319](https://github.com/google/ExoPlayer/issues/2319)).
3683*30877f79SAndroid Build Coastguard Worker*   HLS: Fix non-seamless first adaptation where master playlist omits
3684*30877f79SAndroid Build Coastguard Worker    resolution tags ([#2096](https://github.com/google/ExoPlayer/issues/2096)).
3685*30877f79SAndroid Build Coastguard Worker*   HLS: Fix handling of WebVTT subtitle renditions with non-standard segment
3686*30877f79SAndroid Build Coastguard Worker    file extensions ([#2025](https://github.com/google/ExoPlayer/issues/2025)
3687*30877f79SAndroid Build Coastguard Worker    and [#2355](https://github.com/google/ExoPlayer/issues/2355)).
3688*30877f79SAndroid Build Coastguard Worker*   HLS: Better handle inconsistent HLS playlist update
3689*30877f79SAndroid Build Coastguard Worker    ([#2249](https://github.com/google/ExoPlayer/issues/2249)).
3690*30877f79SAndroid Build Coastguard Worker*   DASH: Don't overflow when dealing with large segment numbers
3691*30877f79SAndroid Build Coastguard Worker    ([#2311](https://github.com/google/ExoPlayer/issues/2311)).
3692*30877f79SAndroid Build Coastguard Worker*   DASH: Fix propagation of language from the manifest
3693*30877f79SAndroid Build Coastguard Worker    ([#2335](https://github.com/google/ExoPlayer/issues/2335)).
3694*30877f79SAndroid Build Coastguard Worker*   SmoothStreaming: Work around "Offset to sample data was negative" failures
3695*30877f79SAndroid Build Coastguard Worker    ([#2292](https://github.com/google/ExoPlayer/issues/2292),
3696*30877f79SAndroid Build Coastguard Worker    [#2101](https://github.com/google/ExoPlayer/issues/2101) and
3697*30877f79SAndroid Build Coastguard Worker    [#1152](https://github.com/google/ExoPlayer/issues/1152)).
3698*30877f79SAndroid Build Coastguard Worker*   MP3/ID3: Added support for parsing Chapter and URL link frames
3699*30877f79SAndroid Build Coastguard Worker    ([#2316](https://github.com/google/ExoPlayer/issues/2316)).
3700*30877f79SAndroid Build Coastguard Worker*   MP3/ID3: Handle ID3 frames that end with empty text field
3701*30877f79SAndroid Build Coastguard Worker    ([#2309](https://github.com/google/ExoPlayer/issues/2309)).
3702*30877f79SAndroid Build Coastguard Worker*   Added ClippingMediaSource for playing clipped portions of media
3703*30877f79SAndroid Build Coastguard Worker    ([#1988](https://github.com/google/ExoPlayer/issues/1988)).
3704*30877f79SAndroid Build Coastguard Worker*   Added convenience methods to query whether the current window is dynamic and
3705*30877f79SAndroid Build Coastguard Worker    seekable ([#2320](https://github.com/google/ExoPlayer/issues/2320)).
3706*30877f79SAndroid Build Coastguard Worker*   Support setting of default headers on HttpDataSource.Factory implementations
3707*30877f79SAndroid Build Coastguard Worker    ([#2166](https://github.com/google/ExoPlayer/issues/2166)).
3708*30877f79SAndroid Build Coastguard Worker*   Fixed cache failures when using an encrypted cache content index.
3709*30877f79SAndroid Build Coastguard Worker*   Fix visual artifacts when switching output surface
3710*30877f79SAndroid Build Coastguard Worker    ([#2093](https://github.com/google/ExoPlayer/issues/2093)).
3711*30877f79SAndroid Build Coastguard Worker*   Fix gradle + proguard configurations.
3712*30877f79SAndroid Build Coastguard Worker*   Fix player position when replacing the MediaSource
3713*30877f79SAndroid Build Coastguard Worker    ([#2369](https://github.com/google/ExoPlayer/issues/2369)).
3714*30877f79SAndroid Build Coastguard Worker*   Misc bug fixes, including
3715*30877f79SAndroid Build Coastguard Worker    [#2330](https://github.com/google/ExoPlayer/issues/2330),
3716*30877f79SAndroid Build Coastguard Worker    [#2269](https://github.com/google/ExoPlayer/issues/2269),
3717*30877f79SAndroid Build Coastguard Worker    [#2252](https://github.com/google/ExoPlayer/issues/2252),
3718*30877f79SAndroid Build Coastguard Worker    [#2264](https://github.com/google/ExoPlayer/issues/2264) and
3719*30877f79SAndroid Build Coastguard Worker    [#2290](https://github.com/google/ExoPlayer/issues/2290).
3720*30877f79SAndroid Build Coastguard Worker
3721*30877f79SAndroid Build Coastguard Worker### r2.1.1 (2016-12-20)
3722*30877f79SAndroid Build Coastguard Worker
3723*30877f79SAndroid Build Coastguard Worker*   Fix some subtitle types (e.g. WebVTT) being displayed out of sync
3724*30877f79SAndroid Build Coastguard Worker    ([#2208](https://github.com/google/ExoPlayer/issues/2208)).
3725*30877f79SAndroid Build Coastguard Worker*   Fix incorrect position reporting for on-demand HLS media that includes
3726*30877f79SAndroid Build Coastguard Worker    EXT-X-PROGRAM-DATE-TIME tags
3727*30877f79SAndroid Build Coastguard Worker    ([#2224](https://github.com/google/ExoPlayer/issues/2224)).
3728*30877f79SAndroid Build Coastguard Worker*   Fix issue where playbacks could get stuck in the initial buffering state if
3729*30877f79SAndroid Build Coastguard Worker    over 1MB of data needs to be read to initialize the playback.
3730*30877f79SAndroid Build Coastguard Worker
3731*30877f79SAndroid Build Coastguard Worker### r2.1.0 (2016-12-14)
3732*30877f79SAndroid Build Coastguard Worker
3733*30877f79SAndroid Build Coastguard Worker*   HLS: Support for seeking in live streams
3734*30877f79SAndroid Build Coastguard Worker    ([#87](https://github.com/google/ExoPlayer/issues/87)).
3735*30877f79SAndroid Build Coastguard Worker*   HLS: Improved support:
3736*30877f79SAndroid Build Coastguard Worker    *   Support for EXT-X-PROGRAM-DATE-TIME
3737*30877f79SAndroid Build Coastguard Worker        ([#747](https://github.com/google/ExoPlayer/issues/747)).
3738*30877f79SAndroid Build Coastguard Worker    *   Improved handling of sample timestamps and their alignment across
3739*30877f79SAndroid Build Coastguard Worker        variants and renditions.
3740*30877f79SAndroid Build Coastguard Worker    *   Fix issue that could cause playbacks to get stuck in an endless initial
3741*30877f79SAndroid Build Coastguard Worker        buffering state.
3742*30877f79SAndroid Build Coastguard Worker    *   Correctly propagate BehindLiveWindowException instead of
3743*30877f79SAndroid Build Coastguard Worker        IndexOutOfBoundsException exception
3744*30877f79SAndroid Build Coastguard Worker        ([#1695](https://github.com/google/ExoPlayer/issues/1695)).
3745*30877f79SAndroid Build Coastguard Worker*   MP3/MP4: Support for ID3 metadata, including embedded album art
3746*30877f79SAndroid Build Coastguard Worker    ([#979](https://github.com/google/ExoPlayer/issues/979)).
3747*30877f79SAndroid Build Coastguard Worker*   Improved customization of UI components. You can read about customization of
3748*30877f79SAndroid Build Coastguard Worker    ExoPlayer's UI components
3749*30877f79SAndroid Build Coastguard Worker    [here](https://medium.com/google-exoplayer/customizing-exoplayers-ui-components-728cf55ee07a#.9ewjg7avi).
3750*30877f79SAndroid Build Coastguard Worker*   Robustness improvements when handling MediaSource timeline changes and
3751*30877f79SAndroid Build Coastguard Worker    MediaPeriod transitions.
3752*30877f79SAndroid Build Coastguard Worker*   CEA-608: Support for caption styling and positioning.
3753*30877f79SAndroid Build Coastguard Worker*   MPEG-TS: Improved support:
3754*30877f79SAndroid Build Coastguard Worker    *   Support injection of custom TS payload readers.
3755*30877f79SAndroid Build Coastguard Worker    *   Support injection of custom section payload readers.
3756*30877f79SAndroid Build Coastguard Worker    *   Support SCTE-35 splice information messages.
3757*30877f79SAndroid Build Coastguard Worker    *   Support multiple table sections in a single PSI section.
3758*30877f79SAndroid Build Coastguard Worker    *   Fix NullPointerException when an unsupported stream type is encountered
3759*30877f79SAndroid Build Coastguard Worker        ([#2149](https://github.com/google/ExoPlayer/issues/2149)).
3760*30877f79SAndroid Build Coastguard Worker    *   Avoid failure when expected ID3 header not found
3761*30877f79SAndroid Build Coastguard Worker        ([#1966](https://github.com/google/ExoPlayer/issues/1966)).
3762*30877f79SAndroid Build Coastguard Worker*   Improvements to the upstream cache package.
3763*30877f79SAndroid Build Coastguard Worker    *   Support caching of media segments for DASH, HLS and SmoothStreaming.
3764*30877f79SAndroid Build Coastguard Worker        Note that caching of manifest and playlist files is still not supported
3765*30877f79SAndroid Build Coastguard Worker        in the (normal) case where the corresponding responses are compressed.
3766*30877f79SAndroid Build Coastguard Worker    *   Support caching for ExtractorMediaSource based playbacks.
3767*30877f79SAndroid Build Coastguard Worker*   Improved flexibility of SimpleExoPlayer
3768*30877f79SAndroid Build Coastguard Worker    ([#2102](https://github.com/google/ExoPlayer/issues/2102)).
3769*30877f79SAndroid Build Coastguard Worker*   Fix issue where only the audio of a video would play due to capability
3770*30877f79SAndroid Build Coastguard Worker    detection issues ([#2007](https://github.com/google/ExoPlayer/issues/2007),
3771*30877f79SAndroid Build Coastguard Worker    [#2034](https://github.com/google/ExoPlayer/issues/2034) and
3772*30877f79SAndroid Build Coastguard Worker    [#2157](https://github.com/google/ExoPlayer/issues/2157)).
3773*30877f79SAndroid Build Coastguard Worker*   Fix issues that could cause ExtractorMediaSource based playbacks to get
3774*30877f79SAndroid Build Coastguard Worker    stuck buffering ([#1962](https://github.com/google/ExoPlayer/issues/1962)).
3775*30877f79SAndroid Build Coastguard Worker*   Correctly set SimpleExoPlayerView surface aspect ratio when an active player
3776*30877f79SAndroid Build Coastguard Worker    is attached ([#2077](https://github.com/google/ExoPlayer/issues/2077)).
3777*30877f79SAndroid Build Coastguard Worker*   OGG: Fix playback of short OGG files
3778*30877f79SAndroid Build Coastguard Worker    ([#1976](https://github.com/google/ExoPlayer/issues/1976)).
3779*30877f79SAndroid Build Coastguard Worker*   MP4: Support `.mp3` tracks
3780*30877f79SAndroid Build Coastguard Worker    ([#2066](https://github.com/google/ExoPlayer/issues/2066)).
3781*30877f79SAndroid Build Coastguard Worker*   SubRip: Don't fail playbacks if SubRip file contains negative timestamps
3782*30877f79SAndroid Build Coastguard Worker    ([#2145](https://github.com/google/ExoPlayer/issues/2145)).
3783*30877f79SAndroid Build Coastguard Worker*   Misc bugfixes.
3784*30877f79SAndroid Build Coastguard Worker
3785*30877f79SAndroid Build Coastguard Worker### r2.0.4 (2016-10-20)
3786*30877f79SAndroid Build Coastguard Worker
3787*30877f79SAndroid Build Coastguard Worker*   Fix crash on Jellybean devices when using playback controls
3788*30877f79SAndroid Build Coastguard Worker    ([#1965](https://github.com/google/ExoPlayer/issues/1965)).
3789*30877f79SAndroid Build Coastguard Worker
3790*30877f79SAndroid Build Coastguard Worker### r2.0.3 (2016-10-17)
3791*30877f79SAndroid Build Coastguard Worker
3792*30877f79SAndroid Build Coastguard Worker*   Fixed NullPointerException in ExtractorMediaSource
3793*30877f79SAndroid Build Coastguard Worker    ([#1914](https://github.com/google/ExoPlayer/issues/1914)).
3794*30877f79SAndroid Build Coastguard Worker*   Fixed NullPointerException in HlsMediaPeriod
3795*30877f79SAndroid Build Coastguard Worker    ([#1907](https://github.com/google/ExoPlayer/issues/1907)).
3796*30877f79SAndroid Build Coastguard Worker*   Fixed memory leak in PlaybackControlView
3797*30877f79SAndroid Build Coastguard Worker    ([#1908](https://github.com/google/ExoPlayer/issues/1908)).
3798*30877f79SAndroid Build Coastguard Worker*   Fixed strict mode violation when using
3799*30877f79SAndroid Build Coastguard Worker    SimpleExoPlayer.setVideoPlayerTextureView().
3800*30877f79SAndroid Build Coastguard Worker*   Fixed L3 Widevine provisioning
3801*30877f79SAndroid Build Coastguard Worker    ([#1925](https://github.com/google/ExoPlayer/issues/1925)).
3802*30877f79SAndroid Build Coastguard Worker*   Fixed hiding of controls with use_controller="false"
3803*30877f79SAndroid Build Coastguard Worker    ([#1919](https://github.com/google/ExoPlayer/issues/1919)).
3804*30877f79SAndroid Build Coastguard Worker*   Improvements to Cronet network stack extension.
3805*30877f79SAndroid Build Coastguard Worker*   Misc bug fixes.
3806*30877f79SAndroid Build Coastguard Worker
3807*30877f79SAndroid Build Coastguard Worker### r2.0.2 (2016-10-06)
3808*30877f79SAndroid Build Coastguard Worker
3809*30877f79SAndroid Build Coastguard Worker*   Fixes for MergingMediaSource and sideloaded subtitles.
3810*30877f79SAndroid Build Coastguard Worker    ([#1882](https://github.com/google/ExoPlayer/issues/1882),
3811*30877f79SAndroid Build Coastguard Worker    [#1854](https://github.com/google/ExoPlayer/issues/1854),
3812*30877f79SAndroid Build Coastguard Worker    [#1900](https://github.com/google/ExoPlayer/issues/1900)).
3813*30877f79SAndroid Build Coastguard Worker*   Reduced effect of application code leaking player references
3814*30877f79SAndroid Build Coastguard Worker    ([#1855](https://github.com/google/ExoPlayer/issues/1855)).
3815*30877f79SAndroid Build Coastguard Worker*   Initial support for fragmented MP4 in HLS.
3816*30877f79SAndroid Build Coastguard Worker*   Misc bug fixes and minor features.
3817*30877f79SAndroid Build Coastguard Worker
3818*30877f79SAndroid Build Coastguard Worker### r2.0.1 (2016-09-30)
3819*30877f79SAndroid Build Coastguard Worker
3820*30877f79SAndroid Build Coastguard Worker*   Fix playback of short duration content
3821*30877f79SAndroid Build Coastguard Worker    ([#1837](https://github.com/google/ExoPlayer/issues/1837)).
3822*30877f79SAndroid Build Coastguard Worker*   Fix MergingMediaSource preparation issue
3823*30877f79SAndroid Build Coastguard Worker    ([#1853](https://github.com/google/ExoPlayer/issues/1853)).
3824*30877f79SAndroid Build Coastguard Worker*   Fix live stream buffering (out of memory) issue
3825*30877f79SAndroid Build Coastguard Worker    ([#1825](https://github.com/google/ExoPlayer/issues/1825)).
3826*30877f79SAndroid Build Coastguard Worker
3827*30877f79SAndroid Build Coastguard Worker### r2.0.0 (2016-09-14)
3828*30877f79SAndroid Build Coastguard Worker
3829*30877f79SAndroid Build Coastguard WorkerExoPlayer 2.x is a major iteration of the library. It includes significant API
3830*30877f79SAndroid Build Coastguard Workerand architectural changes, new features and many bug fixes. You can read about
3831*30877f79SAndroid Build Coastguard Workersome of the motivations behind ExoPlayer 2.x
3832*30877f79SAndroid Build Coastguard Worker[here](https://medium.com/google-exoplayer/exoplayer-2-x-why-what-and-when-74fd9cb139#.am7h8nytm).
3833*30877f79SAndroid Build Coastguard Worker
3834*30877f79SAndroid Build Coastguard Worker*   Root package name changed to `com.google.android.exoplayer2`. The library
3835*30877f79SAndroid Build Coastguard Worker    structure and class names have also been sanitized. Read more
3836*30877f79SAndroid Build Coastguard Worker    [here](https://medium.com/google-exoplayer/exoplayer-2-x-new-package-and-class-names-ef8e1d9ba96f#.lv8sd4nez).
3837*30877f79SAndroid Build Coastguard Worker*   Key architectural changes:
3838*30877f79SAndroid Build Coastguard Worker    *   Late binding between rendering and media source components. Allows the
3839*30877f79SAndroid Build Coastguard Worker        same rendering components to be re-used from one playback to another.
3840*30877f79SAndroid Build Coastguard Worker        Enables features such as gapless playback through playlists and DASH
3841*30877f79SAndroid Build Coastguard Worker        multi-period support.
3842*30877f79SAndroid Build Coastguard Worker    *   Improved track selection design. More details can be found
3843*30877f79SAndroid Build Coastguard Worker        [here](https://medium.com/google-exoplayer/exoplayer-2-x-track-selection-2b62ff712cc9#.n00zo76b6).
3844*30877f79SAndroid Build Coastguard Worker    *   LoadControl now used to control buffering and loading across all
3845*30877f79SAndroid Build Coastguard Worker        playback types.
3846*30877f79SAndroid Build Coastguard Worker    *   Media source components given additional structure. A new MediaSource
3847*30877f79SAndroid Build Coastguard Worker        class has been introduced. MediaSources expose Timelines that describe
3848*30877f79SAndroid Build Coastguard Worker        the media they expose, and can consist of multiple MediaPeriods. This
3849*30877f79SAndroid Build Coastguard Worker        enables features such as seeking in live playbacks and DASH multi-period
3850*30877f79SAndroid Build Coastguard Worker        support.
3851*30877f79SAndroid Build Coastguard Worker    *   Responsibility for loading the initial DASH/SmoothStreaming/HLS manifest
3852*30877f79SAndroid Build Coastguard Worker        is promoted to the corresponding MediaSource components and is no longer
3853*30877f79SAndroid Build Coastguard Worker        the application's responsibility.
3854*30877f79SAndroid Build Coastguard Worker    *   Higher level abstractions such as SimpleExoPlayer have been added to the
3855*30877f79SAndroid Build Coastguard Worker        library. These make the library easier to use for common use cases. The
3856*30877f79SAndroid Build Coastguard Worker        demo app is halved in size as a result, whilst at the same time gaining
3857*30877f79SAndroid Build Coastguard Worker        more functionality. Read more
3858*30877f79SAndroid Build Coastguard Worker        [here](https://medium.com/google-exoplayer/exoplayer-2-x-improved-demo-app-d97171aaaaa1).
3859*30877f79SAndroid Build Coastguard Worker    *   Enhanced library support for implementing audio extensions. Read more
3860*30877f79SAndroid Build Coastguard Worker        [here](https://medium.com/google-exoplayer/exoplayer-2-x-new-audio-features-cfb26c2883a#.ua75vu4s3).
3861*30877f79SAndroid Build Coastguard Worker    *   Format and MediaFormat are replaced by a single Format class.
3862*30877f79SAndroid Build Coastguard Worker*   Key new features:
3863*30877f79SAndroid Build Coastguard Worker    *   Playlist support. Includes support for gapless playback between playlist
3864*30877f79SAndroid Build Coastguard Worker        items and consistent application of LoadControl and TrackSelector
3865*30877f79SAndroid Build Coastguard Worker        policies when transitioning between items
3866*30877f79SAndroid Build Coastguard Worker        ([#1270](https://github.com/google/ExoPlayer/issues/1270)).
3867*30877f79SAndroid Build Coastguard Worker    *   Seeking in live playbacks for DASH and SmoothStreaming
3868*30877f79SAndroid Build Coastguard Worker        ([#291](https://github.com/google/ExoPlayer/issues/291)).
3869*30877f79SAndroid Build Coastguard Worker    *   DASH multi-period support
3870*30877f79SAndroid Build Coastguard Worker        ([#557](https://github.com/google/ExoPlayer/issues/557)).
3871*30877f79SAndroid Build Coastguard Worker    *   MediaSource composition allows MediaSources to be concatenated into a
3872*30877f79SAndroid Build Coastguard Worker        playlist, merged and looped. Read more
3873*30877f79SAndroid Build Coastguard Worker        [here](https://medium.com/google-exoplayer/exoplayer-2-x-mediasource-composition-6c285fcbca1f#.zfha8qupz).
3874*30877f79SAndroid Build Coastguard Worker    *   Looping support (see above)
3875*30877f79SAndroid Build Coastguard Worker        ([#490](https://github.com/google/ExoPlayer/issues/490)).
3876*30877f79SAndroid Build Coastguard Worker    *   Ability to query information about all tracks in a piece of media
3877*30877f79SAndroid Build Coastguard Worker        (including those not supported by the device)
3878*30877f79SAndroid Build Coastguard Worker        ([#1121](https://github.com/google/ExoPlayer/issues/1121)).
3879*30877f79SAndroid Build Coastguard Worker    *   Improved player controls.
3880*30877f79SAndroid Build Coastguard Worker    *   Support for PSSH in fMP4 moof atoms
3881*30877f79SAndroid Build Coastguard Worker        ([#1143](https://github.com/google/ExoPlayer/issues/1143)).
3882*30877f79SAndroid Build Coastguard Worker    *   Support for Opus in Ogg
3883*30877f79SAndroid Build Coastguard Worker        ([#1447](https://github.com/google/ExoPlayer/issues/1447)).
3884*30877f79SAndroid Build Coastguard Worker    *   CacheDataSource support for standalone media file playbacks (mp3, mp4
3885*30877f79SAndroid Build Coastguard Worker        etc).
3886*30877f79SAndroid Build Coastguard Worker    *   FFMPEG extension (for audio only).
3887*30877f79SAndroid Build Coastguard Worker*   Key bug fixes:
3888*30877f79SAndroid Build Coastguard Worker    *   Removed unnecessary secondary requests when playing standalone media
3889*30877f79SAndroid Build Coastguard Worker        files ([#1041](https://github.com/google/ExoPlayer/issues/1041)).
3890*30877f79SAndroid Build Coastguard Worker    *   Fixed playback of video only (i.e. no audio) live streams
3891*30877f79SAndroid Build Coastguard Worker        ([#758](https://github.com/google/ExoPlayer/issues/758)).
3892*30877f79SAndroid Build Coastguard Worker    *   Fixed silent failure when media buffer is too small
3893*30877f79SAndroid Build Coastguard Worker        ([#583](https://github.com/google/ExoPlayer/issues/583)).
3894*30877f79SAndroid Build Coastguard Worker    *   Suppressed "Sending message to a Handler on a dead thread" warnings
3895*30877f79SAndroid Build Coastguard Worker        ([#426](https://github.com/google/ExoPlayer/issues/426)).
3896*30877f79SAndroid Build Coastguard Worker
3897*30877f79SAndroid Build Coastguard Worker# Legacy release notes
3898*30877f79SAndroid Build Coastguard Worker
3899*30877f79SAndroid Build Coastguard WorkerNote: Since ExoPlayer V1 is still being maintained alongside V2, there is some
3900*30877f79SAndroid Build Coastguard Workeroverlap between these notes and the notes above. r2.0.0 followed from r1.5.11,
3901*30877f79SAndroid Build Coastguard Workerand hence it can be assumed that all changes in r1.5.11 and earlier are included
3902*30877f79SAndroid Build Coastguard Workerin all V2 releases. This cannot be assumed for changes in r1.5.12 and later,
3903*30877f79SAndroid Build Coastguard Workerhowever it can be assumed that all such changes are included in the most recent
3904*30877f79SAndroid Build Coastguard WorkerV2 release.
3905*30877f79SAndroid Build Coastguard Worker
3906*30877f79SAndroid Build Coastguard Worker### r1.5.16
3907*30877f79SAndroid Build Coastguard Worker
3908*30877f79SAndroid Build Coastguard Worker*   VP9 extension: Reduced binary size.
3909*30877f79SAndroid Build Coastguard Worker*   FLAC extension: Enabled 64 bit targets and fixed proguard config.
3910*30877f79SAndroid Build Coastguard Worker*   Misc bugfixes.
3911*30877f79SAndroid Build Coastguard Worker
3912*30877f79SAndroid Build Coastguard Worker### r1.5.15
3913*30877f79SAndroid Build Coastguard Worker
3914*30877f79SAndroid Build Coastguard Worker*   SmoothStreaming: Fixed handling of start_time placeholder
3915*30877f79SAndroid Build Coastguard Worker    ([#2447](https://github.com/google/ExoPlayer/issues/2447)).
3916*30877f79SAndroid Build Coastguard Worker*   Misc bugfixes.
3917*30877f79SAndroid Build Coastguard Worker
3918*30877f79SAndroid Build Coastguard Worker### r1.5.14
3919*30877f79SAndroid Build Coastguard Worker
3920*30877f79SAndroid Build Coastguard Worker*   Fixed cache failures when using an encrypted cache content index.
3921*30877f79SAndroid Build Coastguard Worker*   SmoothStreaming: Work around "Offset to sample data was negative" failures
3922*30877f79SAndroid Build Coastguard Worker    ([#2292](https://github.com/google/ExoPlayer/issues/2292),
3923*30877f79SAndroid Build Coastguard Worker    [#2101](https://github.com/google/ExoPlayer/issues/2101) and
3924*30877f79SAndroid Build Coastguard Worker    [#1152](https://github.com/google/ExoPlayer/issues/1152)).
3925*30877f79SAndroid Build Coastguard Worker
3926*30877f79SAndroid Build Coastguard Worker### r1.5.13
3927*30877f79SAndroid Build Coastguard Worker
3928*30877f79SAndroid Build Coastguard Worker*   Improvements to the upstream cache package.
3929*30877f79SAndroid Build Coastguard Worker*   MP4: Support `.mp3` tracks
3930*30877f79SAndroid Build Coastguard Worker    ([#2066](https://github.com/google/ExoPlayer/issues/2066)).
3931*30877f79SAndroid Build Coastguard Worker*   SubRip: Don't fail playbacks if SubRip file contains negative timestamps
3932*30877f79SAndroid Build Coastguard Worker    ([#2145](https://github.com/google/ExoPlayer/issues/2145)).
3933*30877f79SAndroid Build Coastguard Worker*   MPEG-TS: Avoid failure when expected ID3 header not found
3934*30877f79SAndroid Build Coastguard Worker    ([#1966](https://github.com/google/ExoPlayer/issues/1966)).
3935*30877f79SAndroid Build Coastguard Worker*   Misc bugfixes.
3936*30877f79SAndroid Build Coastguard Worker
3937*30877f79SAndroid Build Coastguard Worker### r1.5.12
3938*30877f79SAndroid Build Coastguard Worker
3939*30877f79SAndroid Build Coastguard Worker*   Improvements to Cronet network stack extension.
3940*30877f79SAndroid Build Coastguard Worker*   Fix bug in demo app introduced in r1.5.11 that caused L3 Widevine
3941*30877f79SAndroid Build Coastguard Worker    provisioning requests to fail.
3942*30877f79SAndroid Build Coastguard Worker*   Misc bugfixes.
3943*30877f79SAndroid Build Coastguard Worker
3944*30877f79SAndroid Build Coastguard Worker### r1.5.11
3945*30877f79SAndroid Build Coastguard Worker
3946*30877f79SAndroid Build Coastguard Worker*   Cronet network stack extension.
3947*30877f79SAndroid Build Coastguard Worker*   HLS: Fix propagation of language for alternative audio renditions
3948*30877f79SAndroid Build Coastguard Worker    ([#1784](https://github.com/google/ExoPlayer/issues/1784)).
3949*30877f79SAndroid Build Coastguard Worker*   WebM: Support for subsample encryption.
3950*30877f79SAndroid Build Coastguard Worker*   ID3: Fix EOS detection for 2-byte encodings
3951*30877f79SAndroid Build Coastguard Worker    ([#1774](https://github.com/google/ExoPlayer/issues/1774)).
3952*30877f79SAndroid Build Coastguard Worker*   MPEG-TS: Support multiple tracks of the same type.
3953*30877f79SAndroid Build Coastguard Worker*   MPEG-TS: Work toward robust handling of stream corruption.
3954*30877f79SAndroid Build Coastguard Worker*   Fix ContentDataSource failures triggered by garbage collector
3955*30877f79SAndroid Build Coastguard Worker    ([#1759](https://github.com/google/ExoPlayer/issues/1759)).
3956*30877f79SAndroid Build Coastguard Worker
3957*30877f79SAndroid Build Coastguard Worker### r1.5.10
3958*30877f79SAndroid Build Coastguard Worker
3959*30877f79SAndroid Build Coastguard Worker*   HLS: Stability fixes.
3960*30877f79SAndroid Build Coastguard Worker*   MP4: Support for stz2 Atoms.
3961*30877f79SAndroid Build Coastguard Worker*   Enable 4K format selection on Sony AndroidTV + nVidia SHIELD.
3962*30877f79SAndroid Build Coastguard Worker*   TX3G caption fixes.
3963*30877f79SAndroid Build Coastguard Worker
3964*30877f79SAndroid Build Coastguard Worker### r1.5.9
3965*30877f79SAndroid Build Coastguard Worker
3966*30877f79SAndroid Build Coastguard Worker*   MP4: Fixed incorrect sniffing in some cases (#1523).
3967*30877f79SAndroid Build Coastguard Worker*   MP4: Improved file compatibility (#1567).
3968*30877f79SAndroid Build Coastguard Worker*   ID3: Support for TIT2 and APIC frames.
3969*30877f79SAndroid Build Coastguard Worker*   Fixed querying of platform decoders on some devices.
3970*30877f79SAndroid Build Coastguard Worker*   Misc bug fixes.
3971*30877f79SAndroid Build Coastguard Worker
3972*30877f79SAndroid Build Coastguard Worker### r1.5.8
3973*30877f79SAndroid Build Coastguard Worker
3974*30877f79SAndroid Build Coastguard Worker*   HLS: Fix handling of HTTP redirects.
3975*30877f79SAndroid Build Coastguard Worker*   Audio: Minor adjustment to improve A/V sync.
3976*30877f79SAndroid Build Coastguard Worker*   OGG: Support FLAC in OGG.
3977*30877f79SAndroid Build Coastguard Worker*   TTML: Support regions.
3978*30877f79SAndroid Build Coastguard Worker*   WAV/PCM: Support 8, 24 and 32-bit WAV and PCM audio.
3979*30877f79SAndroid Build Coastguard Worker*   Misc bug fixes and performance optimizations.
3980*30877f79SAndroid Build Coastguard Worker
3981*30877f79SAndroid Build Coastguard Worker### r1.5.7
3982*30877f79SAndroid Build Coastguard Worker
3983*30877f79SAndroid Build Coastguard Worker*   OGG: Support added for OGG.
3984*30877f79SAndroid Build Coastguard Worker*   FLAC: Support for FLAC extraction and playback (via an extension).
3985*30877f79SAndroid Build Coastguard Worker*   HLS: Multiple audio track support (via Renditions).
3986*30877f79SAndroid Build Coastguard Worker*   FMP4: Support multiple tracks in fragmented MP4 (not applicable to
3987*30877f79SAndroid Build Coastguard Worker    DASH/SmoothStreaming).
3988*30877f79SAndroid Build Coastguard Worker*   WAV: Support for 16-bit WAV files.
3989*30877f79SAndroid Build Coastguard Worker*   MKV: Support non-square pixel formats.
3990*30877f79SAndroid Build Coastguard Worker*   Misc bug fixes.
3991*30877f79SAndroid Build Coastguard Worker
3992*30877f79SAndroid Build Coastguard Worker### r1.5.6
3993*30877f79SAndroid Build Coastguard Worker
3994*30877f79SAndroid Build Coastguard Worker*   MP3: Fix mono streams playing at 2x speed on some MediaTek based devices
3995*30877f79SAndroid Build Coastguard Worker    (#801).
3996*30877f79SAndroid Build Coastguard Worker*   MP3: Fix playback of some streams when stream length is unknown.
3997*30877f79SAndroid Build Coastguard Worker*   ID3: Support multiple frames of the same type in a single tag.
3998*30877f79SAndroid Build Coastguard Worker*   CEA-608: Correctly handle repeated control characters, fixing an issue in
3999*30877f79SAndroid Build Coastguard Worker    which captions would immediately disappear.
4000*30877f79SAndroid Build Coastguard Worker*   AVC3: Fix decoder failures on some MediaTek devices in the case where the
4001*30877f79SAndroid Build Coastguard Worker    first buffer fed to the decoder does not start with SPS/PPS NAL units.
4002*30877f79SAndroid Build Coastguard Worker*   Misc bug fixes.
4003*30877f79SAndroid Build Coastguard Worker
4004*30877f79SAndroid Build Coastguard Worker### r1.5.5
4005*30877f79SAndroid Build Coastguard Worker
4006*30877f79SAndroid Build Coastguard Worker*   DASH: Enable MP4 embedded WebVTT playback (#1185)
4007*30877f79SAndroid Build Coastguard Worker*   HLS: Fix handling of extended ID3 tags in MPEG-TS (#1181)
4008*30877f79SAndroid Build Coastguard Worker*   MP3: Fix incorrect position calculation in VBRI header (#1197)
4009*30877f79SAndroid Build Coastguard Worker*   Fix issue seeking backward using SingleSampleSource (#1193)
4010*30877f79SAndroid Build Coastguard Worker
4011*30877f79SAndroid Build Coastguard Worker### r1.5.4
4012*30877f79SAndroid Build Coastguard Worker
4013*30877f79SAndroid Build Coastguard Worker*   HLS: Support for variant selection and WebVtt subtitles.
4014*30877f79SAndroid Build Coastguard Worker*   MP4: Support for embedded WebVtt.
4015*30877f79SAndroid Build Coastguard Worker*   Improved device compatibility.
4016*30877f79SAndroid Build Coastguard Worker*   Fix for resource leak (Issue #1066).
4017*30877f79SAndroid Build Coastguard Worker*   Misc bug fixes + minor features.
4018*30877f79SAndroid Build Coastguard Worker
4019*30877f79SAndroid Build Coastguard Worker### r1.5.3
4020*30877f79SAndroid Build Coastguard Worker
4021*30877f79SAndroid Build Coastguard Worker*   Support for FLV (without seeking).
4022*30877f79SAndroid Build Coastguard Worker*   MP4: Fix for playback of media containing basic edit lists.
4023*30877f79SAndroid Build Coastguard Worker*   QuickTime: Fix parsing of QuickTime style audio sample entry.
4024*30877f79SAndroid Build Coastguard Worker*   HLS: Add H262 support for devices that have an H262 decoder.
4025*30877f79SAndroid Build Coastguard Worker*   Allow AudioTrack PlaybackParams (e.g. speed/pitch) on API level 23+.
4026*30877f79SAndroid Build Coastguard Worker*   Correctly detect 4K displays on API level 23+.
4027*30877f79SAndroid Build Coastguard Worker*   Misc bug fixes.
4028*30877f79SAndroid Build Coastguard Worker
4029*30877f79SAndroid Build Coastguard Worker### r1.5.2
4030*30877f79SAndroid Build Coastguard Worker
4031*30877f79SAndroid Build Coastguard Worker*   MPEG-TS/HLS: Fix frame drops playing H265 video.
4032*30877f79SAndroid Build Coastguard Worker*   SmoothStreaming: Fix parsing of ProtectionHeader.
4033*30877f79SAndroid Build Coastguard Worker
4034*30877f79SAndroid Build Coastguard Worker### r1.5.1
4035*30877f79SAndroid Build Coastguard Worker
4036*30877f79SAndroid Build Coastguard Worker*   Enable smooth frame release by default.
4037*30877f79SAndroid Build Coastguard Worker*   Added OkHttpDataSource extension.
4038*30877f79SAndroid Build Coastguard Worker*   AndroidTV: Correctly detect 4K display size on Bravia devices.
4039*30877f79SAndroid Build Coastguard Worker*   FMP4: Handle non-sample data in mdat boxes.
4040*30877f79SAndroid Build Coastguard Worker*   TTML: Fix parsing of some colors on Jellybean.
4041*30877f79SAndroid Build Coastguard Worker*   SmoothStreaming: Ignore tfdt boxes.
4042*30877f79SAndroid Build Coastguard Worker*   Misc bug fixes.
4043*30877f79SAndroid Build Coastguard Worker
4044*30877f79SAndroid Build Coastguard Worker### r1.5.0
4045*30877f79SAndroid Build Coastguard Worker
4046*30877f79SAndroid Build Coastguard Worker*   Multi-track support.
4047*30877f79SAndroid Build Coastguard Worker*   DASH: Limited support for multi-period manifests.
4048*30877f79SAndroid Build Coastguard Worker*   HLS: Smoother format adaptation.
4049*30877f79SAndroid Build Coastguard Worker*   HLS: Support for MP3 media segments.
4050*30877f79SAndroid Build Coastguard Worker*   TTML: Support for most embedded TTML styling.
4051*30877f79SAndroid Build Coastguard Worker*   WebVTT: Enhanced positioning support.
4052*30877f79SAndroid Build Coastguard Worker*   Initial playback tests.
4053*30877f79SAndroid Build Coastguard Worker*   Misc bug fixes.
4054*30877f79SAndroid Build Coastguard Worker
4055*30877f79SAndroid Build Coastguard Worker### r1.4.2
4056*30877f79SAndroid Build Coastguard Worker
4057*30877f79SAndroid Build Coastguard Worker*   Implemented automatic format detection for regular container formats.
4058*30877f79SAndroid Build Coastguard Worker*   Added UdpDataSource for connecting to multicast streams.
4059*30877f79SAndroid Build Coastguard Worker*   Improved robustness for MP4 playbacks.
4060*30877f79SAndroid Build Coastguard Worker*   Misc bug fixes.
4061*30877f79SAndroid Build Coastguard Worker
4062*30877f79SAndroid Build Coastguard Worker### r1.4.1
4063*30877f79SAndroid Build Coastguard Worker
4064*30877f79SAndroid Build Coastguard Worker*   HLS: Fix premature playback failures that could occur in some cases.
4065*30877f79SAndroid Build Coastguard Worker
4066*30877f79SAndroid Build Coastguard Worker### r1.4.0
4067*30877f79SAndroid Build Coastguard Worker
4068*30877f79SAndroid Build Coastguard Worker*   Support for extracting Matroska streams (implemented by WebmExtractor).
4069*30877f79SAndroid Build Coastguard Worker*   Support for tx3g captions in MP4 streams.
4070*30877f79SAndroid Build Coastguard Worker*   Support for H.265 in MPEG-TS streams on supported devices.
4071*30877f79SAndroid Build Coastguard Worker*   HLS: Added support for MPEG audio (e.g. MP3) in TS media segments.
4072*30877f79SAndroid Build Coastguard Worker*   HLS: Improved robustness against missing chunks and variants.
4073*30877f79SAndroid Build Coastguard Worker*   MP4: Added support for embedded MPEG audio (e.g. MP3).
4074*30877f79SAndroid Build Coastguard Worker*   TTML: Improved handling of whitespace.
4075*30877f79SAndroid Build Coastguard Worker*   DASH: Support Mpd.Location element.
4076*30877f79SAndroid Build Coastguard Worker*   Add option to TsExtractor to allow non-IDR keyframes.
4077*30877f79SAndroid Build Coastguard Worker*   Added MulticastDataSource for connecting to multicast streams.
4078*30877f79SAndroid Build Coastguard Worker*   (WorkInProgress) - First steps to supporting seeking in DASH DVR window.
4079*30877f79SAndroid Build Coastguard Worker*   (WorkInProgress) - First steps to supporting styled + positioned subtitles.
4080*30877f79SAndroid Build Coastguard Worker*   Misc bug fixes.
4081*30877f79SAndroid Build Coastguard Worker
4082*30877f79SAndroid Build Coastguard Worker### r1.3.3
4083*30877f79SAndroid Build Coastguard Worker
4084*30877f79SAndroid Build Coastguard Worker*   HLS: Fix failure when playing HLS AAC streams.
4085*30877f79SAndroid Build Coastguard Worker*   Misc bug fixes.
4086*30877f79SAndroid Build Coastguard Worker
4087*30877f79SAndroid Build Coastguard Worker### r1.3.2
4088*30877f79SAndroid Build Coastguard Worker
4089*30877f79SAndroid Build Coastguard Worker*   DataSource improvements: `DefaultUriDataSource` now handles http://,
4090*30877f79SAndroid Build Coastguard Worker    https://, file://, asset:// and content:// URIs automatically. It also
4091*30877f79SAndroid Build Coastguard Worker    handles file:///android_asset/* URIs, and file paths like /path/to/media.mp4
4092*30877f79SAndroid Build Coastguard Worker    where the scheme is omitted.
4093*30877f79SAndroid Build Coastguard Worker*   HLS: Fix for some ID3 events being dropped.
4094*30877f79SAndroid Build Coastguard Worker*   HLS: Correctly handle 0x0 and floating point RESOLUTION tags.
4095*30877f79SAndroid Build Coastguard Worker*   Mp3Extractor: robustness improvements.
4096*30877f79SAndroid Build Coastguard Worker
4097*30877f79SAndroid Build Coastguard Worker### r1.3.1
4098*30877f79SAndroid Build Coastguard Worker
4099*30877f79SAndroid Build Coastguard Worker*   No notes provided.
4100