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