1# Release notes 2 3### dev-v2 (not yet released) 4 5* Core library: 6 * Add playbackPositionUs parameter to 'LoadControl.shouldContinueLoading'. 7 * The `DefaultLoadControl` default minimum buffer is set to 50 seconds, 8 equal to the default maximum buffer. `DefaultLoadControl` applies the 9 same behavior for audio and video. 10 * Add API in `AnalyticsListener` to report video frame processing offset. 11 `MediaCodecVideoRenderer` reports the event. 12 * Add fields `videoFrameProcessingOffsetUsSum` and 13 `videoFrameProcessingOffsetUsCount` in `DecoderCounters` to compute the 14 average video frame processing offset. 15 * Add playlist API 16 ([#6161](https://github.com/google/ExoPlayer/issues/6161)). 17 * Add `play` and `pause` methods to `Player`. 18 * Add `Player.getCurrentLiveOffset` to conveniently return the live 19 offset. 20 * Add `Player.onPlayWhenReadyChanged` with reasons. 21 * Add `Player.onPlaybackStateChanged` and deprecate 22 `Player.onPlayerStateChanged`. 23 * Add `Player.setAudioSessionId` to set the session ID attached to the 24 `AudioTrack`. 25 * Deprecate and rename `getPlaybackError` to `getPlayerError` for 26 consistency. 27 * Deprecate and rename `onLoadingChanged` to `onIsLoadingChanged` for 28 consistency. 29 * Deprecate `onSeekProcessed` because all seek changes happen instantly 30 now and listening to `onPositionDiscontinuity` is sufficient. 31 * Add `ExoPlayer.setPauseAtEndOfMediaItems` to let the player pause at the 32 end of each media item 33 ([#5660](https://github.com/google/ExoPlayer/issues/5660)). 34 * Split `setPlaybackParameter` into `setPlaybackSpeed` and 35 `AudioComponent.setSkipSilenceEnabled` with callbacks 36 `onPlaybackSpeedChanged` and 37 `AudioListener.onSkipSilenceEnabledChanged`. 38 * Make `MediaSourceEventListener.LoadEventInfo` and 39 `MediaSourceEventListener.MediaLoadData` top-level classes. 40 * Rename `MediaCodecRenderer.onOutputFormatChanged` to 41 `MediaCodecRenderer.onOutputMediaFormatChanged`, further clarifying the 42 distinction between `Format` and `MediaFormat`. 43 * Improve `Format` propagation within the media codec renderer 44 ([#6646](https://github.com/google/ExoPlayer/issues/6646)). 45 * Move player message-related constants from `C` to `Renderer`, to avoid 46 having the constants class depend on player/renderer classes. 47 * Split out `common` and `extractor` submodules. 48 * Allow to explicitly send `PlayerMessage`s at the end of a stream. 49 * Add `DataSpec.Builder` and deprecate most `DataSpec` constructors. 50 * Add `DataSpec.customData` to allow applications to pass custom data 51 through `DataSource` chains. 52 * Add a sample count parameter to `MediaCodecRenderer.processOutputBuffer` 53 and `AudioSink.handleBuffer` to allow batching multiple encoded frames 54 in one buffer. 55 * Add a `Format.Builder` and deprecate all `Format.create*` methods and 56 most `Format.copyWith*` methods. 57 * Split `Format.bitrate` into `Format.averageBitrate` and 58 `Format.peakBitrate` 59 ([#2863](https://github.com/google/ExoPlayer/issues/2863)). 60 * Add option to `MergingMediaSource` to adjust the time offsets between 61 the merged sources 62 ([#6103](https://github.com/google/ExoPlayer/issues/6103)). 63 * `SimpleDecoderVideoRenderer` and `SimpleDecoderAudioRenderer` renamed to 64 `DecoderVideoRenderer` and `DecoderAudioRenderer` respectively, and 65 generalized to work with `Decoder` rather than `SimpleDecoder`. 66 * Add media item based playlist API to Player. 67 * Remove deprecated members in `DefaultTrackSelector`. 68 * Add `Player.DeviceComponent` and implement it for `SimpleExoPlayer` so 69 that the device volume can be controlled by player. 70 * Avoid throwing an exception while parsing fragmented MP4 default sample 71 values where the most-significant bit is set 72 ([#7207](https://github.com/google/ExoPlayer/issues/7207)). 73 * Add `SilenceMediaSource.Factory` to support tags 74 ([PR #7245](https://github.com/google/ExoPlayer/pull/7245)). 75 * Fix `AdsMediaSource` child `MediaSource`s not being released. 76 * Parse track titles from Matroska files 77 ([#7247](https://github.com/google/ExoPlayer/pull/7247)). 78 * Replace `CacheDataSinkFactory` and `CacheDataSourceFactory` with 79 `CacheDataSink.Factory` and `CacheDataSource.Factory` respectively. 80* Text: 81 * Parse `<ruby>` and `<rt>` tags in WebVTT subtitles (rendering is coming 82 later). 83 * Parse `text-combine-upright` CSS property (i.e. tate-chu-yoko) in WebVTT 84 subtitles (rendering is coming later). 85 * Parse `tts:combineText` property (i.e. tate-chu-yoko) in TTML subtitles 86 (rendering is coming later). 87 * Fix `SubtitlePainter` to render `EDGE_TYPE_OUTLINE` using the correct 88 color ([#6724](https://github.com/google/ExoPlayer/pull/6724)). 89 * Add support for WebVTT default 90 [text](https://www.w3.org/TR/webvtt1/#default-text-color) and 91 [background](https://www.w3.org/TR/webvtt1/#default-text-background) 92 colors ([PR #4178](https://github.com/google/ExoPlayer/pull/4178), 93 [issue #6581](https://github.com/google/ExoPlayer/issues/6581)). 94 * Parse `tts:ruby` and `tts:rubyPosition` properties in TTML subtitles 95 (rendering is coming later). 96 * Update WebVTT position alignment parsing to recognise `line-left`, 97 `center` and `line-right` as per the 98 [released spec](https://www.w3.org/TR/webvtt1/#webvtt-position-cue-setting) 99 (a 100 [previous draft](https://www.w3.org/TR/2014/WD-webvtt1-20141111/#dfn-webvtt-text-position-cue-setting) 101 used `start`, `middle` and `end`). 102 * Use anti-aliasing and bitmap filtering when displaying bitmap subtitles 103 ([#6950](https://github.com/google/ExoPlayer/pull/6950)). 104 * Implement timing-out of stuck CEA-608 captions (as permitted by 105 ANSI/CTA-608-E R-2014 Annex C.9) and set the default timeout to 16 106 seconds ([#7181](https://github.com/google/ExoPlayer/issues/7181)). 107* DRM: 108 * Add support for attaching DRM sessions to clear content in the demo app. 109 * Remove `DrmSessionManager` references from all renderers. 110 `DrmSessionManager` must be injected into the MediaSources using the 111 MediaSources factories. 112 * Add option to inject a custom `DefaultDrmSessionManager` into 113 `OfflineLicenseHelper` 114 ([#7078](https://github.com/google/ExoPlayer/issues/7078)). 115 * Remove generics from DRM components. 116* Downloads and caching: 117 * Merge downloads in `SegmentDownloader` to improve overall download speed 118 ([#5978](https://github.com/google/ExoPlayer/issues/5978)). 119 * Replace `CacheDataSinkFactory` and `CacheDataSourceFactory` with 120 `CacheDataSink.Factory` and `CacheDataSource.Factory` respectively. 121 * Remove `DownloadConstructorHelper` and use `CacheDataSource.Factory` 122 directly instead. 123 * Update `CachedContentIndex` to use `SecureRandom` for generating the 124 initialization vector used to encrypt the cache contents. 125* DASH: 126 * Merge trick play adaptation sets (i.e., adaptation sets marked with 127 `http://dashif.org/guidelines/trickmode`) into the same `TrackGroup` as 128 the main adaptation sets to which they refer. Trick play tracks are 129 marked with the `C.ROLE_FLAG_TRICK_PLAY` flag. 130 * Fix assertion failure in `SampleQueue` when playing DASH streams with 131 EMSG tracks ([#7273](https://github.com/google/ExoPlayer/issues/7273)). 132* MP3: Add `IndexSeeker` for accurate seeks in VBR streams 133 ([#6787](https://github.com/google/ExoPlayer/issues/6787)). This seeker is 134 enabled by passing `FLAG_ENABLE_INDEX_SEEKING` to the `Mp3Extractor`. It may 135 require to scan a significant portion of the file for seeking, which may be 136 costly on large files. 137* MP4: Store the Android capture frame rate only in `Format.metadata`. 138 `Format.frameRate` now stores the calculated frame rate. 139* MPEG-TS: Fix issue where SEI NAL units were incorrectly dropped from H.265 140 samples ([#7113](https://github.com/google/ExoPlayer/issues/7113)). 141* Testing 142 * Add `TestExoPlayer`, a utility class with APIs to create 143 `SimpleExoPlayer` instances with fake components for testing. 144 * Upgrade Truth dependency from 0.44 to 1.0. 145 * Upgrade to JUnit 4.13-rc-2. 146* UI 147 * Add `showScrubber` and `hideScrubber` methods to DefaultTimeBar. 148 * Move logic of prev, next, fast forward and rewind to ControlDispatcher 149 ([#6926](https://github.com/google/ExoPlayer/issues/6926)). 150* Metadata: Add minimal DVB Application Information Table (AIT) support 151 ([#6922](https://github.com/google/ExoPlayer/pull/6922)). 152* Cast extension: Implement playlist API and deprecate the old queue 153 manipulation API. 154* Demo app: Retain previous position in list of samples. 155* Change the order of extractors for sniffing to reduce start-up latency in 156 `DefaultExtractorsFactory` and `DefaultHlsExtractorsFactory` 157 ([#6410](https://github.com/google/ExoPlayer/issues/6410)). 158* Add missing `@Nullable` annotations to `MediaSessionConnector` 159 ([#7234](https://github.com/google/ExoPlayer/issues/7234)). 160 161### 2.11.4 (2020-04-08) 162 163* Add `SimpleExoPlayer.setWakeMode` to allow automatic `WifiLock` and 164 `WakeLock` handling 165 ([#6914](https://github.com/google/ExoPlayer/issues/6914)). To use this 166 feature, you must add the 167 [WAKE_LOCK](https://developer.android.com/reference/android/Manifest.permission.html#WAKE_LOCK) 168 permission to your application's manifest file. 169* Text: 170 * Catch and log exceptions in `TextRenderer` rather than re-throwing. This 171 allows playback to continue even if subtitle decoding fails 172 ([#6885](https://github.com/google/ExoPlayer/issues/6885)). 173 * Allow missing hours and milliseconds in SubRip (.srt) timecodes 174 ([#7122](https://github.com/google/ExoPlayer/issues/7122)). 175* Audio: 176 * Enable playback speed adjustment and silence skipping for floating point 177 PCM audio, via resampling to 16-bit integer PCM. To output the original 178 floating point audio without adjustment, pass `enableFloatOutput=true` 179 to the `DefaultAudioSink` constructor 180 ([#7134](https://github.com/google/ExoPlayer/issues/7134)). 181 * Workaround issue that could cause slower than realtime playback of AAC 182 on Android 10 ([#6671](https://github.com/google/ExoPlayer/issues/6671). 183 * Fix case where another app spuriously holding transient audio focus 184 could prevent ExoPlayer from acquiring audio focus for an indefinite 185 period of time 186 ([#7182](https://github.com/google/ExoPlayer/issues/7182). 187 * Fix case where the player volume could be permanently ducked if audio 188 focus was released whilst ducking. 189 * Fix playback of WAV files with trailing non-media bytes 190 ([#7129](https://github.com/google/ExoPlayer/issues/7129)). 191 * Fix playback of ADTS files with mid-stream ID3 metadata. 192* DRM: 193 * Fix stuck ad playbacks with DRM protected content 194 ([#7188](https://github.com/google/ExoPlayer/issues/7188)). 195 * Fix playback of Widevine protected content that only provides V1 PSSH 196 atoms on API levels 21 and 22. 197 * Fix playback of PlayReady content on Fire TV Stick (Gen 2). 198* DASH: 199 * Update the manifest URI to avoid repeated HTTP redirects 200 ([#6907](https://github.com/google/ExoPlayer/issues/6907)). 201 * Parse period `AssetIdentifier` elements. 202* HLS: Recognize IMSC subtitles 203 ([#7185](https://github.com/google/ExoPlayer/issues/7185)). 204* UI: Add an option to set whether to use the orientation sensor for rotation 205 in spherical playbacks 206 ([#6761](https://github.com/google/ExoPlayer/issues/6761)). 207* Analytics: Fix `PlaybackStatsListener` behavior when not keeping history 208 ([#7160](https://github.com/google/ExoPlayer/issues/7160)). 209* FFmpeg extension: Add support for `x86_64` architecture. 210* Opus extension: Fix parsing of negative gain values 211 ([#7046](https://github.com/google/ExoPlayer/issues/7046)). 212* Cast extension: Upgrade `play-services-cast-framework` dependency to 18.1.0. 213 This fixes an issue where `RemoteServiceException` was thrown due to 214 `Context.startForegroundService()` not calling `Service.startForeground()` 215 ([#7191](https://github.com/google/ExoPlayer/issues/7191)). 216 217### 2.11.3 (2020-02-19) 218 219* SmoothStreaming: Fix regression that broke playback in 2.11.2 220 ([#6981](https://github.com/google/ExoPlayer/issues/6981)). 221* DRM: Fix issue switching from protected content that uses a 16-byte 222 initialization vector to one that uses an 8-byte initialization vector 223 ([#6982](https://github.com/google/ExoPlayer/issues/6982)). 224 225### 2.11.2 (2020-02-13) 226 227* Add Java FLAC extractor 228 ([#6406](https://github.com/google/ExoPlayer/issues/6406)). 229* Startup latency optimization: 230 * Reduce startup latency for DASH and SmoothStreaming playbacks by 231 allowing codec initialization to occur before the network connection for 232 the first media segment has been established. 233 * Reduce startup latency for on-demand DASH playbacks by allowing codec 234 initialization to occur before the sidx box has been loaded. 235* Downloads: 236 * Fix download resumption when the requirements for them to continue are 237 met ([#6733](https://github.com/google/ExoPlayer/issues/6733), 238 [#6798](https://github.com/google/ExoPlayer/issues/6798)). 239 * Fix `DownloadHelper.createMediaSource` to use `customCacheKey` when 240 creating `ProgressiveMediaSource` instances. 241* DRM: Fix `NullPointerException` when playing DRM protected content 242 ([#6951](https://github.com/google/ExoPlayer/issues/6951)). 243* Metadata: 244 * Update `IcyDecoder` to try ISO-8859-1 decoding if UTF-8 decoding fails. 245 Also change `IcyInfo.rawMetadata` from `String` to `byte[]` to allow 246 developers to handle data that's neither UTF-8 nor ISO-8859-1 247 ([#6753](https://github.com/google/ExoPlayer/issues/6753)). 248 * Select multiple metadata tracks if multiple metadata renderers are 249 available ([#6676](https://github.com/google/ExoPlayer/issues/6676)). 250 * Add support for ID3 genres added in Wimamp 5.6 (2010). 251* UI: 252 * Show ad group markers in `DefaultTimeBar` even if they are after the end 253 of the current window 254 ([#6552](https://github.com/google/ExoPlayer/issues/6552)). 255 * Don't use notification chronometer if playback speed is != 1.0 256 ([#6816](https://github.com/google/ExoPlayer/issues/6816)). 257* HLS: Fix playback of DRM protected content that uses key rotation 258 ([#6903](https://github.com/google/ExoPlayer/issues/6903)). 259* WAV: 260 * Support IMA ADPCM encoded data. 261 * Improve support for G.711 A-law and mu-law encoded data. 262* MP4: Support "twos" codec (big endian PCM) 263 ([#5789](https://github.com/google/ExoPlayer/issues/5789)). 264* FMP4: Add support for encrypted AC-4 tracks. 265* HLS: Fix slow seeking into long MP3 segments 266 ([#6155](https://github.com/google/ExoPlayer/issues/6155)). 267* Fix handling of E-AC-3 streams that contain AC-3 syncframes 268 ([#6602](https://github.com/google/ExoPlayer/issues/6602)). 269* Fix playback of TrueHD streams in Matroska 270 ([#6845](https://github.com/google/ExoPlayer/issues/6845)). 271* Fix MKV subtitles to disappear when intended instead of lasting until the 272 next cue ([#6833](https://github.com/google/ExoPlayer/issues/6833)). 273* OkHttp extension: Upgrade OkHttp dependency to 3.12.8, which fixes a class 274 of `SocketTimeoutException` issues when using HTTP/2 275 ([#4078](https://github.com/google/ExoPlayer/issues/4078)). 276* FLAC extension: Fix handling of bit depths other than 16 in `FLACDecoder`. 277 This issue caused FLAC streams with other bit depths to sound like white 278 noise on earlier releases, but only when embedded in a non-FLAC container 279 such as Matroska or MP4. 280* Demo apps: Add 281 [GL demo app](https://github.com/google/ExoPlayer/tree/dev-v2/demos/gl) to 282 show how to render video to a `GLSurfaceView` while applying a GL shader. 283 ([#6920](https://github.com/google/ExoPlayer/issues/6920)). 284 285### 2.11.1 (2019-12-20) 286 287* UI: Exclude `DefaultTimeBar` region from system gesture detection 288 ([#6685](https://github.com/google/ExoPlayer/issues/6685)). 289* ProGuard fixes: 290 * Ensure `Libgav1VideoRenderer` constructor is kept for use by 291 `DefaultRenderersFactory` 292 ([#6773](https://github.com/google/ExoPlayer/issues/6773)). 293 * Ensure `VideoDecoderOutputBuffer` and its members are kept for use by 294 video decoder extensions. 295 * Ensure raw resources used with `RawResourceDataSource` are kept. 296 * Suppress spurious warnings about the `javax.annotation` package, and 297 restructure use of `IntDef` annotations to remove spurious warnings 298 about `SsaStyle$SsaAlignment` 299 ([#6771](https://github.com/google/ExoPlayer/issues/6771)). 300* Fix `CacheDataSource` to correctly propagate `DataSpec.httpRequestHeaders`. 301* Fix issue with `DefaultDownloadIndex` that could result in an 302 `IllegalStateException` being thrown from 303 `DefaultDownloadIndex.getDownloadForCurrentRow` 304 ([#6785](https://github.com/google/ExoPlayer/issues/6785)). 305* Fix `IndexOutOfBoundsException` in `SinglePeriodTimeline.getWindow` 306 ([#6776](https://github.com/google/ExoPlayer/issues/6776)). 307* Add missing `@Nullable` to `MediaCodecAudioRenderer.getMediaClock` and 308 `SimpleDecoderAudioRenderer.getMediaClock` 309 ([#6792](https://github.com/google/ExoPlayer/issues/6792)). 310 311### 2.11.0 (2019-12-11) 312 313* Core library: 314 * Replace `ExoPlayerFactory` by `SimpleExoPlayer.Builder` and 315 `ExoPlayer.Builder`. 316 * Add automatic `WakeLock` handling to `SimpleExoPlayer`, which can be 317 enabled by calling `SimpleExoPlayer.setHandleWakeLock` 318 ([#5846](https://github.com/google/ExoPlayer/issues/5846)). To use this 319 feature, you must add the 320 [WAKE_LOCK](https://developer.android.com/reference/android/Manifest.permission.html#WAKE_LOCK) 321 permission to your application's manifest file. 322 * Add automatic "audio becoming noisy" handling to `SimpleExoPlayer`, 323 which can be enabled by calling 324 `SimpleExoPlayer.setHandleAudioBecomingNoisy`. 325 * Wrap decoder exceptions in a new `DecoderException` class and report 326 them as renderer errors. 327 * Add `Timeline.Window.isLive` to indicate that a window is a live stream 328 ([#2668](https://github.com/google/ExoPlayer/issues/2668) and 329 [#5973](https://github.com/google/ExoPlayer/issues/5973)). 330 * Add `Timeline.Window.uid` to uniquely identify window instances. 331 * Deprecate `setTag` parameter of `Timeline.getWindow`. Tags will always 332 be set. 333 * Deprecate passing the manifest directly to 334 `Player.EventListener.onTimelineChanged`. It can be accessed through 335 `Timeline.Window.manifest` or `Player.getCurrentManifest()` 336 * Add `MediaSource.enable` and `MediaSource.disable` to improve resource 337 management in playlists. 338 * Add `MediaPeriod.isLoading` to improve `Player.isLoading` state. 339 * Fix issue where player errors are thrown too early at playlist 340 transitions ([#5407](https://github.com/google/ExoPlayer/issues/5407)). 341 * Add `Format` and renderer support flags to renderer 342 `ExoPlaybackException`s. 343 * Where there are multiple platform decoders for a given MIME type, prefer 344 to use one that advertises support for the profile and level of the 345 media being played over one that does not, even if it does not come 346 first in the `MediaCodecList`. 347* DRM: 348 * Inject `DrmSessionManager` into the `MediaSources` instead of 349 `Renderers`. This allows each `MediaSource` in a 350 `ConcatenatingMediaSource` to use a different `DrmSessionManager` 351 ([#5619](https://github.com/google/ExoPlayer/issues/5619)). 352 * Add `DefaultDrmSessionManager.Builder`, and remove 353 `DefaultDrmSessionManager` static factory methods that leaked 354 `ExoMediaDrm` instances 355 ([#4721](https://github.com/google/ExoPlayer/issues/4721)). 356 * Add support for the use of secure decoders when playing clear content 357 ([#4867](https://github.com/google/ExoPlayer/issues/4867)). This can be 358 enabled using `DefaultDrmSessionManager.Builder`'s 359 `setUseDrmSessionsForClearContent` method. 360 * Add support for custom `LoadErrorHandlingPolicies` in key and 361 provisioning requests 362 ([#6334](https://github.com/google/ExoPlayer/issues/6334)). Custom 363 policies can be passed via `DefaultDrmSessionManager.Builder`'s 364 `setLoadErrorHandlingPolicy` method. 365 * Use `ExoMediaDrm.Provider` in `OfflineLicenseHelper` to avoid leaking 366 `ExoMediaDrm` instances 367 ([#4721](https://github.com/google/ExoPlayer/issues/4721)). 368* Track selection: 369 * Update `DefaultTrackSelector` to set a viewport constraint for the 370 default display by default. 371 * Update `DefaultTrackSelector` to set text language and role flag 372 constraints for the device's accessibility settings by default 373 ([#5749](https://github.com/google/ExoPlayer/issues/5749)). 374 * Add option to set preferred text role flags using 375 `DefaultTrackSelector.ParametersBuilder.setPreferredTextRoleFlags`. 376* LoadControl: 377 * Default `prioritizeTimeOverSizeThresholds` to false to prevent OOM 378 errors ([#6647](https://github.com/google/ExoPlayer/issues/6647)). 379* Android 10: 380 * Set `compileSdkVersion` to 29 to enable use of Android 10 APIs. 381 * Expose new `isHardwareAccelerated`, `isSoftwareOnly` and `isVendor` 382 flags in `MediaCodecInfo` 383 ([#5839](https://github.com/google/ExoPlayer/issues/5839)). 384 * Add `allowedCapturePolicy` field to `AudioAttributes` to allow to 385 configuration of the audio capture policy. 386* Video: 387 * Pass the codec output `MediaFormat` to `VideoFrameMetadataListener`. 388 * Fix byte order of HDR10+ static metadata to match CTA-861.3. 389 * Support out-of-band HDR10+ dynamic metadata for VP9 in WebM/Matroska. 390 * Assume that protected content requires a secure decoder when evaluating 391 whether `MediaCodecVideoRenderer` supports a given video format 392 ([#5568](https://github.com/google/ExoPlayer/issues/5568)). 393 * Fix Dolby Vision fallback to AVC and HEVC. 394 * Fix early end-of-stream detection when using video tunneling, on API 395 level 23 and above. 396 * Fix an issue where a keyframe was rendered rather than skipped when 397 performing an exact seek to a non-zero position close to the start of 398 the stream. 399* Audio: 400 * Fix the start of audio getting truncated when transitioning to a new 401 item in a playlist of Opus streams. 402 * Workaround broken raw audio decoding on Oppo R9 403 ([#5782](https://github.com/google/ExoPlayer/issues/5782)). 404 * Reconfigure audio sink when PCM encoding changes 405 ([#6601](https://github.com/google/ExoPlayer/issues/6601)). 406 * Allow `AdtsExtractor` to encounter EOF when calculating average frame 407 size ([#6700](https://github.com/google/ExoPlayer/issues/6700)). 408* Text: 409 * Add support for position and overlapping start/end times in SSA/ASS 410 subtitles ([#6320](https://github.com/google/ExoPlayer/issues/6320)). 411 * Require an end time or duration for SubRip (SRT) and SubStation Alpha 412 (SSA/ASS) subtitles. This applies to both sidecar files & subtitles 413 [embedded in Matroska streams](https://matroska.org/technical/specs/subtitles/index.html). 414* UI: 415 * Make showing and hiding player controls accessible to TalkBack in 416 `PlayerView`. 417 * Rename `spherical_view` surface type to `spherical_gl_surface_view`. 418 * Make it easier to override the shuffle, repeat, fullscreen, VR and small 419 notification icon assets 420 ([#6709](https://github.com/google/ExoPlayer/issues/6709)). 421* Analytics: 422 * Remove `AnalyticsCollector.Factory`. Instances should be created 423 directly, and the `Player` should be set by calling 424 `AnalyticsCollector.setPlayer`. 425 * Add `PlaybackStatsListener` to collect `PlaybackStats` for analysis and 426 analytics reporting. 427* DataSource 428 * Add `DataSpec.httpRequestHeaders` to support setting per-request headers 429 for HTTP and HTTPS. 430 * Remove the `DataSpec.FLAG_ALLOW_ICY_METADATA` flag. Use is replaced by 431 setting the `IcyHeaders.REQUEST_HEADER_ENABLE_METADATA_NAME` header in 432 `DataSpec.httpRequestHeaders`. 433 * Fail more explicitly when local file URIs contain invalid parts (e.g. a 434 fragment) ([#6470](https://github.com/google/ExoPlayer/issues/6470)). 435* DASH: Support negative @r values in segment timelines 436 ([#1787](https://github.com/google/ExoPlayer/issues/1787)). 437* HLS: 438 * Use peak bitrate rather than average bitrate for adaptive track 439 selection. 440 * Fix issue where streams could get stuck in an infinite buffering state 441 after a postroll ad 442 ([#6314](https://github.com/google/ExoPlayer/issues/6314)). 443* Matroska: Support lacing in Blocks 444 ([#3026](https://github.com/google/ExoPlayer/issues/3026)). 445* AV1 extension: 446 * New in this release. The AV1 extension allows use of the 447 [libgav1 software decoder](https://chromium.googlesource.com/codecs/libgav1/) 448 in ExoPlayer. You can read more about playing AV1 videos with ExoPlayer 449 [here](https://medium.com/google-exoplayer/playing-av1-videos-with-exoplayer-a7cb19bedef9). 450* VP9 extension: 451 * Update to use NDK r20. 452 * Rename `VpxVideoSurfaceView` to `VideoDecoderSurfaceView` and move it to 453 the core library. 454 * Move `LibvpxVideoRenderer.MSG_SET_OUTPUT_BUFFER_RENDERER` to 455 `C.MSG_SET_OUTPUT_BUFFER_RENDERER`. 456 * Use `VideoDecoderRenderer` as an implementation of 457 `VideoDecoderOutputBufferRenderer`, instead of 458 `VideoDecoderSurfaceView`. 459* FLAC extension: Update to use NDK r20. 460* Opus extension: Update to use NDK r20. 461* FFmpeg extension: 462 * Update to use NDK r20. 463 * Update to use FFmpeg version 4.2. It is necessary to rebuild the native 464 part of the extension after this change, following the instructions in 465 the extension's readme. 466* MediaSession extension: Add `MediaSessionConnector.setCaptionCallback` to 467 support `ACTION_SET_CAPTIONING_ENABLED` events. 468* GVR extension: This extension is now deprecated. 469* Demo apps: 470 * Add 471 [SurfaceControl demo app](https://github.com/google/ExoPlayer/tree/r2.11.0/demos/surface) 472 to show how to use the Android 10 `SurfaceControl` API with ExoPlayer 473 ([#677](https://github.com/google/ExoPlayer/issues/677)). 474 * Add support for subtitle files to the 475 [Main demo app](https://github.com/google/ExoPlayer/tree/r2.11.0/demos/main) 476 ([#5523](https://github.com/google/ExoPlayer/issues/5523)). 477 * Remove the IMA demo app. IMA functionality is demonstrated by the 478 [main demo app](https://github.com/google/ExoPlayer/tree/r2.11.0/demos/main). 479 * Add basic DRM support to the 480 [Cast demo app](https://github.com/google/ExoPlayer/tree/r2.11.0/demos/cast). 481* TestUtils: Publish the `testutils` module to simplify unit testing with 482 ExoPlayer ([#6267](https://github.com/google/ExoPlayer/issues/6267)). 483* IMA extension: Remove `AdsManager` listeners on release to avoid leaking an 484 `AdEventListener` provided by the app 485 ([#6687](https://github.com/google/ExoPlayer/issues/6687)). 486 487### 2.10.8 (2019-11-19) 488 489* E-AC3 JOC 490 * Handle new signaling in DASH manifests 491 ([#6636](https://github.com/google/ExoPlayer/issues/6636)). 492 * Fix E-AC3 JOC passthrough playback failing to initialize due to 493 incorrect channel count check. 494* FLAC 495 * Fix sniffing for some FLAC streams. 496 * Fix FLAC `Format.bitrate` values. 497* Parse ALAC channel count and sample rate information from a more robust 498 source when contained in MP4 499 ([#6648](https://github.com/google/ExoPlayer/issues/6648)). 500* Fix seeking into multi-period content in the edge case that the period 501 containing the seek position has just been removed 502 ([#6641](https://github.com/google/ExoPlayer/issues/6641)). 503 504### 2.10.7 (2019-11-06) 505 506* HLS: Fix detection of Dolby Atmos to match the HLS authoring specification. 507* MediaSession extension: Update shuffle and repeat modes when playback state 508 is invalidated ([#6582](https://github.com/google/ExoPlayer/issues/6582)). 509* Fix the start of audio getting truncated when transitioning to a new item in 510 a playlist of Opus streams. 511 512### 2.10.6 (2019-10-17) 513 514* Add `Player.onPlaybackSuppressionReasonChanged` to allow listeners to detect 515 playbacks suppressions (e.g. transient audio focus loss) directly 516 ([#6203](https://github.com/google/ExoPlayer/issues/6203)). 517* DASH: 518 * Support `Label` elements 519 ([#6297](https://github.com/google/ExoPlayer/issues/6297)). 520 * Support legacy audio channel configuration 521 ([#6523](https://github.com/google/ExoPlayer/issues/6523)). 522* HLS: Add support for ID3 in EMSG when using FMP4 streams 523 ([spec](https://aomediacodec.github.io/av1-id3/)). 524* MP3: Add workaround to avoid prematurely ending playback of some SHOUTcast 525 live streams ([#6537](https://github.com/google/ExoPlayer/issues/6537), 526 [#6315](https://github.com/google/ExoPlayer/issues/6315) and 527 [#5658](https://github.com/google/ExoPlayer/issues/5658)). 528* Metadata: Expose the raw ICY metadata through `IcyInfo` 529 ([#6476](https://github.com/google/ExoPlayer/issues/6476)). 530* UI: 531 * Setting `app:played_color` on `PlayerView` and `PlayerControlView` no 532 longer adjusts the colors of the scrubber handle , buffered and unplayed 533 parts of the time bar. These can be set separately using 534 `app:scrubber_color`, `app:buffered_color` and `app_unplayed_color` 535 respectively. 536 * Setting `app:ad_marker_color` on `PlayerView` and `PlayerControlView` no 537 longer adjusts the color of played ad markers. The color of played ad 538 markers can be set separately using `app:played_ad_marker_color`. 539 540### 2.10.5 (2019-09-20) 541 542* Add `Player.isPlaying` and `EventListener.onIsPlayingChanged` to check 543 whether the playback position is advancing. This helps to determine if 544 playback is suppressed due to audio focus loss. Also add 545 `Player.getPlaybackSuppressedReason` to determine the reason of the 546 suppression ([#6203](https://github.com/google/ExoPlayer/issues/6203)). 547* Track selection 548 * Add `allowAudioMixedChannelCountAdaptiveness` parameter to 549 `DefaultTrackSelector` to allow adaptive selections of audio tracks with 550 different channel counts. 551 * Improve text selection logic to always prefer the better language 552 matches over other selection parameters. 553 * Fix audio selection issue where languages are compared by bitrate 554 ([#6335](https://github.com/google/ExoPlayer/issues/6335)). 555* Performance 556 * Increase maximum video buffer size from 13MB to 32MB. The previous 557 default was too small for high quality streams. 558 * Reset `DefaultBandwidthMeter` to initial values on network change. 559 * Bypass sniffing in `ProgressiveMediaPeriod` in case a single extractor 560 is provided ([#6325](https://github.com/google/ExoPlayer/issues/6325)). 561* Metadata 562 * Support EMSG V1 boxes in FMP4. 563 * Support unwrapping of nested metadata (e.g. ID3 and SCTE-35 in EMSG). 564* Add `HttpDataSource.getResponseCode` to provide the status code associated 565 with the most recent HTTP response. 566* Fix transitions between packed audio and non-packed audio segments in HLS 567 ([#6444](https://github.com/google/ExoPlayer/issues/6444)). 568* Fix issue where a request would be retried after encountering an error, even 569 though the `LoadErrorHandlingPolicy` classified the error as fatal. 570* Fix initialization data handling for FLAC in MP4 571 ([#6396](https://github.com/google/ExoPlayer/issues/6396), 572 [#6397](https://github.com/google/ExoPlayer/issues/6397)). 573* Fix decoder selection for E-AC3 JOC streams 574 ([#6398](https://github.com/google/ExoPlayer/issues/6398)). 575* Fix `PlayerNotificationManager` to show play icon rather than pause icon 576 when playback is ended 577 ([#6324](https://github.com/google/ExoPlayer/issues/6324)). 578* RTMP extension: Upgrade LibRtmp-Client-for-Android to fix RTMP playback 579 issues ([#4200](https://github.com/google/ExoPlayer/issues/4200), 580 [#4249](https://github.com/google/ExoPlayer/issues/4249), 581 [#4319](https://github.com/google/ExoPlayer/issues/4319), 582 [#4337](https://github.com/google/ExoPlayer/issues/4337)). 583* IMA extension: Fix crash in `ImaAdsLoader.onTimelineChanged` 584 ([#5831](https://github.com/google/ExoPlayer/issues/5831)). 585 586### 2.10.4 (2019-07-26) 587 588* Offline: Add `Scheduler` implementation that uses `WorkManager`. 589* Add ability to specify a description when creating notification channels via 590 ExoPlayer library classes. 591* Switch normalized BCP-47 language codes to use 2-letter ISO 639-1 language 592 tags instead of 3-letter ISO 639-2 language tags. 593* Ensure the `SilenceMediaSource` position is in range 594 ([#6229](https://github.com/google/ExoPlayer/issues/6229)). 595* WAV: Calculate correct duration for clipped streams 596 ([#6241](https://github.com/google/ExoPlayer/issues/6241)). 597* MP3: Use CBR header bitrate, not calculated bitrate. This reverts a change 598 from 2.9.3 ([#6238](https://github.com/google/ExoPlayer/issues/6238)). 599* FLAC extension: Parse `VORBIS_COMMENT` and `PICTURE` metadata 600 ([#5527](https://github.com/google/ExoPlayer/issues/5527)). 601* Fix issue where initial seek positions get ignored when playing a preroll ad 602 ([#6201](https://github.com/google/ExoPlayer/issues/6201)). 603* Fix issue where invalid language tags were normalized to "und" instead of 604 keeping the original 605 ([#6153](https://github.com/google/ExoPlayer/issues/6153)). 606* Fix `DataSchemeDataSource` re-opening and range requests 607 ([#6192](https://github.com/google/ExoPlayer/issues/6192)). 608* Fix FLAC and ALAC playback on some LG devices 609 ([#5938](https://github.com/google/ExoPlayer/issues/5938)). 610* Fix issue when calling `performClick` on `PlayerView` without 611 `PlayerControlView` 612 ([#6260](https://github.com/google/ExoPlayer/issues/6260)). 613* Fix issue where playback speeds are not used in adaptive track selections 614 after manual selection changes for other renderers 615 ([#6256](https://github.com/google/ExoPlayer/issues/6256)). 616 617### 2.10.3 (2019-07-09) 618 619* Display last frame when seeking to end of stream 620 ([#2568](https://github.com/google/ExoPlayer/issues/2568)). 621* Audio: 622 * Fix an issue where not all audio was played out when the configuration 623 for the underlying track was changing (e.g., at some period 624 transitions). 625 * Fix an issue where playback speed was applied inaccurately in playlists 626 ([#6117](https://github.com/google/ExoPlayer/issues/6117)). 627* UI: Fix `PlayerView` incorrectly consuming touch events if no controller is 628 attached ([#6109](https://github.com/google/ExoPlayer/issues/6109)). 629* CEA608: Fix repetition of special North American characters 630 ([#6133](https://github.com/google/ExoPlayer/issues/6133)). 631* FLV: Fix bug that caused playback of some live streams to not start 632 ([#6111](https://github.com/google/ExoPlayer/issues/6111)). 633* SmoothStreaming: Parse text stream `Subtype` into `Format.roleFlags`. 634* MediaSession extension: Fix `MediaSessionConnector.play()` not resuming 635 playback ([#6093](https://github.com/google/ExoPlayer/issues/6093)). 636 637### 2.10.2 (2019-06-03) 638 639* Add `ResolvingDataSource` for just-in-time resolution of `DataSpec`s 640 ([#5779](https://github.com/google/ExoPlayer/issues/5779)). 641* Add `SilenceMediaSource` that can be used to play silence of a given 642 duration ([#5735](https://github.com/google/ExoPlayer/issues/5735)). 643* Offline: 644 * Prevent unexpected `DownloadHelper.Callback.onPrepared` callbacks after 645 preparation of a `DownloadHelper` fails 646 ([#5915](https://github.com/google/ExoPlayer/issues/5915)). 647 * Fix `CacheUtil.cache()` downloading too much data 648 ([#5927](https://github.com/google/ExoPlayer/issues/5927)). 649 * Fix misreporting cached bytes when caching is paused 650 ([#5573](https://github.com/google/ExoPlayer/issues/5573)). 651* UI: 652 * Allow setting `DefaultTimeBar` attributes on `PlayerView` and 653 `PlayerControlView`. 654 * Change playback controls toggle from touch down to touch up events 655 ([#5784](https://github.com/google/ExoPlayer/issues/5784)). 656 * Fix issue where playback controls were not kept visible on key presses 657 ([#5963](https://github.com/google/ExoPlayer/issues/5963)). 658* Subtitles: 659 * CEA-608: Handle XDS and TEXT modes 660 ([#5807](https://github.com/google/ExoPlayer/pull/5807)). 661 * TTML: Fix bitmap rendering 662 ([#5633](https://github.com/google/ExoPlayer/pull/5633)). 663* IMA: Fix ad pod index offset calculation without preroll 664 ([#5928](https://github.com/google/ExoPlayer/issues/5928)). 665* Add a `playWhenReady` flag to MediaSessionConnector.PlaybackPreparer methods 666 to indicate whether a controller sent a play or only a prepare command. This 667 allows to take advantage of decoder reuse with the MediaSessionConnector 668 ([#5891](https://github.com/google/ExoPlayer/issues/5891)). 669* Add `ProgressUpdateListener` to `PlayerControlView` 670 ([#5834](https://github.com/google/ExoPlayer/issues/5834)). 671* Add support for auto-detecting UDP streams in `DefaultDataSource` 672 ([#6036](https://github.com/google/ExoPlayer/pull/6036)). 673* Allow enabling decoder fallback with `DefaultRenderersFactory` 674 ([#5942](https://github.com/google/ExoPlayer/issues/5942)). 675* Gracefully handle revoked `ACCESS_NETWORK_STATE` permission 676 ([#6019](https://github.com/google/ExoPlayer/issues/6019)). 677* Fix decoding problems when seeking back after seeking beyond a mid-roll ad 678 ([#6009](https://github.com/google/ExoPlayer/issues/6009)). 679* Fix application of `maxAudioBitrate` for adaptive audio track groups 680 ([#6006](https://github.com/google/ExoPlayer/issues/6006)). 681* Fix bug caused by parallel adaptive track selection using `Format`s without 682 bitrate information 683 ([#5971](https://github.com/google/ExoPlayer/issues/5971)). 684* Fix bug in `CastPlayer.getCurrentWindowIndex()` 685 ([#5955](https://github.com/google/ExoPlayer/issues/5955)). 686 687### 2.10.1 (2019-05-16) 688 689* Offline: Add option to remove all downloads. 690* HLS: Fix `NullPointerException` when using HLS chunkless preparation 691 ([#5868](https://github.com/google/ExoPlayer/issues/5868)). 692* Fix handling of empty values and line terminators in SHOUTcast ICY metadata 693 ([#5876](https://github.com/google/ExoPlayer/issues/5876)). 694* Fix DVB subtitles for SDK 28 695 ([#5862](https://github.com/google/ExoPlayer/issues/5862)). 696* Add a workaround for a decoder failure on ZTE Axon7 mini devices when 697 playing 48kHz audio 698 ([#5821](https://github.com/google/ExoPlayer/issues/5821)). 699 700### 2.10.0 (2019-04-15) 701 702* Core library: 703 * Improve decoder re-use between playbacks 704 ([#2826](https://github.com/google/ExoPlayer/issues/2826)). Read 705 [this blog post](https://medium.com/google-exoplayer/improved-decoder-reuse-in-exoplayer-ef4c6d99591d) 706 for more details. 707 * Rename `ExtractorMediaSource` to `ProgressiveMediaSource`. 708 * Fix issue where using `ProgressiveMediaSource.Factory` would mean that 709 `DefaultExtractorsFactory` would be kept by proguard. Custom 710 `ExtractorsFactory` instances must now be passed via the 711 `ProgressiveMediaSource.Factory` constructor, and `setExtractorsFactory` 712 is deprecated. 713 * Make the default minimum buffer size equal the maximum buffer size for 714 video playbacks 715 ([#2083](https://github.com/google/ExoPlayer/issues/2083)). 716 * Move `PriorityTaskManager` from `DefaultLoadControl` to 717 `SimpleExoPlayer`. 718 * Add new `ExoPlaybackException` types for remote exceptions and 719 out-of-memory errors. 720 * Use full BCP 47 language tags in `Format`. 721 * Do not retry failed loads whose error is `FileNotFoundException`. 722 * Fix issue where not resetting the position for a new `MediaSource` in 723 calls to `ExoPlayer.prepare` causes an `IndexOutOfBoundsException` 724 ([#5520](https://github.com/google/ExoPlayer/issues/5520)). 725* Offline: 726 * Improve offline support. `DownloadManager` now tracks all offline 727 content, not just tasks in progress. Read 728 [this page](https://exoplayer.dev/downloading-media.html) for more 729 details. 730* Caching: 731 * Improve performance of `SimpleCache` 732 ([#4253](https://github.com/google/ExoPlayer/issues/4253)). 733 * Cache data with unknown length by default. The previous flag to opt in 734 to this behavior (`DataSpec.FLAG_ALLOW_CACHING_UNKNOWN_LENGTH`) has been 735 replaced with an opt out flag 736 (`DataSpec.FLAG_DONT_CACHE_IF_LENGTH_UNKNOWN`). 737* Extractors: 738 * MP4/FMP4: Add support for Dolby Vision. 739 * MP4: Fix issue handling meta atoms in some streams 740 ([#5698](https://github.com/google/ExoPlayer/issues/5698), 741 [#5694](https://github.com/google/ExoPlayer/issues/5694)). 742 * MP3: Add support for SHOUTcast ICY metadata 743 ([#3735](https://github.com/google/ExoPlayer/issues/3735)). 744 * MP3: Fix ID3 frame unsychronization 745 ([#5673](https://github.com/google/ExoPlayer/issues/5673)). 746 * MP3: Fix playback of badly clipped files 747 ([#5772](https://github.com/google/ExoPlayer/issues/5772)). 748 * MPEG-TS: Enable HDMV DTS stream detection only if a flag is set. By 749 default (i.e. if the flag is not set), the 0x82 elementary stream type 750 is now treated as an SCTE subtitle track 751 ([#5330](https://github.com/google/ExoPlayer/issues/5330)). 752* Track selection: 753 * Add options for controlling audio track selections to 754 `DefaultTrackSelector` 755 ([#3314](https://github.com/google/ExoPlayer/issues/3314)). 756 * Update `TrackSelection.Factory` interface to support creating all track 757 selections together. 758 * Allow to specify a selection reason for a `SelectionOverride`. 759 * Select audio track based on system language if no preference is 760 provided. 761 * When no text language preference matches, only select forced text tracks 762 whose language matches the selected audio language. 763* UI: 764 * Update `DefaultTimeBar` based on duration of media and add parameter to 765 set the minimum update interval to control the smoothness of the updates 766 ([#5040](https://github.com/google/ExoPlayer/issues/5040)). 767 * Move creation of dialogs for `TrackSelectionView`s to 768 `TrackSelectionDialogBuilder` and add option to select multiple 769 overrides. 770 * Change signature of `PlayerNotificationManager.NotificationListener` to 771 better fit service requirements. 772 * Add option to include navigation actions in the compact mode of 773 notifications created using `PlayerNotificationManager`. 774 * Fix issues with flickering notifications on KitKat when using 775 `PlayerNotificationManager` and `DownloadNotificationUtil`. For the 776 latter, applications should switch to using 777 `DownloadNotificationHelper`. 778 * Fix accuracy of D-pad seeking in `DefaultTimeBar` 779 ([#5767](https://github.com/google/ExoPlayer/issues/5767)). 780* Audio: 781 * Allow `AudioProcessor`s to be drained of pending output after they are 782 reconfigured. 783 * Fix an issue that caused audio to be truncated at the end of a period 784 when switching to a new period where gapless playback information was 785 newly present or newly absent. 786 * Add support for reading AC-4 streams 787 ([#5303](https://github.com/google/ExoPlayer/pull/5303)). 788* Video: 789 * Remove `MediaCodecSelector.DEFAULT_WITH_FALLBACK`. Apps should instead 790 signal that fallback should be used by passing `true` as the 791 `enableDecoderFallback` parameter when instantiating the video renderer. 792 * Support video tunneling when the decoder is not listed first for the 793 MIME type ([#3100](https://github.com/google/ExoPlayer/issues/3100)). 794 * Query `MediaCodecList.ALL_CODECS` when selecting a tunneling decoder 795 ([#5547](https://github.com/google/ExoPlayer/issues/5547)). 796* DRM: 797 * Fix black flicker when keys rotate in DRM protected content 798 ([#3561](https://github.com/google/ExoPlayer/issues/3561)). 799 * Work around lack of LA_URL attribute in PlayReady key request init data. 800* CEA-608: Improved conformance to the specification 801 ([#3860](https://github.com/google/ExoPlayer/issues/3860)). 802* DASH: 803 * Parse role and accessibility descriptors into `Format.roleFlags`. 804 * Support multiple CEA-608 channels muxed into FMP4 representations 805 ([#5656](https://github.com/google/ExoPlayer/issues/5656)). 806* HLS: 807 * Prevent unnecessary reloads of initialization segments. 808 * Form an adaptive track group out of audio renditions with matching name. 809 * Support encrypted initialization segments 810 ([#5441](https://github.com/google/ExoPlayer/issues/5441)). 811 * Parse `EXT-X-MEDIA` `CHARACTERISTICS` attribute into `Format.roleFlags`. 812 * Add metadata entry for HLS tracks to expose master playlist information. 813 * Prevent `IndexOutOfBoundsException` in some live HLS scenarios 814 ([#5816](https://github.com/google/ExoPlayer/issues/5816)). 815* Support for playing spherical videos on Daydream. 816* Cast extension: Work around Cast framework returning a limited-size queue 817 items list ([#4964](https://github.com/google/ExoPlayer/issues/4964)). 818* VP9 extension: Remove RGB output mode and libyuv dependency, and switch to 819 surface YUV output as the default. Remove constructor parameters 820 `scaleToFit` and `useSurfaceYuvOutput`. 821* MediaSession extension: 822 * Let apps intercept media button events 823 ([#5179](https://github.com/google/ExoPlayer/issues/5179)). 824 * Fix issue with `TimelineQueueNavigator` not publishing the queue in 825 shuffled order when in shuffle mode. 826 * Allow handling of custom commands via `registerCustomCommandReceiver`. 827 * Add ability to include an extras `Bundle` when reporting a custom error. 828* Log warnings when extension native libraries can't be used, to help with 829 diagnosing playback failures 830 ([#5788](https://github.com/google/ExoPlayer/issues/5788)). 831 832### 2.9.6 (2019-02-19) 833 834* Remove `player` and `isTopLevelSource` parameters from 835 `MediaSource.prepare`. 836* IMA extension: 837 * Require setting the `Player` on `AdsLoader` instances before playback. 838 * Remove deprecated `ImaAdsMediaSource`. Create `AdsMediaSource` with an 839 `ImaAdsLoader` instead. 840 * Remove deprecated `AdsMediaSource` constructors. Listen for media source 841 events using `AdsMediaSource.addEventListener`, and ad interaction 842 events by adding a listener when building `ImaAdsLoader`. 843 * Allow apps to register playback-related obstructing views that are on 844 top of their ad display containers via `AdsLoader.AdViewProvider`. 845 `PlayerView` implements this interface and will register its control 846 view. This makes it possible for ad loading SDKs to calculate ad 847 viewability accurately. 848* DASH: Fix issue handling large `EventStream` presentation timestamps 849 ([#5490](https://github.com/google/ExoPlayer/issues/5490)). 850* HLS: Fix transition to STATE_ENDED when playing fragmented mp4 in chunkless 851 preparation ([#5524](https://github.com/google/ExoPlayer/issues/5524)). 852* Revert workaround for video quality problems with Amlogic decoders, as this 853 may cause problems for some devices and/or non-interlaced content 854 ([#5003](https://github.com/google/ExoPlayer/issues/5003)). 855 856### 2.9.5 (2019-01-31) 857 858* HLS: Parse `CHANNELS` attribute from `EXT-X-MEDIA` tag. 859* ConcatenatingMediaSource: 860 * Add `Handler` parameter to methods that take a callback `Runnable`. 861 * Fix issue with dropped messages when releasing the source 862 ([#5464](https://github.com/google/ExoPlayer/issues/5464)). 863* ExtractorMediaSource: Fix issue that could cause the player to get stuck 864 buffering at the end of the media. 865* PlayerView: Fix issue preventing `OnClickListener` from receiving events 866 ([#5433](https://github.com/google/ExoPlayer/issues/5433)). 867* IMA extension: Upgrade IMA dependency to 3.10.6. 868* Cronet extension: Upgrade Cronet dependency to 71.3578.98. 869* OkHttp extension: Upgrade OkHttp dependency to 3.12.1. 870* MP3: Wider fix for issue where streams would play twice on some Samsung 871 devices ([#4519](https://github.com/google/ExoPlayer/issues/4519)). 872 873### 2.9.4 (2019-01-15) 874 875* IMA extension: Clear ads loader listeners on release 876 ([#4114](https://github.com/google/ExoPlayer/issues/4114)). 877* SmoothStreaming: Fix support for subtitles in DRM protected streams 878 ([#5378](https://github.com/google/ExoPlayer/issues/5378)). 879* FFmpeg extension: Treat invalid data errors as non-fatal to match the 880 behavior of MediaCodec 881 ([#5293](https://github.com/google/ExoPlayer/issues/5293)). 882* GVR extension: upgrade GVR SDK dependency to 1.190.0. 883* Associate fatal player errors of type SOURCE with the loading source in 884 `AnalyticsListener.EventTime` 885 ([#5407](https://github.com/google/ExoPlayer/issues/5407)). 886* Add `startPositionUs` to `MediaSource.createPeriod`. This fixes an issue 887 where using lazy preparation in `ConcatenatingMediaSource` with an 888 `ExtractorMediaSource` overrides initial seek positions 889 ([#5350](https://github.com/google/ExoPlayer/issues/5350)). 890* Add subtext to the `MediaDescriptionAdapter` of the 891 `PlayerNotificationManager`. 892* Add workaround for video quality problems with Amlogic decoders 893 ([#5003](https://github.com/google/ExoPlayer/issues/5003)). 894* Fix issue where sending callbacks for playlist changes may cause problems 895 because of parallel player access 896 ([#5240](https://github.com/google/ExoPlayer/issues/5240)). 897* Fix issue with reusing a `ClippingMediaSource` with an inner 898 `ExtractorMediaSource` and a non-zero start position 899 ([#5351](https://github.com/google/ExoPlayer/issues/5351)). 900* Fix issue where uneven track durations in MP4 streams can cause OOM problems 901 ([#3670](https://github.com/google/ExoPlayer/issues/3670)). 902 903### 2.9.3 (2018-12-20) 904 905* Captions: Support PNG subtitles in SMPTE-TT 906 ([#1583](https://github.com/google/ExoPlayer/issues/1583)). 907* MPEG-TS: Use random access indicators to minimize the need for 908 `FLAG_ALLOW_NON_IDR_KEYFRAMES`. 909* Downloading: Reduce time taken to remove downloads 910 ([#5136](https://github.com/google/ExoPlayer/issues/5136)). 911* MP3: 912 * Use the true bitrate for constant-bitrate MP3 seeking. 913 * Fix issue where streams would play twice on some Samsung devices 914 ([#4519](https://github.com/google/ExoPlayer/issues/4519)). 915* Fix regression where some audio formats were incorrectly marked as being 916 unplayable due to under-reporting of platform decoder capabilities 917 ([#5145](https://github.com/google/ExoPlayer/issues/5145)). 918* Fix decode-only frame skipping on Nvidia Shield TV devices. 919* Workaround for MiTV (dangal) issue when swapping output surface 920 ([#5169](https://github.com/google/ExoPlayer/issues/5169)). 921 922### 2.9.2 (2018-11-28) 923 924* HLS: 925 * Fix issue causing unnecessary media playlist requests when playing live 926 streams ([#5059](https://github.com/google/ExoPlayer/issues/5059)). 927 * Fix decoder re-instantiation issue for packed audio streams 928 ([#5063](https://github.com/google/ExoPlayer/issues/5063)). 929* MP4: Support Opus and FLAC in the MP4 container, and in DASH 930 ([#4883](https://github.com/google/ExoPlayer/issues/4883)). 931* DASH: Fix detecting the end of live events 932 ([#4780](https://github.com/google/ExoPlayer/issues/4780)). 933* Spherical video: Fall back to `TYPE_ROTATION_VECTOR` if 934 `TYPE_GAME_ROTATION_VECTOR` is unavailable 935 ([#5119](https://github.com/google/ExoPlayer/issues/5119)). 936* Support seeking for a wider range of MPEG-TS streams 937 ([#5097](https://github.com/google/ExoPlayer/issues/5097)). 938* Include channel count in audio capabilities check 939 ([#4690](https://github.com/google/ExoPlayer/issues/4690)). 940* Fix issue with applying the `show_buffering` attribute in `PlayerView` 941 ([#5139](https://github.com/google/ExoPlayer/issues/5139)). 942* Fix issue where null `Metadata` was output when it failed to decode 943 ([#5149](https://github.com/google/ExoPlayer/issues/5149)). 944* Fix playback of some invalid but playable MP4 streams by replacing 945 assertions with logged warnings in sample table parsing code 946 ([#5162](https://github.com/google/ExoPlayer/issues/5162)). 947* Fix UUID passed to `MediaCrypto` when using `C.CLEARKEY_UUID` before API 27. 948 949### 2.9.1 (2018-11-01) 950 951* Add convenience methods `Player.next`, `Player.previous`, `Player.hasNext` 952 and `Player.hasPrevious` 953 ([#4863](https://github.com/google/ExoPlayer/issues/4863)). 954* Improve initial bandwidth meter estimates using the current country and 955 network type. 956* IMA extension: 957 * For preroll to live stream transitions, project forward the loading 958 position to avoid being behind the live window. 959 * Let apps specify whether to focus the skip button on ATV 960 ([#5019](https://github.com/google/ExoPlayer/issues/5019)). 961* MP3: 962 * Support seeking based on MLLT metadata 963 ([#3241](https://github.com/google/ExoPlayer/issues/3241)). 964 * Fix handling of streams with appended data 965 ([#4954](https://github.com/google/ExoPlayer/issues/4954)). 966* DASH: Parse ProgramInformation element if present in the manifest. 967* HLS: 968 * Add constructor to `DefaultHlsExtractorFactory` for adding TS payload 969 reader factory flags 970 ([#4861](https://github.com/google/ExoPlayer/issues/4861)). 971 * Fix bug in segment sniffing 972 ([#5039](https://github.com/google/ExoPlayer/issues/5039)). 973* SubRip: Add support for alignment tags, and remove tags from the displayed 974 captions ([#4306](https://github.com/google/ExoPlayer/issues/4306)). 975* Fix issue with blind seeking to windows with non-zero offset in a 976 `ConcatenatingMediaSource` 977 ([#4873](https://github.com/google/ExoPlayer/issues/4873)). 978* Fix logic for enabling next and previous actions in `TimelineQueueNavigator` 979 ([#5065](https://github.com/google/ExoPlayer/issues/5065)). 980* Fix issue where audio focus handling could not be disabled after enabling it 981 ([#5055](https://github.com/google/ExoPlayer/issues/5055)). 982* Fix issue where subtitles were positioned incorrectly if `SubtitleView` had 983 a non-zero position offset to its parent 984 ([#4788](https://github.com/google/ExoPlayer/issues/4788)). 985* Fix issue where the buffered position was not updated correctly when 986 transitioning between periods 987 ([#4899](https://github.com/google/ExoPlayer/issues/4899)). 988* Fix issue where a `NullPointerException` is thrown when removing an 989 unprepared media source from a `ConcatenatingMediaSource` with the 990 `useLazyPreparation` option enabled 991 ([#4986](https://github.com/google/ExoPlayer/issues/4986)). 992* Work around an issue where a non-empty end-of-stream audio buffer would be 993 output with timestamp zero, causing the player position to jump backwards 994 ([#5045](https://github.com/google/ExoPlayer/issues/5045)). 995* Suppress a spurious assertion failure on some Samsung devices 996 ([#4532](https://github.com/google/ExoPlayer/issues/4532)). 997* Suppress spurious "references unknown class member" shrinking warning 998 ([#4890](https://github.com/google/ExoPlayer/issues/4890)). 999* Swap recommended order for google() and jcenter() in gradle config 1000 ([#4997](https://github.com/google/ExoPlayer/issues/4997)). 1001 1002### 2.9.0 (2018-09-06) 1003 1004* Turn on Java 8 compiler support for the ExoPlayer library. Apps may need to 1005 add `compileOptions { targetCompatibility JavaVersion.VERSION_1_8 }` to 1006 their gradle settings to ensure bytecode compatibility. 1007* Set `compileSdkVersion` and `targetSdkVersion` to 28. 1008* Support for automatic audio focus handling via 1009 `SimpleExoPlayer.setAudioAttributes`. 1010* Add `ExoPlayer.retry` convenience method. 1011* Add `AudioListener` for listening to changes in audio configuration during 1012 playback ([#3994](https://github.com/google/ExoPlayer/issues/3994)). 1013* Add `LoadErrorHandlingPolicy` to allow configuration of load error handling 1014 across `MediaSource` implementations 1015 ([#3370](https://github.com/google/ExoPlayer/issues/3370)). 1016* Allow passing a `Looper`, which specifies the thread that must be used to 1017 access the player, when instantiating player instances using 1018 `ExoPlayerFactory` 1019 ([#4278](https://github.com/google/ExoPlayer/issues/4278)). 1020* Allow setting log level for ExoPlayer logcat output 1021 ([#4665](https://github.com/google/ExoPlayer/issues/4665)). 1022* Simplify `BandwidthMeter` injection: The `BandwidthMeter` should now be 1023 passed directly to `ExoPlayerFactory`, instead of to 1024 `TrackSelection.Factory` and `DataSource.Factory`. The `BandwidthMeter` is 1025 passed to the components that need it internally. The `BandwidthMeter` may 1026 also be omitted, in which case a default instance will be used. 1027* Spherical video: 1028 * Support for spherical video by setting `surface_type="spherical_view"` 1029 on `PlayerView`. 1030 * Support for 1031 [VR180](https://github.com/google/spatial-media/blob/master/docs/vr180.md). 1032* HLS: 1033 * Support PlayReady. 1034 * Add container format sniffing 1035 ([#2025](https://github.com/google/ExoPlayer/issues/2025)). 1036 * Support alternative `EXT-X-KEY` tags. 1037 * Support `EXT-X-INDEPENDENT-SEGMENTS` in the master playlist. 1038 * Support variable substitution 1039 ([#4422](https://github.com/google/ExoPlayer/issues/4422)). 1040 * Fix the bitrate being unset on primary track sample formats 1041 ([#3297](https://github.com/google/ExoPlayer/issues/3297)). 1042 * Make `HlsMediaSource.Factory` take a factory of trackers instead of a 1043 tracker instance 1044 ([#4814](https://github.com/google/ExoPlayer/issues/4814)). 1045* DASH: 1046 * Support `messageData` attribute for in-manifest event streams. 1047 * Clip periods to their specified durations 1048 ([#4185](https://github.com/google/ExoPlayer/issues/4185)). 1049* Improve seeking support for progressive streams: 1050 * Support seeking in MPEG-TS 1051 ([#966](https://github.com/google/ExoPlayer/issues/966)). 1052 * Support seeking in MPEG-PS 1053 ([#4476](https://github.com/google/ExoPlayer/issues/4476)). 1054 * Support approximate seeking in ADTS using a constant bitrate assumption 1055 ([#4548](https://github.com/google/ExoPlayer/issues/4548)). The 1056 `FLAG_ENABLE_CONSTANT_BITRATE_SEEKING` flag must be set on the extractor 1057 to enable this functionality. 1058 * Support approximate seeking in AMR using a constant bitrate assumption. 1059 The `FLAG_ENABLE_CONSTANT_BITRATE_SEEKING` flag must be set on the 1060 extractor to enable this functionality. 1061 * Add `DefaultExtractorsFactory.setConstantBitrateSeekingEnabled` to 1062 enable approximate seeking using a constant bitrate assumption on all 1063 extractors that support it. 1064* Video: 1065 * Add callback to `VideoListener` to notify of surface size changes. 1066 * Improve performance when playing high frame-rate content, and when 1067 playing at greater than 1x speed 1068 ([#2777](https://github.com/google/ExoPlayer/issues/2777)). 1069 * Scale up the initial video decoder maximum input size so playlist 1070 transitions with small increases in maximum sample size do not require 1071 reinitialization 1072 ([#4510](https://github.com/google/ExoPlayer/issues/4510)). 1073 * Fix a bug where the player would not transition to the ended state when 1074 playing video in tunneled mode. 1075* Audio: 1076 * Support attaching auxiliary audio effects to the `AudioTrack` via 1077 `Player.setAuxEffectInfo` and `Player.clearAuxEffectInfo`. 1078 * Support seamless adaptation while playing xHE-AAC streams. 1079 ([#4360](https://github.com/google/ExoPlayer/issues/4360)). 1080 * Increase `AudioTrack` buffer sizes to the theoretical maximum required 1081 for each encoding for passthrough playbacks 1082 ([#3803](https://github.com/google/ExoPlayer/issues/3803)). 1083 * WAV: Fix issue where white noise would be output at the end of playback 1084 ([#4724](https://github.com/google/ExoPlayer/issues/4724)). 1085 * MP3: Fix issue where streams would play twice on the SM-T530 1086 ([#4519](https://github.com/google/ExoPlayer/issues/4519)). 1087* Analytics: 1088 * Add callbacks to `DefaultDrmSessionEventListener` and 1089 `AnalyticsListener` to be notified of acquired and released DRM 1090 sessions. 1091 * Add uri field to `LoadEventInfo` in `MediaSourceEventListener` and 1092 `AnalyticsListener` callbacks. This uri is the redirected uri if 1093 redirection occurred 1094 ([#2054](https://github.com/google/ExoPlayer/issues/2054)). 1095 * Add response headers field to `LoadEventInfo` in 1096 `MediaSourceEventListener` and `AnalyticsListener` callbacks 1097 ([#4361](https://github.com/google/ExoPlayer/issues/4361) and 1098 [#4615](https://github.com/google/ExoPlayer/issues/4615)). 1099* UI: 1100 * Add option to `PlayerView` to show buffering view when playWhenReady is 1101 false ([#4304](https://github.com/google/ExoPlayer/issues/4304)). 1102 * Allow any `Drawable` to be used as `PlayerView` default artwork. 1103* ConcatenatingMediaSource: 1104 * Support lazy preparation of playlist media sources 1105 ([#3972](https://github.com/google/ExoPlayer/issues/3972)). 1106 * Support range removal with `removeMediaSourceRange` methods 1107 ([#4542](https://github.com/google/ExoPlayer/issues/4542)). 1108 * Support setting a new shuffle order with `setShuffleOrder` 1109 ([#4791](https://github.com/google/ExoPlayer/issues/4791)). 1110* MPEG-TS: Support CEA-608/708 in H262 1111 ([#2565](https://github.com/google/ExoPlayer/issues/2565)). 1112* Allow configuration of the back buffer in `DefaultLoadControl.Builder` 1113 ([#4857](https://github.com/google/ExoPlayer/issues/4857)). 1114* Allow apps to pass a `CacheKeyFactory` for setting custom cache keys when 1115 creating a `CacheDataSource`. 1116* Provide additional information for adaptive track selection. 1117 `TrackSelection.updateSelectedTrack` has two new parameters for the current 1118 queue of media chunks and iterators for information about upcoming chunks. 1119* Allow `MediaCodecSelector`s to return multiple compatible decoders for 1120 `MediaCodecRenderer`, and provide an (optional) `MediaCodecSelector` that 1121 falls back to less preferred decoders like `MediaCodec.createDecoderByType` 1122 ([#273](https://github.com/google/ExoPlayer/issues/273)). 1123* Enable gzip for requests made by `SingleSampleMediaSource` 1124 ([#4771](https://github.com/google/ExoPlayer/issues/4771)). 1125* Fix bug reporting buffered position for multi-period windows, and add 1126 convenience methods `Player.getTotalBufferedDuration` and 1127 `Player.getContentBufferedDuration` 1128 ([#4023](https://github.com/google/ExoPlayer/issues/4023)). 1129* Fix bug where transitions to clipped media sources would happen too early 1130 ([#4583](https://github.com/google/ExoPlayer/issues/4583)). 1131* Fix bugs reporting events for multi-period media sources 1132 ([#4492](https://github.com/google/ExoPlayer/issues/4492) and 1133 [#4634](https://github.com/google/ExoPlayer/issues/4634)). 1134* Fix issue where removing looping media from a playlist throws an exception 1135 ([#4871](https://github.com/google/ExoPlayer/issues/4871). 1136* Fix issue where the preferred audio or text track would not be selected if 1137 mapped onto a secondary renderer of the corresponding type 1138 ([#4711](http://github.com/google/ExoPlayer/issues/4711)). 1139* Fix issue where errors of upcoming playlist items are thrown too early 1140 ([#4661](https://github.com/google/ExoPlayer/issues/4661)). 1141* Allow edit lists which do not start with a sync sample. 1142 ([#4774](https://github.com/google/ExoPlayer/issues/4774)). 1143* Fix issue with audio discontinuities at period transitions, e.g. when 1144 looping ([#3829](https://github.com/google/ExoPlayer/issues/3829)). 1145* Fix issue where `player.getCurrentTag()` throws an 1146 `IndexOutOfBoundsException` 1147 ([#4822](https://github.com/google/ExoPlayer/issues/4822)). 1148* Fix bug preventing use of multiple key session support (`multiSession=true`) 1149 for non-Widevine `DefaultDrmSessionManager` instances 1150 ([#4834](https://github.com/google/ExoPlayer/issues/4834)). 1151* Fix issue where audio and video would desynchronize when playing 1152 concatenations of gapless content 1153 ([#4559](https://github.com/google/ExoPlayer/issues/4559)). 1154* IMA extension: 1155 * Refine the previous fix for empty ad groups to avoid discarding ad 1156 breaks unnecessarily 1157 ([#4030](https://github.com/google/ExoPlayer/issues/4030) and 1158 [#4280](https://github.com/google/ExoPlayer/issues/4280)). 1159 * Fix handling of empty postrolls 1160 ([#4681](https://github.com/google/ExoPlayer/issues/4681)). 1161 * Fix handling of postrolls with multiple ads 1162 ([#4710](https://github.com/google/ExoPlayer/issues/4710)). 1163* MediaSession extension: 1164 * Add `MediaSessionConnector.setCustomErrorMessage` to support setting 1165 custom error messages. 1166 * Add `MediaMetadataProvider` to support setting custom metadata 1167 ([#3497](https://github.com/google/ExoPlayer/issues/3497)). 1168* Cronet extension: Now distributed via jCenter. 1169* FFmpeg extension: Support mu-law and A-law PCM. 1170 1171### 2.8.4 (2018-08-17) 1172 1173* IMA extension: Improve handling of consecutive empty ad groups 1174 ([#4030](https://github.com/google/ExoPlayer/issues/4030)), 1175 ([#4280](https://github.com/google/ExoPlayer/issues/4280)). 1176 1177### 2.8.3 (2018-07-23) 1178 1179* IMA extension: 1180 * Fix behavior when creating/releasing the player then releasing 1181 `ImaAdsLoader` 1182 ([#3879](https://github.com/google/ExoPlayer/issues/3879)). 1183 * Add support for setting slots for companion ads. 1184* Captions: 1185 * TTML: Fix an issue with TTML using font size as % of cell resolution 1186 that makes `SubtitleView.setApplyEmbeddedFontSizes()` not work 1187 correctly. ([#4491](https://github.com/google/ExoPlayer/issues/4491)). 1188 * CEA-608: Improve handling of embedded styles 1189 ([#4321](https://github.com/google/ExoPlayer/issues/4321)). 1190* DASH: 1191 * Exclude text streams from duration calculations 1192 ([#4029](https://github.com/google/ExoPlayer/issues/4029)). 1193 * Fix freezing when playing multi-period manifests with `EventStream`s 1194 ([#4492](https://github.com/google/ExoPlayer/issues/4492)). 1195* DRM: Allow DrmInitData to carry a license server URL 1196 ([#3393](https://github.com/google/ExoPlayer/issues/3393)). 1197* MPEG-TS: Fix bug preventing SCTE-35 cues from being output 1198 ([#4573](https://github.com/google/ExoPlayer/issues/4573)). 1199* Expose all internal ID3 data stored in MP4 udta boxes, and switch from using 1200 CommentFrame to InternalFrame for frames with gapless metadata in MP4. 1201* Add `PlayerView.isControllerVisible` 1202 ([#4385](https://github.com/google/ExoPlayer/issues/4385)). 1203* Fix issue playing DRM protected streams on Asus Zenfone 2 1204 ([#4403](https://github.com/google/ExoPlayer/issues/4413)). 1205* Add support for multiple audio and video tracks in MPEG-PS streams 1206 ([#4406](https://github.com/google/ExoPlayer/issues/4406)). 1207* Add workaround for track index mismatches between trex and tkhd boxes in 1208 fragmented MP4 files 1209 ([#4477](https://github.com/google/ExoPlayer/issues/4477)). 1210* Add workaround for track index mismatches between tfhd and tkhd boxes in 1211 fragmented MP4 files 1212 ([#4083](https://github.com/google/ExoPlayer/issues/4083)). 1213* Ignore all MP4 edit lists if one edit list couldn't be handled 1214 ([#4348](https://github.com/google/ExoPlayer/issues/4348)). 1215* Fix issue when switching track selection from an embedded track to a primary 1216 track in DASH ([#4477](https://github.com/google/ExoPlayer/issues/4477)). 1217* Fix accessibility class name for `DefaultTimeBar` 1218 ([#4611](https://github.com/google/ExoPlayer/issues/4611)). 1219* Improved compatibility with FireOS devices. 1220 1221### 2.8.2 (2018-06-06) 1222 1223* IMA extension: Don't advertise support for video/mpeg ad media, as we don't 1224 have an extractor for this 1225 ([#4297](https://github.com/google/ExoPlayer/issues/4297)). 1226* DASH: Fix playback getting stuck when playing representations that have both 1227 sidx atoms and non-zero presentationTimeOffset values. 1228* HLS: 1229 * Allow injection of custom playlist trackers. 1230 * Fix adaptation in live playlists with EXT-X-PROGRAM-DATE-TIME tags. 1231* Mitigate memory leaks when `MediaSource` loads are slow to cancel 1232 ([#4249](https://github.com/google/ExoPlayer/issues/4249)). 1233* Fix inconsistent `Player.EventListener` invocations for recursive player 1234 state changes ([#4276](https://github.com/google/ExoPlayer/issues/4276)). 1235* Fix `MediaCodec.native_setSurface` crash on Moto C 1236 ([#4315](https://github.com/google/ExoPlayer/issues/4315)). 1237* Fix missing whitespace in CEA-608 1238 ([#3906](https://github.com/google/ExoPlayer/issues/3906)). 1239* Fix crash downloading HLS media playlists 1240 ([#4396](https://github.com/google/ExoPlayer/issues/4396)). 1241* Fix a bug where download cancellation was ignored 1242 ([#4403](https://github.com/google/ExoPlayer/issues/4403)). 1243* Set `METADATA_KEY_TITLE` on media descriptions 1244 ([#4292](https://github.com/google/ExoPlayer/issues/4292)). 1245* Allow apps to register custom MIME types 1246 ([#4264](https://github.com/google/ExoPlayer/issues/4264)). 1247 1248### 2.8.1 (2018-05-22) 1249 1250* HLS: 1251 * Fix playback of livestreams with EXT-X-PROGRAM-DATE-TIME tags 1252 ([#4239](https://github.com/google/ExoPlayer/issues/4239)). 1253 * Fix playback of clipped streams starting from non-keyframe positions 1254 ([#4241](https://github.com/google/ExoPlayer/issues/4241)). 1255* OkHttp extension: Fix to correctly include response headers in thrown 1256 `InvalidResponseCodeException`s. 1257* Add possibility to cancel `PlayerMessage`s. 1258* UI: 1259 * Add `PlayerView.setKeepContentOnPlayerReset` to keep the currently 1260 displayed video frame or media artwork visible when the player is reset 1261 ([#2843](https://github.com/google/ExoPlayer/issues/2843)). 1262* Fix crash when switching surface on Moto E(4) 1263 ([#4134](https://github.com/google/ExoPlayer/issues/4134)). 1264* Fix a bug that could cause event listeners to be called with inconsistent 1265 information if an event listener interacted with the player 1266 ([#4262](https://github.com/google/ExoPlayer/issues/4262)). 1267* Audio: 1268 * Fix extraction of PCM in MP4/MOV 1269 ([#4228](https://github.com/google/ExoPlayer/issues/4228)). 1270 * FLAC: Supports seeking for FLAC files without SEEKTABLE 1271 ([#1808](https://github.com/google/ExoPlayer/issues/1808)). 1272* Captions: 1273 * TTML: 1274 * Fix a styling issue when there are multiple regions displayed at the 1275 same time that can make text size of each region much smaller than 1276 defined. 1277 * Fix an issue when the caption line has no text (empty line or only line 1278 break), and the line's background is still displayed. 1279 * Support TTML font size using % correctly (as percentage of document cell 1280 resolution). 1281 1282### 2.8.0 (2018-05-03) 1283 1284* Downloading: 1285 * Add `DownloadService`, `DownloadManager` and related classes 1286 ([#2643](https://github.com/google/ExoPlayer/issues/2643)). Information 1287 on using these components to download progressive formats can be found 1288 [here](https://medium.com/google-exoplayer/downloading-streams-6d259eec7f95). 1289 To see how to download DASH, HLS and SmoothStreaming media, take a look 1290 at the app. 1291 * Updated main demo app to support downloading DASH, HLS, SmoothStreaming 1292 and progressive media. 1293* MediaSources: 1294 * Allow reusing media sources after they have been released and also in 1295 parallel to allow adding them multiple times to a concatenation. 1296 ([#3498](https://github.com/google/ExoPlayer/issues/3498)). 1297 * Merged `DynamicConcatenatingMediaSource` into `ConcatenatingMediaSource` 1298 and deprecated `DynamicConcatenatingMediaSource`. 1299 * Allow clipping of child media sources where the period and window have a 1300 non-zero offset with `ClippingMediaSource`. 1301 * Allow adding and removing `MediaSourceEventListener`s to MediaSources 1302 after they have been created. Listening to events is now supported for 1303 all media sources including composite sources. 1304 * Added callbacks to `MediaSourceEventListener` to get notified when media 1305 periods are created, released and being read from. 1306 * Support live stream clipping with `ClippingMediaSource`. 1307 * Allow setting tags for all media sources in their factories. The tag of 1308 the current window can be retrieved with `Player.getCurrentTag`. 1309* UI: 1310 * Add support for displaying error messages and a buffering spinner in 1311 `PlayerView`. 1312 * Add support for listening to `AspectRatioFrameLayout`'s aspect ratio 1313 update ([#3736](https://github.com/google/ExoPlayer/issues/3736)). 1314 * Add `PlayerNotificationManager` for displaying notifications reflecting 1315 the player state. 1316 * Add `TrackSelectionView` for selecting tracks with 1317 `DefaultTrackSelector`. 1318 * Add `TrackNameProvider` for converting track `Format`s to textual 1319 descriptions, and `DefaultTrackNameProvider` as a default 1320 implementation. 1321* Track selection: 1322 * Reworked `MappingTrackSelector` and `DefaultTrackSelector`. 1323 * `DefaultTrackSelector.Parameters` now implements `Parcelable`. 1324 * Added UI components for track selection (see above). 1325* Audio: 1326 * Support extracting data from AMR container formats, including both 1327 narrow and wide band 1328 ([#2527](https://github.com/google/ExoPlayer/issues/2527)). 1329 * FLAC: 1330 * Sniff FLAC files correctly if they have ID3 headers 1331 ([#4055](https://github.com/google/ExoPlayer/issues/4055)). 1332 * Supports FLAC files with high sample rate (176400 and 192000) 1333 ([#3769](https://github.com/google/ExoPlayer/issues/3769)). 1334 * Factor out `AudioTrack` position tracking from `DefaultAudioSink`. 1335 * Fix an issue where the playback position would pause just after playback 1336 begins, and poll the audio timestamp less frequently once it starts 1337 advancing ([#3841](https://github.com/google/ExoPlayer/issues/3841)). 1338 * Add an option to skip silent audio in `PlaybackParameters` 1339 ([#2635](https://github.com/google/ExoPlayer/issues/2635)). 1340 * Fix an issue where playback of TrueHD streams would get stuck after 1341 seeking due to not finding a syncframe 1342 ([#3845](https://github.com/google/ExoPlayer/issues/3845)). 1343 * Fix an issue with eac3-joc playback where a codec would fail to 1344 configure ([#4165](https://github.com/google/ExoPlayer/issues/4165)). 1345 * Handle non-empty end-of-stream buffers, to fix gapless playback of 1346 streams with encoder padding when the decoder returns a non-empty final 1347 buffer. 1348 * Allow trimming more than one sample when applying an elst audio edit via 1349 gapless playback info. 1350 * Allow overriding skipping/scaling with custom `AudioProcessor`s 1351 ([#3142](https://github.com/google/ExoPlayer/issues/3142)). 1352* Caching: 1353 * Add release method to the `Cache` interface, and prevent multiple 1354 instances of `SimpleCache` using the same folder at the same time. 1355 * Cache redirect URLs 1356 ([#2360](https://github.com/google/ExoPlayer/issues/2360)). 1357* DRM: 1358 * Allow multiple listeners for `DefaultDrmSessionManager`. 1359 * Pass `DrmSessionManager` to `ExoPlayerFactory` instead of 1360 `RendererFactory`. 1361 * Change minimum API requirement for CBC and pattern encryption from 24 to 1362 25 ([#4022](https://github.com/google/ExoPlayer/issues/4022)). 1363 * Fix handling of 307/308 redirects when making license requests 1364 ([#4108](https://github.com/google/ExoPlayer/issues/4108)). 1365* HLS: 1366 * Fix playlist loading error propagation when the current selection does 1367 not include all of the playlist's variants. 1368 * Fix SAMPLE-AES-CENC and SAMPLE-AES-CTR EXT-X-KEY methods 1369 ([#4145](https://github.com/google/ExoPlayer/issues/4145)). 1370 * Preeptively declare an ID3 track in chunkless preparation 1371 ([#4016](https://github.com/google/ExoPlayer/issues/4016)). 1372 * Add support for multiple #EXT-X-MAP tags in a media playlist 1373 ([#4164](https://github.com/google/ExoPlayer/issues/4182)). 1374 * Fix seeking in live streams 1375 ([#4187](https://github.com/google/ExoPlayer/issues/4187)). 1376* IMA extension: 1377 * Allow setting the ad media load timeout 1378 ([#3691](https://github.com/google/ExoPlayer/issues/3691)). 1379 * Expose ad load errors via `MediaSourceEventListener` on 1380 `AdsMediaSource`, and allow setting an ad event listener on 1381 `ImaAdsLoader`. Deprecate the `AdsMediaSource.EventListener`. 1382* Add `AnalyticsListener` interface which can be registered in 1383 `SimpleExoPlayer` to receive detailed metadata for each ExoPlayer event. 1384* Optimize seeking in FMP4 by enabling seeking to the nearest sync sample 1385 within a fragment. This benefits standalone FMP4 playbacks, DASH and 1386 SmoothStreaming. 1387* Updated default max buffer length in `DefaultLoadControl`. 1388* Fix ClearKey decryption error if the key contains a forward slash 1389 ([#4075](https://github.com/google/ExoPlayer/issues/4075)). 1390* Fix crash when switching surface on Huawei P9 Lite 1391 ([#4084](https://github.com/google/ExoPlayer/issues/4084)), and Philips 1392 QM163E ([#4104](https://github.com/google/ExoPlayer/issues/4104)). 1393* Support ZLIB compressed PGS subtitles. 1394* Added `getPlaybackError` to `Player` interface. 1395* Moved initial bitrate estimate from `AdaptiveTrackSelection` to 1396 `DefaultBandwidthMeter`. 1397* Removed default renderer time offset of 60000000 from internal player. The 1398 actual renderer timestamp offset can be obtained by listening to 1399 `BaseRenderer.onStreamChanged`. 1400* Added dependencies on checkerframework annotations for static code analysis. 1401 1402### 2.7.3 (2018-04-04) 1403 1404* Fix ProGuard configuration for Cast, IMA and OkHttp extensions. 1405* Update OkHttp extension to depend on OkHttp 3.10.0. 1406 1407### 2.7.2 (2018-03-29) 1408 1409* Gradle: Upgrade Gradle version from 4.1 to 4.4 so it can work with Android 1410 Studio 3.1 ([#3708](https://github.com/google/ExoPlayer/issues/3708)). 1411* Match codecs starting with "mp4a" to different Audio MimeTypes 1412 ([#3779](https://github.com/google/ExoPlayer/issues/3779)). 1413* Fix ANR issue on Redmi 4X and Redmi Note 4 1414 ([#4006](https://github.com/google/ExoPlayer/issues/4006)). 1415* Fix handling of zero padded strings when parsing Matroska streams 1416 ([#4010](https://github.com/google/ExoPlayer/issues/4010)). 1417* Fix "Decoder input buffer too small" error when playing some FLAC streams. 1418* MediaSession extension: Omit fast forward and rewind actions when media is 1419 not seekable ([#4001](https://github.com/google/ExoPlayer/issues/4001)). 1420 1421### 2.7.1 (2018-03-09) 1422 1423* Gradle: Replaced 'compile' (deprecated) with 'implementation' and 'api'. 1424 This may lead to build breakage for applications upgrading from previous 1425 version that rely on indirect dependencies of certain modules. In such 1426 cases, application developers need to add the missing dependency to their 1427 gradle file. You can read more about the new dependency configurations 1428 [here](https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#new_configurations). 1429* HlsMediaSource: Make HLS periods start at zero instead of the epoch. 1430 Applications that rely on HLS timelines having a period starting at the 1431 epoch will need to update their handling of HLS timelines. The program date 1432 time is still available via the informational 1433 `Timeline.Window.windowStartTimeMs` field 1434 ([#3865](https://github.com/google/ExoPlayer/issues/3865), 1435 [#3888](https://github.com/google/ExoPlayer/issues/3888)). 1436* Enable seeking in MP4 streams where duration is set incorrectly in the track 1437 header ([#3926](https://github.com/google/ExoPlayer/issues/3926)). 1438* Video: Force rendering a frame periodically in `MediaCodecVideoRenderer` and 1439 `LibvpxVideoRenderer`, even if it is late. 1440 1441### 2.7.0 (2018-02-19) 1442 1443* Player interface: 1444 * Add optional parameter to `stop` to reset the player when stopping. 1445 * Add a reason to `EventListener.onTimelineChanged` to distinguish between 1446 initial preparation, reset and dynamic updates. 1447 * Add `Player.DISCONTINUITY_REASON_AD_INSERTION` to the possible reasons 1448 reported in `Eventlistener.onPositionDiscontinuity` to distinguish 1449 transitions to and from ads within one period from transitions between 1450 periods. 1451 * Replaced `ExoPlayer.sendMessages` with `ExoPlayer.createMessage` to 1452 allow more customization of the message. Now supports setting a message 1453 delivery playback position and/or a delivery handler 1454 ([#2189](https://github.com/google/ExoPlayer/issues/2189)). 1455 * Add `Player.VideoComponent`, `Player.TextComponent` and 1456 `Player.MetadataComponent` interfaces that define optional video, text 1457 and metadata output functionality. New `getVideoComponent`, 1458 `getTextComponent` and `getMetadataComponent` methods provide access to 1459 this functionality. 1460* Add `ExoPlayer.setSeekParameters` for controlling how seek operations are 1461 performed. The `SeekParameters` class contains defaults for exact seeking 1462 and seeking to the closest sync points before, either side or after 1463 specified seek positions. `SeekParameters` are not currently supported when 1464 playing HLS streams. 1465* DefaultTrackSelector: 1466 * Replace `DefaultTrackSelector.Parameters` copy methods with a builder. 1467 * Support disabling of individual text track selection flags. 1468* Buffering: 1469 * Allow a back-buffer of media to be retained behind the current playback 1470 position, for fast backward seeking. The back-buffer can be configured 1471 by custom `LoadControl` implementations. 1472 * Add ability for `SequenceableLoader` to re-evaluate its buffer and 1473 discard buffered media so that it can be re-buffered in a different 1474 quality. 1475 * Allow more flexible loading strategy when playing media containing 1476 multiple sub-streams, by allowing injection of custom 1477 `CompositeSequenceableLoader` factories through 1478 `DashMediaSource.Factory`, `HlsMediaSource.Factory`, 1479 `SsMediaSource.Factory`, and `MergingMediaSource`. 1480 * Play out existing buffer before retrying for progressive live streams 1481 ([#1606](https://github.com/google/ExoPlayer/issues/1606)). 1482* UI: 1483 * Generalized player and control views to allow them to bind with any 1484 `Player`, and renamed them to `PlayerView` and `PlayerControlView` 1485 respectively. 1486 * Made `PlayerView` automatically apply video rotation when configured to 1487 use `TextureView` 1488 ([#91](https://github.com/google/ExoPlayer/issues/91)). 1489 * Made `PlayerView` play button behave correctly when the player is ended 1490 ([#3689](https://github.com/google/ExoPlayer/issues/3689)), and call a 1491 `PlaybackPreparer` when the player is idle. 1492* DRM: Optimistically attempt playback of DRM protected content that does not 1493 declare scheme specific init data in the manifest. If playback of clear 1494 samples without keys is allowed, delay DRM session error propagation until 1495 keys are actually needed 1496 ([#3630](https://github.com/google/ExoPlayer/issues/3630)). 1497* DASH: 1498 * Support in-band Emsg events targeting the player with scheme id 1499 `urn:mpeg:dash:event:2012` and scheme values "1", "2" and "3". 1500 * Support EventStream elements in DASH manifests. 1501* HLS: 1502 * Add opt-in support for chunkless preparation in HLS. This allows an HLS 1503 source to finish preparation without downloading any chunks, which can 1504 significantly reduce initial buffering time 1505 ([#3149](https://github.com/google/ExoPlayer/issues/3149)). More details 1506 can be found 1507 [here](https://medium.com/google-exoplayer/faster-hls-preparation-f6611aa15ea6). 1508 * Fail if unable to sync with the Transport Stream, rather than entering 1509 stuck in an indefinite buffering state. 1510 * Fix mime type propagation 1511 ([#3653](https://github.com/google/ExoPlayer/issues/3653)). 1512 * Fix ID3 context reuse across segment format changes 1513 ([#3622](https://github.com/google/ExoPlayer/issues/3622)). 1514 * Use long for media sequence numbers 1515 ([#3747](https://github.com/google/ExoPlayer/issues/3747)) 1516 * Add initial support for the EXT-X-GAP tag. 1517* Audio: 1518 * Support TrueHD passthrough for rechunked samples in Matroska files 1519 ([#2147](https://github.com/google/ExoPlayer/issues/2147)). 1520 * Support resampling 24-bit and 32-bit integer to 32-bit float for high 1521 resolution output in `DefaultAudioSink` 1522 ([#3635](https://github.com/google/ExoPlayer/pull/3635)). 1523* Captions: 1524 * Basic support for PGS subtitles 1525 ([#3008](https://github.com/google/ExoPlayer/issues/3008)). 1526 * Fix handling of CEA-608 captions where multiple buffers have the same 1527 presentation timestamp 1528 ([#3782](https://github.com/google/ExoPlayer/issues/3782)). 1529* Caching: 1530 * Fix cache corruption issue 1531 ([#3762](https://github.com/google/ExoPlayer/issues/3762)). 1532 * Implement periodic check in `CacheDataSource` to see whether it's 1533 possible to switch to reading/writing the cache having initially 1534 bypassed it. 1535* IMA extension: 1536 * Fix the player getting stuck when an ad group fails to load 1537 ([#3584](https://github.com/google/ExoPlayer/issues/3584)). 1538 * Work around loadAd not being called beore the LOADED AdEvent arrives 1539 ([#3552](https://github.com/google/ExoPlayer/issues/3552)). 1540 * Handle asset mismatch errors 1541 ([#3801](https://github.com/google/ExoPlayer/issues/3801)). 1542 * Add support for playing non-Extractor content MediaSources in the IMA 1543 demo app ([#3676](https://github.com/google/ExoPlayer/issues/3676)). 1544 * Fix handling of ad tags where ad groups are out of order 1545 ([#3716](https://github.com/google/ExoPlayer/issues/3716)). 1546 * Fix handling of ad tags with only preroll/postroll ad groups 1547 ([#3715](https://github.com/google/ExoPlayer/issues/3715)). 1548 * Propagate ad media preparation errors to IMA so that the ads can be 1549 skipped. 1550 * Handle exceptions in IMA callbacks so that can be logged less verbosely. 1551* New Cast extension. Simplifies toggling between local and Cast playbacks. 1552* `EventLogger` moved from the demo app into the core library. 1553* Fix ANR issue on the Huawei P8 Lite, Huawei Y6II, Moto C+, Meizu M5C, Lenovo 1554 K4 Note and Sony Xperia E5. 1555 ([#3724](https://github.com/google/ExoPlayer/issues/3724), 1556 [#3835](https://github.com/google/ExoPlayer/issues/3835)). 1557* Fix potential NPE when removing media sources from a 1558 DynamicConcatenatingMediaSource 1559 ([#3796](https://github.com/google/ExoPlayer/issues/3796)). 1560* Check `sys.display-size` on Philips ATVs 1561 ([#3807](https://github.com/google/ExoPlayer/issues/3807)). 1562* Release `Extractor`s on the loading thread to avoid potentially leaking 1563 resources when the playback thread has quit by the time the loading task has 1564 completed. 1565* ID3: Better handle malformed ID3 data 1566 ([#3792](https://github.com/google/ExoPlayer/issues/3792). 1567* Support 14-bit mode and little endianness in DTS PES packets 1568 ([#3340](https://github.com/google/ExoPlayer/issues/3340)). 1569* Demo app: Add ability to download not DRM protected content. 1570 1571### 2.6.1 (2017-12-15) 1572 1573* Add factories to `ExtractorMediaSource`, `HlsMediaSource`, `SsMediaSource`, 1574 `DashMediaSource` and `SingleSampleMediaSource`. 1575* Use the same listener `MediaSourceEventListener` for all MediaSource 1576 implementations. 1577* IMA extension: 1578 * Support non-ExtractorMediaSource ads 1579 ([#3302](https://github.com/google/ExoPlayer/issues/3302)). 1580 * Skip ads before the ad preceding the player's initial seek position 1581 ([#3527](https://github.com/google/ExoPlayer/issues/3527)). 1582 * Fix ad loading when there is no preroll. 1583 * Add an option to turn off hiding controls during ad playback 1584 ([#3532](https://github.com/google/ExoPlayer/issues/3532)). 1585 * Support specifying an ads response instead of an ad tag 1586 ([#3548](https://github.com/google/ExoPlayer/issues/3548)). 1587 * Support overriding the ad load timeout 1588 ([#3556](https://github.com/google/ExoPlayer/issues/3556)). 1589* DASH: Support time zone designators in ISO8601 UTCTiming elements 1590 ([#3524](https://github.com/google/ExoPlayer/issues/3524)). 1591* Audio: 1592 * Support 32-bit PCM float output from `DefaultAudioSink`, and add an 1593 option to use this with `FfmpegAudioRenderer`. 1594 * Add support for extracting 32-bit WAVE files 1595 ([#3379](https://github.com/google/ExoPlayer/issues/3379)). 1596 * Support extraction and decoding of Dolby Atmos 1597 ([#2465](https://github.com/google/ExoPlayer/issues/2465)). 1598 * Fix handling of playback parameter changes while paused when followed by 1599 a seek. 1600* SimpleExoPlayer: Allow multiple audio and video debug listeners. 1601* DefaultTrackSelector: Support undefined language text track selection when 1602 the preferred language is not available 1603 ([#2980](https://github.com/google/ExoPlayer/issues/2980)). 1604* Add options to `DefaultLoadControl` to set maximum buffer size in bytes and 1605 to choose whether size or time constraints are prioritized. 1606* Use surfaceless context for secure `DummySurface`, if available 1607 ([#3558](https://github.com/google/ExoPlayer/issues/3558)). 1608* FLV: Fix playback of live streams that do not contain an audio track 1609 ([#3188](https://github.com/google/ExoPlayer/issues/3188)). 1610* CEA-608: Fix handling of row count changes in roll-up mode 1611 ([#3513](https://github.com/google/ExoPlayer/issues/3513)). 1612* Prevent period transitions when seeking to the end of a period when paused 1613 ([#2439](https://github.com/google/ExoPlayer/issues/2439)). 1614 1615### 2.6.0 (2017-11-03) 1616 1617* Removed "r" prefix from versions. This release is "2.6.0", not "r2.6.0". 1618* New `Player.DefaultEventListener` abstract class can be extended to avoid 1619 having to implement all methods defined by `Player.EventListener`. 1620* Added a reason to `EventListener.onPositionDiscontinuity` 1621 ([#3252](https://github.com/google/ExoPlayer/issues/3252)). 1622* New `setShuffleModeEnabled` method for enabling shuffled playback. 1623* SimpleExoPlayer: Support for multiple video, text and metadata outputs. 1624* Support for `Renderer`s that don't consume any media 1625 ([#3212](https://github.com/google/ExoPlayer/issues/3212)). 1626* Fix reporting of internal position discontinuities via 1627 `Player.onPositionDiscontinuity`. `DISCONTINUITY_REASON_SEEK_ADJUSTMENT` is 1628 added to disambiguate position adjustments during seeks from other types of 1629 internal position discontinuity. 1630* Fix potential `IndexOutOfBoundsException` when calling 1631 `ExoPlayer.getDuration` 1632 ([#3362](https://github.com/google/ExoPlayer/issues/3362)). 1633* Fix playbacks involving looping, concatenation and ads getting stuck when 1634 media contains tracks with uneven durations 1635 ([#1874](https://github.com/google/ExoPlayer/issues/1874)). 1636* Fix issue with `ContentDataSource` when reading from certain 1637 `ContentProvider` implementations 1638 ([#3426](https://github.com/google/ExoPlayer/issues/3426)). 1639* Better playback experience when the video decoder cannot keep up, by 1640 skipping to key-frames. This is particularly relevant for variable speed 1641 playbacks. 1642* Allow `SingleSampleMediaSource` to suppress load errors 1643 ([#3140](https://github.com/google/ExoPlayer/issues/3140)). 1644* `DynamicConcatenatingMediaSource`: Allow specifying a callback to be invoked 1645 after a dynamic playlist modification has been applied 1646 ([#3407](https://github.com/google/ExoPlayer/issues/3407)). 1647* Audio: New `AudioSink` interface allows customization of audio output path. 1648* Offline: Added `Downloader` implementations for DASH, HLS, SmoothStreaming 1649 and progressive streams. 1650* Track selection: 1651 * Fixed adaptive track selection logic for live playbacks 1652 ([#3017](https://github.com/google/ExoPlayer/issues/3017)). 1653 * Added ability to select the lowest bitrate tracks. 1654* DASH: 1655 * Don't crash when a malformed or unexpected manifest update occurs 1656 ([#2795](https://github.com/google/ExoPlayer/issues/2795)). 1657* HLS: 1658 * Support for Widevine protected FMP4 variants. 1659 * Support CEA-608 in FMP4 variants. 1660 * Support extractor injection 1661 ([#2748](https://github.com/google/ExoPlayer/issues/2748)). 1662* DRM: 1663 * Improved compatibility with ClearKey content 1664 ([#3138](https://github.com/google/ExoPlayer/issues/3138)). 1665 * Support multiple PSSH boxes of the same type. 1666 * Retry initial provisioning and key requests if they fail 1667 * Fix incorrect parsing of non-CENC sinf boxes. 1668* IMA extension: 1669 * Expose `AdsLoader` via getter 1670 ([#3322](https://github.com/google/ExoPlayer/issues/3322)). 1671 * Handle `setPlayWhenReady` calls during ad playbacks 1672 ([#3303](https://github.com/google/ExoPlayer/issues/3303)). 1673 * Ignore seeks if an ad is playing 1674 ([#3309](https://github.com/google/ExoPlayer/issues/3309)). 1675 * Improve robustness of `ImaAdsLoader` in case content is not paused 1676 between content to ad transitions 1677 ([#3430](https://github.com/google/ExoPlayer/issues/3430)). 1678* UI: 1679 * Allow specifying a `Drawable` for the `TimeBar` scrubber 1680 ([#3337](https://github.com/google/ExoPlayer/issues/3337)). 1681 * Allow multiple listeners on `TimeBar` 1682 ([#3406](https://github.com/google/ExoPlayer/issues/3406)). 1683* New Leanback extension: Simplifies binding Exoplayer to Leanback UI 1684 components. 1685* Unit tests moved to Robolectric. 1686* Misc bugfixes. 1687 1688### r2.5.4 (2017-10-19) 1689 1690* Remove unnecessary media playlist fetches during playback of live HLS 1691 streams. 1692* Add the ability to inject a HLS playlist parser through `HlsMediaSource`. 1693* Fix potential `IndexOutOfBoundsException` when using `ImaMediaSource` 1694 ([#3334](https://github.com/google/ExoPlayer/issues/3334)). 1695* Fix an issue parsing MP4 content containing non-CENC sinf boxes. 1696* Fix memory leak when seeking with repeated periods. 1697* Fix playback position when `ExoPlayer.prepare` is called with 1698 `resetPosition` set to false. 1699* Ignore MP4 edit lists that seem invalid 1700 ([#3351](https://github.com/google/ExoPlayer/issues/3351)). 1701* Add extractor flag for ignoring all MP4 edit lists 1702 ([#3358](https://github.com/google/ExoPlayer/issues/3358)). 1703* Improve extensibility by exposing public constructors for 1704 `FrameworkMediaCrypto` and by making `DefaultDashChunkSource.getNextChunk` 1705 non-final. 1706 1707### r2.5.3 (2017-09-20) 1708 1709* IMA extension: Support skipping of skippable ads on AndroidTV and other 1710 non-touch devices 1711 ([#3258](https://github.com/google/ExoPlayer/issues/3258)). 1712* HLS: Fix broken WebVTT captions when PTS wraps around 1713 ([#2928](https://github.com/google/ExoPlayer/issues/2928)). 1714* Captions: Fix issues rendering CEA-608 captions 1715 ([#3250](https://github.com/google/ExoPlayer/issues/3250)). 1716* Workaround broken AAC decoders on Galaxy S6 1717 ([#3249](https://github.com/google/ExoPlayer/issues/3249)). 1718* Caching: Fix infinite loop when cache eviction fails 1719 ([#3260](https://github.com/google/ExoPlayer/issues/3260)). 1720* Caching: Force use of BouncyCastle on JellyBean to fix decryption issue 1721 ([#2755](https://github.com/google/ExoPlayer/issues/2755)). 1722 1723### r2.5.2 (2017-09-11) 1724 1725* IMA extension: Fix issue where ad playback could end prematurely for some 1726 content types ([#3180](https://github.com/google/ExoPlayer/issues/3180)). 1727* RTMP extension: Fix SIGABRT on fast RTMP stream restart 1728 ([#3156](https://github.com/google/ExoPlayer/issues/3156)). 1729* UI: Allow app to manually specify ad markers 1730 ([#3184](https://github.com/google/ExoPlayer/issues/3184)). 1731* DASH: Expose segment indices to subclasses of DefaultDashChunkSource 1732 ([#3037](https://github.com/google/ExoPlayer/issues/3037)). 1733* Captions: Added robustness against malformed WebVTT captions 1734 ([#3228](https://github.com/google/ExoPlayer/issues/3228)). 1735* DRM: Support forcing a specific license URL. 1736* Fix playback error when seeking in media loaded through content:// URIs 1737 ([#3216](https://github.com/google/ExoPlayer/issues/3216)). 1738* Fix issue playing MP4s in which the last atom specifies a size of zero 1739 ([#3191](https://github.com/google/ExoPlayer/issues/3191)). 1740* Workaround playback failures on some Xiaomi devices 1741 ([#3171](https://github.com/google/ExoPlayer/issues/3171)). 1742* Workaround SIGSEGV issue on some devices when setting and swapping surface 1743 for secure playbacks 1744 ([#3215](https://github.com/google/ExoPlayer/issues/3215)). 1745* Workaround for Nexus 7 issue when swapping output surface 1746 ([#3236](https://github.com/google/ExoPlayer/issues/3236)). 1747* Workaround for SimpleExoPlayerView's surface not being hidden properly 1748 ([#3160](https://github.com/google/ExoPlayer/issues/3160)). 1749 1750### r2.5.1 (2017-08-08) 1751 1752* Fix an issue that could cause the reported playback position to stop 1753 advancing in some cases. 1754* Fix an issue where a Surface could be released whilst still in use by the 1755 player. 1756 1757### r2.5.0 (2017-08-07) 1758 1759* IMA extension: Wraps the Google Interactive Media Ads (IMA) SDK to provide 1760 an easy and seamless way of incorporating display ads into ExoPlayer 1761 playbacks. You can read more about the IMA extension 1762 [here](https://medium.com/google-exoplayer/playing-ads-with-exoplayer-and-ima-868dfd767ea). 1763* MediaSession extension: Provides an easy way to connect ExoPlayer with 1764 MediaSessionCompat in the Android Support Library. 1765* RTMP extension: An extension for playing streams over RTMP. 1766* Build: Made it easier for application developers to depend on a local 1767 checkout of ExoPlayer. You can learn how to do this 1768 [here](https://medium.com/google-exoplayer/howto-2-depend-on-a-local-checkout-of-exoplayer-bcd7f8531720). 1769* Core playback improvements: 1770 * Eliminated re-buffering when changing audio and text track selections 1771 during playback of progressive streams 1772 ([#2926](https://github.com/google/ExoPlayer/issues/2926)). 1773 * New DynamicConcatenatingMediaSource class to support playback of dynamic 1774 playlists. 1775 * New ExoPlayer.setRepeatMode method for dynamic toggling of repeat mode 1776 during playback. Use of setRepeatMode should be preferred to 1777 LoopingMediaSource for most looping use cases. You can read more about 1778 setRepeatMode 1779 [here](https://medium.com/google-exoplayer/repeat-modes-in-exoplayer-19dd85f036d3). 1780 * Eliminated jank when switching video playback from one Surface to 1781 another on API level 23+ for unencrypted content, and on devices that 1782 support the EGL_EXT_protected_content OpenGL extension for protected 1783 content ([#677](https://github.com/google/ExoPlayer/issues/677)). 1784 * Enabled ExoPlayer instantiation on background threads without Loopers. 1785 Events from such players are delivered on the application's main thread. 1786* HLS improvements: 1787 * Optimized adaptive switches for playlists that specify the 1788 EXT-X-INDEPENDENT-SEGMENTS tag. 1789 * Optimized in-buffer seeking 1790 ([#551](https://github.com/google/ExoPlayer/issues/551)). 1791 * Eliminated re-buffering when changing audio and text track selections 1792 during playback, provided the new selection does not require switching 1793 to different renditions 1794 ([#2718](https://github.com/google/ExoPlayer/issues/2718)). 1795 * Exposed all media playlist tags in ExoPlayer's MediaPlaylist object. 1796* DASH: Support for seamless switching across streams in different 1797 AdaptationSet elements 1798 ([#2431](https://github.com/google/ExoPlayer/issues/2431)). 1799* DRM: Support for additional crypto schemes (cbc1, cbcs and cens) on API 1800 level 24+ ([#1989](https://github.com/google/ExoPlayer/issues/1989)). 1801* Captions: Initial support for SSA/ASS subtitles 1802 ([#889](https://github.com/google/ExoPlayer/issues/889)). 1803* AndroidTV: Fixed issue where tunneled video playback would not start on some 1804 devices ([#2985](https://github.com/google/ExoPlayer/issues/2985)). 1805* MPEG-TS: Fixed segmentation issue when parsing H262 1806 ([#2891](https://github.com/google/ExoPlayer/issues/2891)). 1807* Cronet extension: Support for a user-defined fallback if Cronet library is 1808 not present. 1809* Fix buffer too small IllegalStateException issue affecting some composite 1810 media playbacks ([#2900](https://github.com/google/ExoPlayer/issues/2900)). 1811* Misc bugfixes. 1812 1813### r2.4.4 (2017-07-19) 1814 1815* HLS/MPEG-TS: Some initial optimizations of MPEG-TS extractor performance 1816 ([#3040](https://github.com/google/ExoPlayer/issues/3040)). 1817* HLS: Fix propagation of format identifier for CEA-608 1818 ([#3033](https://github.com/google/ExoPlayer/issues/3033)). 1819* HLS: Detect playlist stuck and reset conditions 1820 ([#2872](https://github.com/google/ExoPlayer/issues/2872)). 1821* Video: Fix video dimension reporting on some devices 1822 ([#3007](https://github.com/google/ExoPlayer/issues/3007)). 1823 1824### r2.4.3 (2017-06-30) 1825 1826* Audio: Workaround custom audio decoders misreporting their maximum supported 1827 channel counts ([#2940](https://github.com/google/ExoPlayer/issues/2940)). 1828* Audio: Workaround for broken MediaTek raw decoder on some devices 1829 ([#2873](https://github.com/google/ExoPlayer/issues/2873)). 1830* Captions: Fix TTML captions appearing at the top of the screen 1831 ([#2953](https://github.com/google/ExoPlayer/issues/2953)). 1832* Captions: Fix handling of some DVB subtitles 1833 ([#2957](https://github.com/google/ExoPlayer/issues/2957)). 1834* Track selection: Fix setSelectionOverride(index, tracks, null) 1835 ([#2988](https://github.com/google/ExoPlayer/issues/2988)). 1836* GVR extension: Add support for mono input 1837 ([#2710](https://github.com/google/ExoPlayer/issues/2710)). 1838* FLAC extension: Fix failing build 1839 ([#2977](https://github.com/google/ExoPlayer/pull/2977)). 1840* Misc bugfixes. 1841 1842### r2.4.2 (2017-06-06) 1843 1844* Stability: Work around Nexus 10 reboot when playing certain content 1845 ([#2806](https://github.com/google/ExoPlayer/issues/2806)). 1846* MP3: Correctly treat MP3s with INFO headers as constant bitrate 1847 ([#2895](https://github.com/google/ExoPlayer/issues/2895)). 1848* HLS: Use average rather than peak bandwidth when available 1849 ([#2863](https://github.com/google/ExoPlayer/issues/2863)). 1850* SmoothStreaming: Fix timeline for live streams 1851 ([#2760](https://github.com/google/ExoPlayer/issues/2760)). 1852* UI: Fix DefaultTimeBar invalidation 1853 ([#2871](https://github.com/google/ExoPlayer/issues/2871)). 1854* Misc bugfixes. 1855 1856### r2.4.1 (2017-05-23) 1857 1858* Stability: Avoid OutOfMemoryError in extractors when parsing malformed media 1859 ([#2780](https://github.com/google/ExoPlayer/issues/2780)). 1860* Stability: Avoid native crash on Galaxy Nexus. Avoid unnecessarily large 1861 codec input buffer allocations on all devices 1862 ([#2607](https://github.com/google/ExoPlayer/issues/2607)). 1863* Variable speed playback: Fix interpolation for rate/pitch adjustment 1864 ([#2774](https://github.com/google/ExoPlayer/issues/2774)). 1865* HLS: Include EXT-X-DATERANGE tags in HlsMediaPlaylist. 1866* HLS: Don't expose CEA-608 track if CLOSED-CAPTIONS=NONE 1867 ([#2743](https://github.com/google/ExoPlayer/issues/2743)). 1868* HLS: Correctly propagate errors loading the media playlist 1869 ([#2623](https://github.com/google/ExoPlayer/issues/2623)). 1870* UI: DefaultTimeBar enhancements and bug fixes 1871 ([#2740](https://github.com/google/ExoPlayer/issues/2740)). 1872* Ogg: Fix failure to play some Ogg files 1873 ([#2782](https://github.com/google/ExoPlayer/issues/2782)). 1874* Captions: Don't select text tack with no language by default. 1875* Captions: TTML positioning fixes 1876 ([#2824](https://github.com/google/ExoPlayer/issues/2824)). 1877* Misc bugfixes. 1878 1879### r2.4.0 (2017-04-25) 1880 1881* New modular library structure. You can read more about depending on 1882 individual library modules 1883 [here](https://medium.com/google-exoplayer/exoplayers-new-modular-structure-a916c0874907). 1884* Variable speed playback support on API level 16+. You can read more about 1885 changing the playback speed 1886 [here](https://medium.com/google-exoplayer/variable-speed-playback-with-exoplayer-e6e6a71e0343) 1887 ([#26](https://github.com/google/ExoPlayer/issues/26)). 1888* New time bar view, including support for displaying ad break markers. 1889* Support DVB subtitles in MPEG-TS and MKV. 1890* Support adaptive playback for audio only DASH, HLS and SmoothStreaming 1891 ([#1975](https://github.com/google/ExoPlayer/issues/1975)). 1892* Support for setting extractor flags on DefaultExtractorsFactory 1893 ([#2657](https://github.com/google/ExoPlayer/issues/2657)). 1894* Support injecting custom renderers into SimpleExoPlayer using a new 1895 RenderersFactory interface. 1896* Correctly set ExoPlayer's internal thread priority to 1897 `THREAD_PRIORITY_AUDIO`. 1898* TX3G: Support styling and positioning. 1899* FLV: 1900 * Support MP3 in FLV. 1901 * Skip unhandled metadata rather than failing 1902 ([#2634](https://github.com/google/ExoPlayer/issues/2634)). 1903 * Fix potential OutOfMemory errors. 1904* ID3: Better handle malformed ID3 data 1905 ([#2604](https://github.com/google/ExoPlayer/issues/2604), 1906 [#2663](https://github.com/google/ExoPlayer/issues/2663)). 1907* FFmpeg extension: Fixed build instructions 1908 ([#2561](https://github.com/google/ExoPlayer/issues/2561)). 1909* VP9 extension: Reduced binary size. 1910* FLAC extension: Enabled 64 bit targets. 1911* Misc bugfixes. 1912 1913### r2.3.1 (2017-03-23) 1914 1915* Fix NPE enabling WebVTT subtitles in DASH streams 1916 ([#2596](https://github.com/google/ExoPlayer/issues/2596)). 1917* Fix skipping to keyframes when MediaCodecVideoRenderer is enabled but 1918 without a Surface 1919 ([#2575](https://github.com/google/ExoPlayer/issues/2575)). 1920* Minor fix for CEA-708 decoder 1921 ([#2595](https://github.com/google/ExoPlayer/issues/2595)). 1922 1923### r2.3.0 (2017-03-16) 1924 1925* GVR extension: Wraps the Google VR Audio SDK to provide spatial audio 1926 rendering. You can read more about the GVR extension 1927 [here](https://medium.com/google-exoplayer/spatial-audio-with-exoplayer-and-gvr-cecb00e9da5f#.xdjebjd7g). 1928* DASH improvements: 1929 * Support embedded CEA-608 closed captions 1930 ([#2362](https://github.com/google/ExoPlayer/issues/2362)). 1931 * Support embedded EMSG events 1932 ([#2176](https://github.com/google/ExoPlayer/issues/2176)). 1933 * Support mspr:pro manifest element 1934 ([#2386](https://github.com/google/ExoPlayer/issues/2386)). 1935 * Correct handling of empty segment indices at the start of live events 1936 ([#1865](https://github.com/google/ExoPlayer/issues/1865)). 1937* HLS improvements: 1938 * Respect initial track selection 1939 ([#2353](https://github.com/google/ExoPlayer/issues/2353)). 1940 * Reduced frequency of media playlist requests when playback position is 1941 close to the live edge 1942 ([#2548](https://github.com/google/ExoPlayer/issues/2548)). 1943 * Exposed the master playlist through ExoPlayer.getCurrentManifest() 1944 ([#2537](https://github.com/google/ExoPlayer/issues/2537)). 1945 * Support CLOSED-CAPTIONS #EXT-X-MEDIA type 1946 ([#341](https://github.com/google/ExoPlayer/issues/341)). 1947 * Fixed handling of negative values in #EXT-X-SUPPORT 1948 ([#2495](https://github.com/google/ExoPlayer/issues/2495)). 1949 * Fixed potential endless buffering state for streams with WebVTT 1950 subtitles ([#2424](https://github.com/google/ExoPlayer/issues/2424)). 1951* MPEG-TS improvements: 1952 * Support for multiple programs. 1953 * Support for multiple closed captions and caption service descriptors 1954 ([#2161](https://github.com/google/ExoPlayer/issues/2161)). 1955* MP3: Add `FLAG_ENABLE_CONSTANT_BITRATE_SEEKING` extractor option to enable 1956 constant bitrate seeking in MP3 files that would otherwise be unseekable 1957 ([#2445](https://github.com/google/ExoPlayer/issues/2445)). 1958* ID3: Better handle malformed ID3 data 1959 ([#2486](https://github.com/google/ExoPlayer/issues/2486)). 1960* Track selection: Added maxVideoBitrate parameter to DefaultTrackSelector. 1961* DRM: Add support for CENC ClearKey on API level 21+ 1962 ([#2361](https://github.com/google/ExoPlayer/issues/2361)). 1963* DRM: Support dynamic setting of key request headers 1964 ([#1924](https://github.com/google/ExoPlayer/issues/1924)). 1965* SmoothStreaming: Fixed handling of start_time placeholder 1966 ([#2447](https://github.com/google/ExoPlayer/issues/2447)). 1967* FLAC extension: Fix proguard configuration 1968 ([#2427](https://github.com/google/ExoPlayer/issues/2427)). 1969* Misc bugfixes. 1970 1971### r2.2.0 (2017-01-30) 1972 1973* Demo app: Automatic recovery from BehindLiveWindowException, plus improved 1974 handling of pausing and resuming live streams 1975 ([#2344](https://github.com/google/ExoPlayer/issues/2344)). 1976* AndroidTV: Added Support for tunneled video playback 1977 ([#1688](https://github.com/google/ExoPlayer/issues/1688)). 1978* DRM: Renamed StreamingDrmSessionManager to DefaultDrmSessionManager and 1979 added support for using offline licenses 1980 ([#876](https://github.com/google/ExoPlayer/issues/876)). 1981* DRM: Introduce OfflineLicenseHelper to help with offline license 1982 acquisition, renewal and release. 1983* UI: Updated player control assets. Added vector drawables for use on API 1984 level 21 and above. 1985* UI: Made player control seek bar work correctly with key events if focusable 1986 ([#2278](https://github.com/google/ExoPlayer/issues/2278)). 1987* HLS: Improved support for streams that use EXT-X-DISCONTINUITY without 1988 EXT-X-DISCONTINUITY-SEQUENCE 1989 ([#1789](https://github.com/google/ExoPlayer/issues/1789)). 1990* HLS: Support for EXT-X-START tag 1991 ([#1544](https://github.com/google/ExoPlayer/issues/1544)). 1992* HLS: Check #EXTM3U header is present when parsing the playlist. Fail 1993 gracefully if not 1994 ([#2301](https://github.com/google/ExoPlayer/issues/2301)). 1995* HLS: Fix memory leak 1996 ([#2319](https://github.com/google/ExoPlayer/issues/2319)). 1997* HLS: Fix non-seamless first adaptation where master playlist omits 1998 resolution tags ([#2096](https://github.com/google/ExoPlayer/issues/2096)). 1999* HLS: Fix handling of WebVTT subtitle renditions with non-standard segment 2000 file extensions ([#2025](https://github.com/google/ExoPlayer/issues/2025) 2001 and [#2355](https://github.com/google/ExoPlayer/issues/2355)). 2002* HLS: Better handle inconsistent HLS playlist update 2003 ([#2249](https://github.com/google/ExoPlayer/issues/2249)). 2004* DASH: Don't overflow when dealing with large segment numbers 2005 ([#2311](https://github.com/google/ExoPlayer/issues/2311)). 2006* DASH: Fix propagation of language from the manifest 2007 ([#2335](https://github.com/google/ExoPlayer/issues/2335)). 2008* SmoothStreaming: Work around "Offset to sample data was negative" failures 2009 ([#2292](https://github.com/google/ExoPlayer/issues/2292), 2010 [#2101](https://github.com/google/ExoPlayer/issues/2101) and 2011 [#1152](https://github.com/google/ExoPlayer/issues/1152)). 2012* MP3/ID3: Added support for parsing Chapter and URL link frames 2013 ([#2316](https://github.com/google/ExoPlayer/issues/2316)). 2014* MP3/ID3: Handle ID3 frames that end with empty text field 2015 ([#2309](https://github.com/google/ExoPlayer/issues/2309)). 2016* Added ClippingMediaSource for playing clipped portions of media 2017 ([#1988](https://github.com/google/ExoPlayer/issues/1988)). 2018* Added convenience methods to query whether the current window is dynamic and 2019 seekable ([#2320](https://github.com/google/ExoPlayer/issues/2320)). 2020* Support setting of default headers on HttpDataSource.Factory implementations 2021 ([#2166](https://github.com/google/ExoPlayer/issues/2166)). 2022* Fixed cache failures when using an encrypted cache content index. 2023* Fix visual artifacts when switching output surface 2024 ([#2093](https://github.com/google/ExoPlayer/issues/2093)). 2025* Fix gradle + proguard configurations. 2026* Fix player position when replacing the MediaSource 2027 ([#2369](https://github.com/google/ExoPlayer/issues/2369)). 2028* Misc bug fixes, including 2029 [#2330](https://github.com/google/ExoPlayer/issues/2330), 2030 [#2269](https://github.com/google/ExoPlayer/issues/2269), 2031 [#2252](https://github.com/google/ExoPlayer/issues/2252), 2032 [#2264](https://github.com/google/ExoPlayer/issues/2264) and 2033 [#2290](https://github.com/google/ExoPlayer/issues/2290). 2034 2035### r2.1.1 (2016-12-20) 2036 2037* Fix some subtitle types (e.g. WebVTT) being displayed out of sync 2038 ([#2208](https://github.com/google/ExoPlayer/issues/2208)). 2039* Fix incorrect position reporting for on-demand HLS media that includes 2040 EXT-X-PROGRAM-DATE-TIME tags 2041 ([#2224](https://github.com/google/ExoPlayer/issues/2224)). 2042* Fix issue where playbacks could get stuck in the initial buffering state if 2043 over 1MB of data needs to be read to initialize the playback. 2044 2045### r2.1.0 (2016-12-14) 2046 2047* HLS: Support for seeking in live streams 2048 ([#87](https://github.com/google/ExoPlayer/issues/87)). 2049* HLS: Improved support: 2050 * Support for EXT-X-PROGRAM-DATE-TIME 2051 ([#747](https://github.com/google/ExoPlayer/issues/747)). 2052 * Improved handling of sample timestamps and their alignment across 2053 variants and renditions. 2054 * Fix issue that could cause playbacks to get stuck in an endless initial 2055 buffering state. 2056 * Correctly propagate BehindLiveWindowException instead of 2057 IndexOutOfBoundsException exception 2058 ([#1695](https://github.com/google/ExoPlayer/issues/1695)). 2059* MP3/MP4: Support for ID3 metadata, including embedded album art 2060 ([#979](https://github.com/google/ExoPlayer/issues/979)). 2061* Improved customization of UI components. You can read about customization of 2062 ExoPlayer's UI components 2063 [here](https://medium.com/google-exoplayer/customizing-exoplayers-ui-components-728cf55ee07a#.9ewjg7avi). 2064* Robustness improvements when handling MediaSource timeline changes and 2065 MediaPeriod transitions. 2066* CEA-608: Support for caption styling and positioning. 2067* MPEG-TS: Improved support: 2068 * Support injection of custom TS payload readers. 2069 * Support injection of custom section payload readers. 2070 * Support SCTE-35 splice information messages. 2071 * Support multiple table sections in a single PSI section. 2072 * Fix NullPointerException when an unsupported stream type is encountered 2073 ([#2149](https://github.com/google/ExoPlayer/issues/2149)). 2074 * Avoid failure when expected ID3 header not found 2075 ([#1966](https://github.com/google/ExoPlayer/issues/1966)). 2076* Improvements to the upstream cache package. 2077 * Support caching of media segments for DASH, HLS and SmoothStreaming. 2078 Note that caching of manifest and playlist files is still not supported 2079 in the (normal) case where the corresponding responses are compressed. 2080 * Support caching for ExtractorMediaSource based playbacks. 2081* Improved flexibility of SimpleExoPlayer 2082 ([#2102](https://github.com/google/ExoPlayer/issues/2102)). 2083* Fix issue where only the audio of a video would play due to capability 2084 detection issues ([#2007](https://github.com/google/ExoPlayer/issues/2007), 2085 [#2034](https://github.com/google/ExoPlayer/issues/2034) and 2086 [#2157](https://github.com/google/ExoPlayer/issues/2157)). 2087* Fix issues that could cause ExtractorMediaSource based playbacks to get 2088 stuck buffering ([#1962](https://github.com/google/ExoPlayer/issues/1962)). 2089* Correctly set SimpleExoPlayerView surface aspect ratio when an active player 2090 is attached ([#2077](https://github.com/google/ExoPlayer/issues/2077)). 2091* OGG: Fix playback of short OGG files 2092 ([#1976](https://github.com/google/ExoPlayer/issues/1976)). 2093* MP4: Support `.mp3` tracks 2094 ([#2066](https://github.com/google/ExoPlayer/issues/2066)). 2095* SubRip: Don't fail playbacks if SubRip file contains negative timestamps 2096 ([#2145](https://github.com/google/ExoPlayer/issues/2145)). 2097* Misc bugfixes. 2098 2099### r2.0.4 (2016-10-20) 2100 2101* Fix crash on Jellybean devices when using playback controls 2102 ([#1965](https://github.com/google/ExoPlayer/issues/1965)). 2103 2104### r2.0.3 (2016-10-17) 2105 2106* Fixed NullPointerException in ExtractorMediaSource 2107 ([#1914](https://github.com/google/ExoPlayer/issues/1914)). 2108* Fixed NullPointerException in HlsMediaPeriod 2109 ([#1907](https://github.com/google/ExoPlayer/issues/1907)). 2110* Fixed memory leak in PlaybackControlView 2111 ([#1908](https://github.com/google/ExoPlayer/issues/1908)). 2112* Fixed strict mode violation when using 2113 SimpleExoPlayer.setVideoPlayerTextureView(). 2114* Fixed L3 Widevine provisioning 2115 ([#1925](https://github.com/google/ExoPlayer/issues/1925)). 2116* Fixed hiding of controls with use_controller="false" 2117 ([#1919](https://github.com/google/ExoPlayer/issues/1919)). 2118* Improvements to Cronet network stack extension. 2119* Misc bug fixes. 2120 2121### r2.0.2 (2016-10-06) 2122 2123* Fixes for MergingMediaSource and sideloaded subtitles. 2124 ([#1882](https://github.com/google/ExoPlayer/issues/1882), 2125 [#1854](https://github.com/google/ExoPlayer/issues/1854), 2126 [#1900](https://github.com/google/ExoPlayer/issues/1900)). 2127* Reduced effect of application code leaking player references 2128 ([#1855](https://github.com/google/ExoPlayer/issues/1855)). 2129* Initial support for fragmented MP4 in HLS. 2130* Misc bug fixes and minor features. 2131 2132### r2.0.1 (2016-09-30) 2133 2134* Fix playback of short duration content 2135 ([#1837](https://github.com/google/ExoPlayer/issues/1837)). 2136* Fix MergingMediaSource preparation issue 2137 ([#1853](https://github.com/google/ExoPlayer/issues/1853)). 2138* Fix live stream buffering (out of memory) issue 2139 ([#1825](https://github.com/google/ExoPlayer/issues/1825)). 2140 2141### r2.0.0 (2016-09-14) 2142 2143ExoPlayer 2.x is a major iteration of the library. It includes significant API 2144and architectural changes, new features and many bug fixes. You can read about 2145some of the motivations behind ExoPlayer 2.x 2146[here](https://medium.com/google-exoplayer/exoplayer-2-x-why-what-and-when-74fd9cb139#.am7h8nytm). 2147 2148* Root package name changed to `com.google.android.exoplayer2`. The library 2149 structure and class names have also been sanitized. Read more 2150 [here](https://medium.com/google-exoplayer/exoplayer-2-x-new-package-and-class-names-ef8e1d9ba96f#.lv8sd4nez). 2151* Key architectural changes: 2152 * Late binding between rendering and media source components. Allows the 2153 same rendering components to be re-used from one playback to another. 2154 Enables features such as gapless playback through playlists and DASH 2155 multi-period support. 2156 * Improved track selection design. More details can be found 2157 [here](https://medium.com/google-exoplayer/exoplayer-2-x-track-selection-2b62ff712cc9#.n00zo76b6). 2158 * LoadControl now used to control buffering and loading across all 2159 playback types. 2160 * Media source components given additional structure. A new MediaSource 2161 class has been introduced. MediaSources expose Timelines that describe 2162 the media they expose, and can consist of multiple MediaPeriods. This 2163 enables features such as seeking in live playbacks and DASH multi-period 2164 support. 2165 * Responsibility for loading the initial DASH/SmoothStreaming/HLS manifest 2166 is promoted to the corresponding MediaSource components and is no longer 2167 the application's responsibility. 2168 * Higher level abstractions such as SimpleExoPlayer have been added to the 2169 library. These make the library easier to use for common use cases. The 2170 demo app is halved in size as a result, whilst at the same time gaining 2171 more functionality. Read more 2172 [here](https://medium.com/google-exoplayer/exoplayer-2-x-improved-demo-app-d97171aaaaa1). 2173 * Enhanced library support for implementing audio extensions. Read more 2174 [here](https://medium.com/google-exoplayer/exoplayer-2-x-new-audio-features-cfb26c2883a#.ua75vu4s3). 2175 * Format and MediaFormat are replaced by a single Format class. 2176* Key new features: 2177 * Playlist support. Includes support for gapless playback between playlist 2178 items and consistent application of LoadControl and TrackSelector 2179 policies when transitioning between items 2180 ([#1270](https://github.com/google/ExoPlayer/issues/1270)). 2181 * Seeking in live playbacks for DASH and SmoothStreaming 2182 ([#291](https://github.com/google/ExoPlayer/issues/291)). 2183 * DASH multi-period support 2184 ([#557](https://github.com/google/ExoPlayer/issues/557)). 2185 * MediaSource composition allows MediaSources to be concatenated into a 2186 playlist, merged and looped. Read more 2187 [here](https://medium.com/google-exoplayer/exoplayer-2-x-mediasource-composition-6c285fcbca1f#.zfha8qupz). 2188 * Looping support (see above) 2189 ([#490](https://github.com/google/ExoPlayer/issues/490)). 2190 * Ability to query information about all tracks in a piece of media 2191 (including those not supported by the device) 2192 ([#1121](https://github.com/google/ExoPlayer/issues/1121)). 2193 * Improved player controls. 2194 * Support for PSSH in fMP4 moof atoms 2195 ([#1143](https://github.com/google/ExoPlayer/issues/1143)). 2196 * Support for Opus in Ogg 2197 ([#1447](https://github.com/google/ExoPlayer/issues/1447)). 2198 * CacheDataSource support for standalone media file playbacks (mp3, mp4 2199 etc). 2200 * FFMPEG extension (for audio only). 2201* Key bug fixes: 2202 * Removed unnecessary secondary requests when playing standalone media 2203 files ([#1041](https://github.com/google/ExoPlayer/issues/1041)). 2204 * Fixed playback of video only (i.e. no audio) live streams 2205 ([#758](https://github.com/google/ExoPlayer/issues/758)). 2206 * Fixed silent failure when media buffer is too small 2207 ([#583](https://github.com/google/ExoPlayer/issues/583)). 2208 * Suppressed "Sending message to a Handler on a dead thread" warnings 2209 ([#426](https://github.com/google/ExoPlayer/issues/426)). 2210 2211# Legacy release notes 2212 2213Note: Since ExoPlayer V1 is still being maintained alongside V2, there is some 2214overlap between these notes and the notes above. r2.0.0 followed from r1.5.11, 2215and hence it can be assumed that all changes in r1.5.11 and earlier are included 2216in all V2 releases. This cannot be assumed for changes in r1.5.12 and later, 2217however it can be assumed that all such changes are included in the most recent 2218V2 release. 2219 2220### r1.5.16 2221 2222* VP9 extension: Reduced binary size. 2223* FLAC extension: Enabled 64 bit targets and fixed proguard config. 2224* Misc bugfixes. 2225 2226### r1.5.15 2227 2228* SmoothStreaming: Fixed handling of start_time placeholder 2229 ([#2447](https://github.com/google/ExoPlayer/issues/2447)). 2230* Misc bugfixes. 2231 2232### r1.5.14 2233 2234* Fixed cache failures when using an encrypted cache content index. 2235* SmoothStreaming: Work around "Offset to sample data was negative" failures 2236 ([#2292](https://github.com/google/ExoPlayer/issues/2292), 2237 [#2101](https://github.com/google/ExoPlayer/issues/2101) and 2238 [#1152](https://github.com/google/ExoPlayer/issues/1152)). 2239 2240### r1.5.13 2241 2242* Improvements to the upstream cache package. 2243* MP4: Support `.mp3` tracks 2244 ([#2066](https://github.com/google/ExoPlayer/issues/2066)). 2245* SubRip: Don't fail playbacks if SubRip file contains negative timestamps 2246 ([#2145](https://github.com/google/ExoPlayer/issues/2145)). 2247* MPEG-TS: Avoid failure when expected ID3 header not found 2248 ([#1966](https://github.com/google/ExoPlayer/issues/1966)). 2249* Misc bugfixes. 2250 2251### r1.5.12 2252 2253* Improvements to Cronet network stack extension. 2254* Fix bug in demo app introduced in r1.5.11 that caused L3 Widevine 2255 provisioning requests to fail. 2256* Misc bugfixes. 2257 2258### r1.5.11 2259 2260* Cronet network stack extension. 2261* HLS: Fix propagation of language for alternative audio renditions 2262 ([#1784](https://github.com/google/ExoPlayer/issues/1784)). 2263* WebM: Support for subsample encryption. 2264* ID3: Fix EOS detection for 2-byte encodings 2265 ([#1774](https://github.com/google/ExoPlayer/issues/1774)). 2266* MPEG-TS: Support multiple tracks of the same type. 2267* MPEG-TS: Work toward robust handling of stream corruption. 2268* Fix ContentDataSource failures triggered by garbage collector 2269 ([#1759](https://github.com/google/ExoPlayer/issues/1759)). 2270 2271### r1.5.10 2272 2273* HLS: Stability fixes. 2274* MP4: Support for stz2 Atoms. 2275* Enable 4K format selection on Sony AndroidTV + nVidia SHIELD. 2276* TX3G caption fixes. 2277 2278### r1.5.9 2279 2280* MP4: Fixed incorrect sniffing in some cases (#1523). 2281* MP4: Improved file compatibility (#1567). 2282* ID3: Support for TIT2 and APIC frames. 2283* Fixed querying of platform decoders on some devices. 2284* Misc bug fixes. 2285 2286### r1.5.8 2287 2288* HLS: Fix handling of HTTP redirects. 2289* Audio: Minor adjustment to improve A/V sync. 2290* OGG: Support FLAC in OGG. 2291* TTML: Support regions. 2292* WAV/PCM: Support 8, 24 and 32-bit WAV and PCM audio. 2293* Misc bug fixes and performance optimizations. 2294 2295### r1.5.7 2296 2297* OGG: Support added for OGG. 2298* FLAC: Support for FLAC extraction and playback (via an extension). 2299* HLS: Multiple audio track support (via Renditions). 2300* FMP4: Support multiple tracks in fragmented MP4 (not applicable to 2301 DASH/SmoothStreaming). 2302* WAV: Support for 16-bit WAV files. 2303* MKV: Support non-square pixel formats. 2304* Misc bug fixes. 2305 2306### r1.5.6 2307 2308* MP3: Fix mono streams playing at 2x speed on some MediaTek based devices 2309 (#801). 2310* MP3: Fix playback of some streams when stream length is unknown. 2311* ID3: Support multiple frames of the same type in a single tag. 2312* CEA-608: Correctly handle repeated control characters, fixing an issue in 2313 which captions would immediately disappear. 2314* AVC3: Fix decoder failures on some MediaTek devices in the case where the 2315 first buffer fed to the decoder does not start with SPS/PPS NAL units. 2316* Misc bug fixes. 2317 2318### r1.5.5 2319 2320* DASH: Enable MP4 embedded WebVTT playback (#1185) 2321* HLS: Fix handling of extended ID3 tags in MPEG-TS (#1181) 2322* MP3: Fix incorrect position calculation in VBRI header (#1197) 2323* Fix issue seeking backward using SingleSampleSource (#1193) 2324 2325### r1.5.4 2326 2327* HLS: Support for variant selection and WebVtt subtitles. 2328* MP4: Support for embedded WebVtt. 2329* Improved device compatibility. 2330* Fix for resource leak (Issue #1066). 2331* Misc bug fixes + minor features. 2332 2333### r1.5.3 2334 2335* Support for FLV (without seeking). 2336* MP4: Fix for playback of media containing basic edit lists. 2337* QuickTime: Fix parsing of QuickTime style audio sample entry. 2338* HLS: Add H262 support for devices that have an H262 decoder. 2339* Allow AudioTrack PlaybackParams (e.g. speed/pitch) on API level 23+. 2340* Correctly detect 4K displays on API level 23+. 2341* Misc bug fixes. 2342 2343### r1.5.2 2344 2345* MPEG-TS/HLS: Fix frame drops playing H265 video. 2346* SmoothStreaming: Fix parsing of ProtectionHeader. 2347 2348### r1.5.1 2349 2350* Enable smooth frame release by default. 2351* Added OkHttpDataSource extension. 2352* AndroidTV: Correctly detect 4K display size on Bravia devices. 2353* FMP4: Handle non-sample data in mdat boxes. 2354* TTML: Fix parsing of some colors on Jellybean. 2355* SmoothStreaming: Ignore tfdt boxes. 2356* Misc bug fixes. 2357 2358### r1.5.0 2359 2360* Multi-track support. 2361* DASH: Limited support for multi-period manifests. 2362* HLS: Smoother format adaptation. 2363* HLS: Support for MP3 media segments. 2364* TTML: Support for most embedded TTML styling. 2365* WebVTT: Enhanced positioning support. 2366* Initial playback tests. 2367* Misc bug fixes. 2368 2369### r1.4.2 2370 2371* Implemented automatic format detection for regular container formats. 2372* Added UdpDataSource for connecting to multicast streams. 2373* Improved robustness for MP4 playbacks. 2374* Misc bug fixes. 2375 2376### r1.4.1 2377 2378* HLS: Fix premature playback failures that could occur in some cases. 2379 2380### r1.4.0 2381 2382* Support for extracting Matroska streams (implemented by WebmExtractor). 2383* Support for tx3g captions in MP4 streams. 2384* Support for H.265 in MPEG-TS streams on supported devices. 2385* HLS: Added support for MPEG audio (e.g. MP3) in TS media segments. 2386* HLS: Improved robustness against missing chunks and variants. 2387* MP4: Added support for embedded MPEG audio (e.g. MP3). 2388* TTML: Improved handling of whitespace. 2389* DASH: Support Mpd.Location element. 2390* Add option to TsExtractor to allow non-IDR keyframes. 2391* Added MulticastDataSource for connecting to multicast streams. 2392* (WorkInProgress) - First steps to supporting seeking in DASH DVR window. 2393* (WorkInProgress) - First steps to supporting styled + positioned subtitles. 2394* Misc bug fixes. 2395 2396### r1.3.3 2397 2398* HLS: Fix failure when playing HLS AAC streams. 2399* Misc bug fixes. 2400 2401### r1.3.2 2402 2403* DataSource improvements: `DefaultUriDataSource` now handles http://, 2404 https://, file://, asset:// and content:// URIs automatically. It also 2405 handles file:///android_asset/* URIs, and file paths like /path/to/media.mp4 2406 where the scheme is omitted. 2407* HLS: Fix for some ID3 events being dropped. 2408* HLS: Correctly handle 0x0 and floating point RESOLUTION tags. 2409* Mp3Extractor: robustness improvements. 2410 2411### r1.3.1 2412 2413* No notes provided. 2414