|
1 | 1 | # Release notes
|
2 | 2 |
|
| 3 | +### 1.0.0-alpha02 (2022-03-09) |
| 4 | + |
| 5 | +* Core Library: |
| 6 | + * Add protected method `DefaultRenderersFactory.getCodecAdapterFactory()` |
| 7 | + so that subclasses of `DefaultRenderersFactory` that override |
| 8 | + `buildVideoRenderers()` or `buildAudioRenderers()` can access the codec |
| 9 | + adapter factory and pass it to `MediaCodecRenderer` instances they |
| 10 | + create. |
| 11 | + * Propagate ICY header fields `name` and `genre` to |
| 12 | + `MediaMetadata.station` and `MediaMetadata.genre` respectively so that |
| 13 | + they reach the app via `Player.Listener.onMediaMetadataChanged()` |
| 14 | + ([#9677](https://github.com/google/ExoPlayer/issues/9677)). |
| 15 | + * Remove null keys from `DefaultHttpDataSource#getResponseHeaders`. |
| 16 | + * Sleep and retry when creating a `MediaCodec` instance fails. This works |
| 17 | + around an issue that occurs on some devices when switching a surface |
| 18 | + from a secure codec to another codec |
| 19 | + ([#8696](https://github.com/google/ExoPlayer/issues/8696)). |
| 20 | + * Add `MediaCodecAdapter.getMetrics()` to allow users obtain metrics data |
| 21 | + from `MediaCodec`. |
| 22 | + ([#9766](https://github.com/google/ExoPlayer/issues/9766)). |
| 23 | + * Fix Maven dependency resolution |
| 24 | + ([#8353](https://github.com/google/ExoPlayer/issues/8353)). |
| 25 | + * Disable automatic speed adjustment for live streams that neither have |
| 26 | + low-latency features nor a user request setting the speed |
| 27 | + ([#9329](https://github.com/google/ExoPlayer/issues/9329)). |
| 28 | + * Rename `DecoderCounters#inputBufferCount` to `queuedInputBufferCount`. |
| 29 | + * Make `SimpleExoPlayer.renderers` private. Renderers can be accessed via |
| 30 | + `ExoPlayer.getRenderer`. |
| 31 | + * Updated some `AnalyticsListener.EventFlags` constant values to match |
| 32 | + values in `Player.EventFlags`. |
| 33 | + * Split `AnalyticsCollector` into an interface and default implementation |
| 34 | + to allow it to be stripped by R8 if an app doesn't need it. |
| 35 | +* Track selection: |
| 36 | + * Support preferred video role flags in track selection |
| 37 | + ([#9402](https://github.com/google/ExoPlayer/issues/9402)). |
| 38 | + * Update video track selection logic to take preferred MIME types and role |
| 39 | + flags into account when selecting multiple video tracks for adaptation |
| 40 | + ([#9519](https://github.com/google/ExoPlayer/issues/9519)). |
| 41 | + * Update video and audio track selection logic to only choose formats for |
| 42 | + adaptive selections that have the same level of decoder and hardware |
| 43 | + support ([#9565](https://github.com/google/ExoPlayer/issues/9565)). |
| 44 | + * Update video track selection logic to prefer more efficient codecs if |
| 45 | + multiple codecs are supported by primary, hardware-accelerated decoders |
| 46 | + ([#4835](https://github.com/google/ExoPlayer/issues/4835)). |
| 47 | + * Prefer audio content preferences (for example, the "default" audio track |
| 48 | + or a track matching the system locale language) over technical track |
| 49 | + selection constraints (for example, preferred MIME type, or maximum |
| 50 | + channel count). |
| 51 | + * Fix track selection issue where overriding one track group did not |
| 52 | + disable other track groups of the same type |
| 53 | + ([#9675](https://github.com/google/ExoPlayer/issues/9675)). |
| 54 | + * Fix track selection issue where a mixture of non-empty and empty track |
| 55 | + overrides is not applied correctly |
| 56 | + ([#9649](https://github.com/google/ExoPlayer/issues/9649)). |
| 57 | + * Prohibit duplicate `TrackGroup`s in a `TrackGroupArray`. `TrackGroup`s |
| 58 | + can always be made distinguishable by setting an `id` in the |
| 59 | + `TrackGroup` constructor. This fixes a crash when resuming playback |
| 60 | + after backgrounding the app with an active track override |
| 61 | + ([#9718](https://github.com/google/ExoPlayer/issues/9718)). |
| 62 | + * Amend logic in `AdaptiveTrackSelection` to allow a quality increase |
| 63 | + under sufficient network bandwidth even if playback is very close to the |
| 64 | + live edge ([#9784](https://github.com/google/ExoPlayer/issues/9784)). |
| 65 | +* Video: |
| 66 | + * Fix decoder fallback logic for Dolby Vision |
| 67 | + to use a compatible H264/H265 decoder if needed. |
| 68 | +* Audio: |
| 69 | + * Fix decoder fallback logic for Dolby Atmos (E-AC3-JOC) |
| 70 | + to use a compatible E-AC3 decoder if needed. |
| 71 | + * Change `AudioCapabilities` APIs to require passing explicitly |
| 72 | + `AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES` instead of `null`. |
| 73 | + * Allow customization of the `AudioTrack` buffer size calculation by |
| 74 | + injecting an `AudioTrackBufferSizeProvider` to `DefaultAudioSink`. |
| 75 | + ([#8891](https://github.com/google/ExoPlayer/issues/8891)). |
| 76 | + * Retry `AudioTrack` creation if the requested buffer size was > 1MB. |
| 77 | + ([#9712](https://github.com/google/ExoPlayer/issues/9712)). |
| 78 | +* Extractors: |
| 79 | + * WAV: Add support for RF64 streams |
| 80 | + ([#9543](https://github.com/google/ExoPlayer/issues/9543)). |
| 81 | + * Fix incorrect parsing of H.265 SPS NAL units |
| 82 | + ([#9719](https://github.com/google/ExoPlayer/issues/9719)). |
| 83 | + * Parse Vorbis Comments (including `METADATA_BLOCK_PICTURE`) in Ogg Opus |
| 84 | + and Ogg Vorbis files. |
| 85 | +* Text: |
| 86 | + * Add a `MediaItem.SubtitleConfiguration.id` field which is propagated to |
| 87 | + the `Format.id` field of the subtitle track created from the |
| 88 | + configuration |
| 89 | + ([#9673](https://github.com/google/ExoPlayer/issues/9673)). |
| 90 | + * Add basic support for WebVTT subtitles in Matroska containers |
| 91 | + ([#9886](https://github.com/google/ExoPlayer/issues/9886)). |
| 92 | + * Prevent `Cea708Decoder` from reading more than the declared size of a |
| 93 | + service block. |
| 94 | +* DRM: |
| 95 | + * Remove `playbackLooper` from `DrmSessionManager.(pre)acquireSession`. |
| 96 | + When a `DrmSessionManager` is used by an app in a custom `MediaSource`, |
| 97 | + the `playbackLooper` needs to be passed to `DrmSessionManager.setPlayer` |
| 98 | + instead. |
| 99 | +* Ad playback / IMA: |
| 100 | + * Add support for |
| 101 | + [IMA Dynamic Ad Insertion (DAI)](https://support.google.com/admanager/answer/6147120) |
| 102 | + ([#8213](https://github.com/google/ExoPlayer/issues/8213)). |
| 103 | + * Add a method to `AdPlaybackState` to allow resetting an ad group so that |
| 104 | + it can be played again |
| 105 | + ([#9615](https://github.com/google/ExoPlayer/issues/9615)). |
| 106 | + * Enforce playback speed of 1.0 during ad playback |
| 107 | + ([#9018](https://github.com/google/ExoPlayer/issues/9018)). |
| 108 | + * Fix issue where an ad group that failed to load caused an immediate |
| 109 | + playback reset |
| 110 | + ([#9929](https://github.com/google/ExoPlayer/issues/9929)). |
| 111 | +* UI: |
| 112 | + * Fix the color of the numbers in `StyledPlayerView` rewind and |
| 113 | + fastforward buttons when using certain themes |
| 114 | + ([#9765](https://github.com/google/ExoPlayer/issues/9765)). |
| 115 | + * Correctly translate playback speed strings |
| 116 | + ([#9811](https://github.com/google/ExoPlayer/issues/9811)). |
| 117 | +* DASH: |
| 118 | + * Add parsed essential and supplemental properties to the `Representation` |
| 119 | + ([#9579](https://github.com/google/ExoPlayer/issues/9579)). |
| 120 | + * Support the `forced-subtitle` track role |
| 121 | + ([#9727](https://github.com/google/ExoPlayer/issues/9727)). |
| 122 | + * Stop interpreting the `main` track role as `C.SELECTION_FLAG_DEFAULT`. |
| 123 | + * Fix base URL exclusion logic for manifests that do not declare the DVB namespace ([#9856](https://github.com/google/ExoPlayer/issues/9856)). |
| 124 | + * Support relative `MPD.Location` URLs |
| 125 | + ([#9939](https://github.com/google/ExoPlayer/issues/9939)). |
| 126 | +* HLS: |
| 127 | + * Correctly populate `Format.label` for audio only HLS streams |
| 128 | + ([#9608](https://github.com/google/ExoPlayer/issues/9608)). |
| 129 | + * Use chunkless preparation by default to improve start up time. If your |
| 130 | + renditions contain muxed closed-caption tracks that are **not** declared |
| 131 | + in the master playlist, you should add them to the master playlist to be |
| 132 | + available for playback, or turn off chunkless preparation with |
| 133 | + `HlsMediaSource.Factory.setAllowChunklessPreparation(false)`. |
| 134 | + * Support key-frame accurate seeking in HLS |
| 135 | + ([#2882](https://github.com/google/ExoPlayer/issues/2882)). |
| 136 | + * Correctly populate `Format.label` for audio only HLS streams |
| 137 | + ([#9608](https://github.com/google/ExoPlayer/issues/9608)). |
| 138 | +* RTSP: |
| 139 | + * Provide a client API to override the `SocketFactory` used for any server |
| 140 | + connection ([#9606](https://github.com/google/ExoPlayer/pull/9606)). |
| 141 | + * Prefer DIGEST authentication method over BASIC if both are present |
| 142 | + ([#9800](https://github.com/google/ExoPlayer/issues/9800)). |
| 143 | + * Handle when RTSP track timing is not available |
| 144 | + ([#9775](https://github.com/google/ExoPlayer/issues/9775)). |
| 145 | + * Ignore invalid RTP-Info header values |
| 146 | + ([#9619](https://github.com/google/ExoPlayer/issues/9619)). |
| 147 | +* Transformer: |
| 148 | + * Increase required min API version to 21. |
| 149 | + * `TransformationException` is now used to describe errors that occur |
| 150 | + during a transformation. |
| 151 | + * Add `TransformationRequest` for specifying the transformation options. |
| 152 | + * Allow multiple listeners to be registered. |
| 153 | + * Fix Transformer being stuck when the codec output is partially read. |
| 154 | + * Fix potential NPE in `Transformer.getProgress` when releasing the muxer |
| 155 | + throws. |
| 156 | + * Add a demo app for applying transformations. |
| 157 | + * The transformer module is no longer included by depending on |
| 158 | + `com.google.android.exoplayer:exoplayer`. To continue using transformer, |
| 159 | + add an additional dependency on |
| 160 | + `com.google.android.exoplayer:exoplayer-transformer`. |
| 161 | +* MediaSession extension: |
| 162 | + * By default, `MediaSessionConnector` now clears the playlist on stop. Apps that want the playlist to be retained can call `setClearMediaItemsOnStop(false)` on the connector. |
| 163 | +* Cast extension: |
| 164 | + * Fix bug that prevented `CastPlayer` from calling `onIsPlayingChanged` |
| 165 | + correctly ([#9792](https://github.com/google/ExoPlayer/issues/9792)). |
| 166 | + * Support audio metadata including artwork with |
| 167 | + `DefaultMediaItemConverter` |
| 168 | + ([#9663](https://github.com/google/ExoPlayer/issues/9663)). |
| 169 | +* FFmpeg extension: |
| 170 | + * Make `build_ffmpeg.sh` depend on LLVM's bin utils instead of GNU's |
| 171 | + ([#9933](https://github.com/google/ExoPlayer/issues/9933)). |
| 172 | +* Android 12 compatibility: |
| 173 | + * Upgrade the Cast extension to depend on |
| 174 | + `com.google.android.gms:play-services-cast-framework:20.1.0`. Earlier |
| 175 | + versions of `play-services-cast-framework` are not compatible with apps |
| 176 | + targeting Android 12, and will crash with an `IllegalArgumentException` |
| 177 | + when creating `PendingIntent`s |
| 178 | + ([#9528](https://github.com/google/ExoPlayer/issues/9528)). |
| 179 | +* Remove deprecated symbols: |
| 180 | + * Remove `Player.EventLister`. Use `Player.Listener` instead. |
| 181 | + * Remove `MediaSourceFactory#setDrmSessionManager`, |
| 182 | + `MediaSourceFactory#setDrmHttpDataSourceFactory`, and |
| 183 | + `MediaSourceFactory#setDrmUserAgent`. Use |
| 184 | + `MediaSourceFactory#setDrmSessionManagerProvider` instead. |
| 185 | + * Remove `MediaSourceFactory#setStreamKeys`. Use |
| 186 | + `MediaItem.Builder#setStreamKeys` instead. |
| 187 | + * Remove `MediaSourceFactory#createMediaSource(Uri)`. Use |
| 188 | + `MediaSourceFactory#createMediaSource(MediaItem)` instead. |
| 189 | + * Remove `setTag` from `DashMediaSource`, `HlsMediaSource` and |
| 190 | + `SsMediaSource`. Use `MediaItem.Builder#setTag` instead. |
| 191 | + * Remove `DashMediaSource#setLivePresentationDelayMs(long, boolean)`. Use |
| 192 | + `MediaItem.Builder#setLiveConfiguration` and |
| 193 | + `MediaItem.LiveConfiguration.Builder#setTargetOffsetMs` to override the |
| 194 | + manifest, or `DashMediaSource#setFallbackTargetLiveOffsetMs` to provide |
| 195 | + a fallback value. |
| 196 | + * Remove `(Simple)ExoPlayer.setThrowsWhenUsingWrongThread`. Opting out of |
| 197 | + the thread enforcement is no longer possible. |
| 198 | + * Remove `ActionFile` and `ActionFileUpgradeUtil`. Use ExoPlayer 2.16.1 or |
| 199 | + before to use `ActionFileUpgradeUtil` to merge legacy action files into |
| 200 | + `DefaultDownloadIndex`. |
| 201 | + * Remove `ProgressiveMediaSource#setExtractorsFactory`. Use |
| 202 | + `ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)` |
| 203 | + constructor instead. |
| 204 | + * Remove `ProgressiveMediaSource.Factory#setTag` and, and |
| 205 | + `ProgressiveMediaSource.Factory#setCustomCacheKey`. Use |
| 206 | + `MediaItem.Builder#setTag` and `MediaItem.Builder#setCustomCacheKey` |
| 207 | + instead. |
| 208 | + * Remove `DefaultRenderersFactory(Context, @ExtensionRendererMode int)` |
| 209 | + and `DefaultRenderersFactory(Context, @ExtensionRendererMode int, long)` |
| 210 | + constructors. Use the `DefaultRenderersFactory(Context)` constructor, |
| 211 | + `DefaultRenderersFactory#setExtensionRendererMode`, and |
| 212 | + `DefaultRenderersFactory#setAllowedVideoJoiningTimeMs` instead. |
| 213 | + * Remove all public `CronetDataSource` constructors. Use |
| 214 | + `CronetDataSource.Factory` instead. |
| 215 | +* Change the following `IntDefs` to `@Target(TYPE_USE)` only. This may break |
| 216 | + the compilation of usages in Kotlin, which can be fixed by moving the |
| 217 | + annotation to annotate the type (`Int`). |
| 218 | + * `@AacAudioObjectType` |
| 219 | + * `@Ac3Util.SyncFrameInfo.StreamType` |
| 220 | + * `@AdLoadException.Type` |
| 221 | + * `@AdtsExtractor.Flags` |
| 222 | + * `@AmrExtractor.Flags` |
| 223 | + * `@AspectRatioFrameLayout.ResizeMode` |
| 224 | + * `@AudioFocusManager.PlayerCommand` |
| 225 | + * `@AudioSink.SinkFormatSupport` |
| 226 | + * `@BinarySearchSeeker.TimestampSearchResult.Type` |
| 227 | + * `@BufferReplacementMode` |
| 228 | + * `@C.BufferFlags` |
| 229 | + * `@C.ColorRange` |
| 230 | + * `@C.ColorSpace` |
| 231 | + * `@C.ColorTransfer` |
| 232 | + * `@C.CryptoMode` |
| 233 | + * `@C.Encoding` |
| 234 | + * `@C.PcmEncoding` |
| 235 | + * `@C.Projection` |
| 236 | + * `@C.SelectionReason` |
| 237 | + * `@C.StereoMode` |
| 238 | + * `@C.VideoOutputMode` |
| 239 | + * `@CacheDataSource.Flags` |
| 240 | + * `@CaptionStyleCompat.EdgeType` |
| 241 | + * `@DataSpec.Flags` |
| 242 | + * `@DataSpec.HttpMethods` |
| 243 | + * `@DecoderDiscardReasons` |
| 244 | + * `@DecoderReuseResult` |
| 245 | + * `@DefaultAudioSink.OutputMode` |
| 246 | + * `@DefaultDrmSessionManager.Mode` |
| 247 | + * `@DefaultTrackSelector.SelectionEligibility` |
| 248 | + * `@DefaultTsPayloadReaderFactory.Flags` |
| 249 | + * `@EGLSurfaceTexture.SecureMode` |
| 250 | + * `@EbmlProcessor.ElementType` |
| 251 | + * `@ExoMediaDrm.KeyRequest.RequestType` |
| 252 | + * `@ExtensionRendererMode` |
| 253 | + * `@Extractor.ReadResult` |
| 254 | + * `@FileTypes.Type` |
| 255 | + * `@FlacExtractor.Flags` (in `com.google.android.exoplayer2.ext.flac` |
| 256 | + package) |
| 257 | + * `@FlacExtractor.Flags` (in |
| 258 | + `com.google.android.exoplayer2.extractor.flac` package) |
| 259 | + * `@FragmentedMp4Extractor.Flags` |
| 260 | + * `@HlsMediaPlaylist.PlaylistType` |
| 261 | + * `@HttpDataSourceException.Type` |
| 262 | + * `@IllegalClippingException.Reason` |
| 263 | + * `@IllegalMergeException.Reason` |
| 264 | + * `@LoadErrorHandlingPolicy.FallbackType` |
| 265 | + * `@MatroskaExtractor.Flags` |
| 266 | + * `@Mp3Extractor.Flags` |
| 267 | + * `@Mp4Extractor.Flags` |
| 268 | + * `@NotificationUtil.Importance` |
| 269 | + * `@PlaybackException.FieldNumber` |
| 270 | + * `@PlayerNotificationManager.Priority` |
| 271 | + * `@PlayerNotificationManager.Visibility` |
| 272 | + * `@PlayerView.ShowBuffering` |
| 273 | + * `@Renderer.State` |
| 274 | + * `@RendererCapabilities.AdaptiveSupport` |
| 275 | + * `@RendererCapabilities.Capabilities` |
| 276 | + * `@RendererCapabilities.DecoderSupport` |
| 277 | + * `@RendererCapabilities.FormatSupport` |
| 278 | + * `@RendererCapabilities.HardwareAccelerationSupport` |
| 279 | + * `@RendererCapabilities.TunnelingSupport` |
| 280 | + * `@SampleStream.ReadDataResult` |
| 281 | + * `@SampleStream.ReadFlags` |
| 282 | + * `@StyledPlayerView.ShowBuffering` |
| 283 | + * `@SubtitleView.ViewType` |
| 284 | + * `@TextAnnotation.Position` |
| 285 | + * `@TextEmphasisSpan.MarkFill` |
| 286 | + * `@TextEmphasisSpan.MarkShape` |
| 287 | + * `@Track.Transformation` |
| 288 | + * `@TrackOutput.SampleDataPart` |
| 289 | + * `@Transformer.ProgressState` |
| 290 | + * `@TsExtractor.Mode` |
| 291 | + * `@TsPayloadReader.Flags` |
| 292 | + * `@WebvttCssStyle.FontSizeUnit` |
| 293 | + |
3 | 294 | ### 1.0.0-alpha01
|
4 | 295 |
|
5 | 296 | AndroidX Media is the new home for media support libraries, including ExoPlayer.
|
|
0 commit comments