This release includes the following changes since 1.9.0 release:
- Common Library:
- Support date-time strings with only hours in the timezone offset (#2929).
- ExoPlayer:
- Allow dynamic scheduling to slow
doSomeWorkinterval only after audio starts to support smoother A/V sync at beginning of playback. - Fix bug in
DefaultLoadErrorHandlingPolicywhereFileNotFoundExceptionand similar exception types were retried multiple times. - Fix bug with dynamic scheduling where the calculated time for the next
doSomeWorkwas mistakenly reduced by the elapsed time of the current iteration ofdoSomeWork. Addressing this hopefully extends CPU idle time and saves power. - Fix issue where some playbacks of Dolby Vision files fail when attempting to use a fallback AVC or HEVC codec.
- Fix bug where loading continues after playback ended when removing the currently playing item from a playlist (#2873).
- Avoid leaking
MediaIteminstances when repeatedly usingExoPlayer.replaceMediaItemon the same item (#2993). - Prevent potential ANRs caused by emergency wake lock releases (#2979).
- Allow dynamic scheduling to slow
- Extractors:
- MP3: Parse LAME ReplayGain data (#2840).
- Audio:
- Correctly remove support for
AC4Profile22and other legacy profiles when assessing AC-4 decoder support in Automotive scenarios (#2609).
- Correctly remove support for
- Video:
- Discard video codecs on devices below API 30 when the content frame rate changes to avoid stuttering playback (#2941).
- Text:
- VobSub: Fix some missing subtitles by correctly handling SPUs that either contain only a single control sequence, or have critical info split across multiple control sequences (#2935).
- IMA extension:
- Bug fix: Corrected an issue where the ad MIME type did not match the MIME type provided in the IMA LOADED event. The fix now maps the ad MIME type using the ad pod index and ad position.
- Add a null check before accessing result of
getAdsManager()andAdEvent.getAd().
- Session:
- Fix bug where stopping a
MediaControllerconnected to a platform session crashed the app if stop happened during ad playback (#2948). - Add additional verifications on
extrasBundleinstances in various classes to guard against malformedBundleinstances sent from other processes. - Fix issue where missing commands for
COMMAND_SEEK_NEXTorCOMMAND_SEEK_BACKcan cause gaps in the system media notification (#2976). - Move bitmap scaling for notification icon off the main thread (#2829).
- Fix bug where author, writer and composer were not used as a fallback when converting from legacy
MediaMetadataCompatandMediaDescriptionCompat(#3018).
- Fix bug where stopping a
- Downloads:
- Fix potential infinite loops when a
PriorityTooLowExceptionis handled bySegmentDownloader(for DASH, HLS and SmoothStreaming). Custom overrides ofSegmentDownloaderusing the protectedexecutemethod need to provide their task wrapped in aSupplierso it can be recreated (#2931).
- Fix potential infinite loops when a
- HLS extension:
- Pass the raw asset list JSON document to
Listener.onAssetListLoadCompletedcallback. This is a breaking change in an unstable API that requires apps that implement this callback to add an additional argument of typeJSONObject(#2950).
- Pass the raw asset list JSON document to
- RTSP extension:
- Correctly handle RTP Packets with timestamps that wrap around (#2930).
- Decoder extensions (FFmpeg, VP9, AV1, etc.):
- Fix potential
NullPointerExceptionthat can occur when seeking prior to processing the first video frame (#2965).
- Fix potential
- Cast extension:
- Fix bug preventing the
RemoteCastPlayertimeline from updating correctly when replacing the playlist.
- Fix bug preventing the