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