|
4 | 4 |
|
5 | 5 | * Common Library:
|
6 | 6 | * ExoPlayer:
|
| 7 | + * Add `ExoPlayer.setScrubbingModeEnabled(boolean)` method. This optimizes |
| 8 | + the player for many frequent seeks (for example, from a user dragging a |
| 9 | + scrubber bar around). The behavior of scrubbing mode can be customized |
| 10 | + with `setScrubbingModeParameters(..)` on `ExoPlayer` and |
| 11 | + `ExoPlayer.Builder`. |
| 12 | + * Fix bug where prepare errors in the content of `AdsMediaSource` may be |
| 13 | + never reported ([#2337](https://github.com/androidx/media/issues/2337)). |
| 14 | + * Fix memory leak in `MergingMediaSource`, for example used when |
| 15 | + sideloading subtitles |
| 16 | + ([#2338](https://github.com/androidx/media/issues/2338)). |
7 | 17 | * Transformer:
|
| 18 | + * Filling an initial gap (added via `addGap()`) with silent audio now |
| 19 | + requires explicitly setting `experimentalSetForceAudioTrack(true)` in |
| 20 | + `EditedMediaItemSequence.Builder`. If the gap is in the middle of the |
| 21 | + sequence, then this flag is not required. |
8 | 22 | * Track Selection:
|
9 | 23 | * Extractors:
|
10 | 24 | * MP3: Use duration and data size from unseekable Xing, VBRI and similar
|
|
18 | 32 | * DataSource:
|
19 | 33 | * Audio:
|
20 | 34 | * Allow constant power upmixing/downmixing in DefaultAudioMixer.
|
| 35 | + * Make `ChannelMappingAudioProcessor`, `TrimmingAudioProcessor` and |
| 36 | + `ToFloatPcmAudioProcessor` public |
| 37 | + ([#2339](https://github.com/androidx/media/issues/2339)). |
21 | 38 | * Video:
|
22 | 39 | * Add experimental `ExoPlayer` API to include the
|
23 | 40 | `MediaCodec.BUFFER_FLAG_DECODE_ONLY` flag when queuing decode-only input
|
|
27 | 44 | * Improve codec performance checks for software video codecs. This may
|
28 | 45 | lead to some additional tracks being marked as `EXCEEDS_CAPABILITIES`.
|
29 | 46 | * Text:
|
| 47 | + * Fix SSA and SubRip to display an in-progress cue when enabling subtitles |
| 48 | + ([#2309](https://github.com/androidx/media/issues/2309)). |
| 49 | + * Fix playback getting stuck when switching from a stream with a subtitle |
| 50 | + error to a live stream with an empty subtitle track |
| 51 | + ([#2328](https://github.com/androidx/media/issues/2328)). |
| 52 | + * Fix garbled CEA-608 subtitles when playing H.262 streams containing |
| 53 | + B-frames ([#2372](https://github.com/androidx/media/issues/2372)). |
30 | 54 | * Metadata:
|
31 | 55 | * Image:
|
32 | 56 | * DataSource:
|
|
39 | 63 | * `writeSampleData()` API now uses muxer specific `BufferInfo` class
|
40 | 64 | instead of `MediaCodec.BufferInfo`.
|
41 | 65 | * IMA extension:
|
| 66 | + * Fix a bug where a load error in one ad may accidentally invalidate |
| 67 | + another ad group. |
42 | 68 | * Session:
|
| 69 | + * Fix a bug where passing null into `getLibraryRoot` of a `MediaBrowser` |
| 70 | + connected to a legacy `MediaBrowserServiceCompat` produced a |
| 71 | + `NullPointerException`. |
| 72 | + * Fix a bug where where sending custom actions, a search result or a |
| 73 | + getItem request crashed the legacy session app with a |
| 74 | + `ClassNotFoundException`. |
43 | 75 | * UI:
|
| 76 | + * Fix a Compose bug which resulted in a gap between setting the initial |
| 77 | + button states and observing the change in state (e.g. icon shapes or |
| 78 | + being enabled). Any changes made to the Player outside of the |
| 79 | + observation period are now picked up |
| 80 | + ([#2313](https://github.com/androidx/media/issues/2313)). |
| 81 | + * Add support for ExoPlayer's scrubbing mode to `PlayerControlView`. When |
| 82 | + enabled, this puts the player into scrubbing mode when the user starts |
| 83 | + dragging the scrubber bar, issues a `player.seekTo` call for every |
| 84 | + movement, and then exits scrubbing mode when the touch is lifted from |
| 85 | + the screen. This integration can be enabled with either |
| 86 | + `time_bar_scrubbing_enabled = true` in XML or the |
| 87 | + `setTimeBarScrubbingEnabled(boolean)` method from Java/Kotlin. |
44 | 88 | * Downloads:
|
45 | 89 | * Add partial download support for progressive streams. Apps can prepare a
|
46 | 90 | progressive stream with `DownloadHelper`, and request a
|
|
51 | 95 | correspondingly.
|
52 | 96 | * Add `DownloadHelper.Factory` with which the static
|
53 | 97 | `DownloadHelper.forMediaItem()` methods are replaced.
|
| 98 | + * Add `Factory` for `SegmentDownloader` implementations. |
54 | 99 | * OkHttp extension:
|
55 | 100 | * Cronet extension:
|
56 | 101 | * RTMP extension:
|
57 | 102 | * HLS extension:
|
| 103 | + * Support X-ASSET-LIST and live streams with `HlsInterstitialsAdsLoader`. |
58 | 104 | * DASH extension:
|
59 | 105 | * Smooth Streaming extension:
|
60 | 106 | * RTSP extension:
|
61 |
| - * Add support for URI with RTSPT scheme as a way to configure the RTSP |
62 |
| - session to use TCP |
63 |
| - ([#1484](https://github.com/androidx/media/issues/1484)). |
| 107 | + * Add parsing support for SessionDescriptions containing lines with |
| 108 | + trailing whitespace characters |
| 109 | + ([#2357](https://github.com/androidx/media/issues/2357)). |
64 | 110 | * Decoder extensions (FFmpeg, VP9, AV1, etc.):
|
65 | 111 | * MIDI extension:
|
66 | 112 | * Leanback extension:
|
67 | 113 | * Cast extension:
|
68 |
| - * Add support for playlist metadata |
69 |
| - ([#2235](https://github.com/androidx/media/pull/2235)). |
| 114 | + * Add support for `getDeviceVolume()`, `setDeviceVolume()`, |
| 115 | + `getDeviceMuted()`, and `setDeviceMuted()` |
| 116 | + ([#2089](https://github.com/androidx/media/issues/2089)). |
70 | 117 | * Test Utilities:
|
71 |
| -* Demo app: |
72 |
| - * Add `PlaybackSpeedPopUpButton` Composable UI element to be part of |
73 |
| - `ExtraControls` in `demo-compose`. |
| 118 | + * Removed `transformer.TestUtil.addAudioDecoders(String...)`, |
| 119 | + `transformer.TestUtil.addAudioEncoders(String...)`, and |
| 120 | + `transformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, |
| 121 | + String...)`. Use `ShadowMediaCodecConfig` to configure shadow encoders |
| 122 | + and decoders instead. |
| 123 | + * Replaced the "exotest" prefix with "media3" in codec names reported by |
| 124 | + `ShadowMediaCodecConfig`. |
74 | 125 | * Remove deprecated symbols:
|
75 | 126 | * Removed deprecated `SegmentDownloader` constructor
|
76 | 127 | `SegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory,
|
|
86 | 137 | `Player.seekToNextMediaItem()` instead.
|
87 | 138 | * Removed deprecated `BaseAudioProcessor` in `exoplayer` module. Use
|
88 | 139 | `BaseAudioProcessor` under `common` module.
|
| 140 | + * Remove deprecated `MediaCodecVideoRenderer` constructor |
| 141 | + `MediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, |
| 142 | + MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable |
| 143 | + VideoRendererEventListener, int, float, @Nullable VideoSinkProvider)`. |
89 | 144 |
|
90 | 145 | ## 1.6
|
91 | 146 |
|
| 147 | +### 1.6.1 (2025-04-14) |
| 148 | + |
| 149 | +This release includes the following changes since the |
| 150 | +[1.6.0 release](#160-2025-03-26): |
| 151 | + |
| 152 | +* Common Library: |
| 153 | + * Add `PlaybackParameters.withPitch(float)` method for easily copying a |
| 154 | + `PlaybackParameters` with a new `pitch` value |
| 155 | + ([#2257](https://github.com/androidx/media/issues/2257)). |
| 156 | +* ExoPlayer: |
| 157 | + * Fix issue where media item transition fails due to recoverable renderer |
| 158 | + error during initialization of the next media item |
| 159 | + ([#2229](https://github.com/androidx/media/issues/2229)). |
| 160 | + * Fix issue where `ProgressiveMediaPeriod` throws an |
| 161 | + `IllegalStateException` as `PreloadMediaSource` attempts to call its |
| 162 | + `getBufferedDurationUs()` before it is prepared |
| 163 | + ([#2315](https://github.com/androidx/media/issues/2315)). |
| 164 | + * Fix sending `CmcdData` in manifest requests for DASH, HLS, and |
| 165 | + SmoothStreaming ([#2253](https://github.com/androidx/media/pull/2253)). |
| 166 | + * Ensure `AdPlaybackState.withAdDurationsUs(long[][])` can be used after |
| 167 | + ad groups have been removed. The user still needs to pass in an array of |
| 168 | + durations for removed ad groups which can be empty or null |
| 169 | + ([#2267](https://github.com/androidx/media/issues/2267)). |
| 170 | +* Extractors: |
| 171 | + * MP4: Parse `alternate_group` from the `tkhd` box and expose it as an |
| 172 | + `Mp4AlternateGroupData` entry in each track's `Format.metadata` |
| 173 | + ([#2242](https://github.com/androidx/media/issues/2242)). |
| 174 | +* Audio: |
| 175 | + * Fix offload issue where the position might get stuck when playing a |
| 176 | + playlist of short content |
| 177 | + ([#1920](https://github.com/androidx/media/issues/1920)). |
| 178 | +* Session: |
| 179 | + * Lower aggregation timeout for platform `MediaSession` callbacks from 500 |
| 180 | + to 100 milliseconds and add an experimental setter to allow apps to |
| 181 | + configure this value. |
| 182 | + * Fix issue where notifications reappear after they have been dismissed by |
| 183 | + the user ([#2302](https://github.com/androidx/media/issues/2302)). |
| 184 | + * Fix a bug where the session returned a single-item timeline when the |
| 185 | + wrapped player is actually empty. This happened when the wrapped player |
| 186 | + doesn't have `COMMAND_GET_TIMELINE` available while |
| 187 | + `COMMAND_GET_CURRENT_MEDIA_ITEM` is available and the wrapped player is |
| 188 | + empty ([#2320](https://github.com/androidx/media/issues/2320)). |
| 189 | + * Fix a bug where calling |
| 190 | + `MediaSessionService.setMediaNotificationProvider` is silently ignored |
| 191 | + after other interactions with the service like |
| 192 | + `setForegroundServiceTimeoutMs` |
| 193 | + ([#2305](https://github.com/androidx/media/issues/2305)). |
| 194 | +* UI: |
| 195 | + * Enable `PlayerSurface` to work with `ExoPlayer.setVideoEffects` and |
| 196 | + `CompositionPlayer`. |
| 197 | + * Fix bug where `PlayerSurface` can't be recomposed with a new `Player`. |
| 198 | +* HLS extension: |
| 199 | + * Fix issue where chunk duration wasn't set in `CmcdData` for HLS media, |
| 200 | + causing an assertion failure when processing encrypted media segments |
| 201 | + ([#2312](https://github.com/androidx/media/issues/2312)). |
| 202 | +* RTSP extension: |
| 203 | + * Add support for URI with RTSPT scheme as a way to configure the RTSP |
| 204 | + session to use TCP |
| 205 | + ([#1484](https://github.com/androidx/media/issues/1484)). |
| 206 | +* Cast extension: |
| 207 | + * Add support for playlist metadata |
| 208 | + ([#2235](https://github.com/androidx/media/pull/2235)). |
| 209 | + |
92 | 210 | ### 1.6.0 (2025-03-26)
|
93 | 211 |
|
94 | 212 | This release includes the following changes since the
|
@@ -2917,6 +3035,10 @@ This release corresponds to the
|
2917 | 3035 | * Ad playback / IMA:
|
2918 | 3036 | * Decrease ad polling rate from every 100ms to every 200ms, to line up
|
2919 | 3037 | with Media Rating Council (MRC) recommendations.
|
| 3038 | + * Fix bug where ad groups after the end of a VOD window stalled playback. |
| 3039 | + Ads groups with a start time after the window are not enqueued into the |
| 3040 | + `MediaPeriodQueue` anymore |
| 3041 | + ([#2215](https://github.com/androidx/media/issues/2215)). |
2920 | 3042 | * FFmpeg extension:
|
2921 | 3043 | * Update CMake version to `3.21.0+` to avoid a CMake bug causing
|
2922 | 3044 | AndroidStudio's gradle sync to fail
|
|
0 commit comments