[various] Update example apps to Swift (#9347)
Converts the Objective-C iOS example apps for all non-iOS-plugin-implementation packages to Swift.
The process for this was (all using current stable, 3.32):
- Deleted example/ios.
- Ran flutter create --platforms=ios ..
- Reverted changes in ios/Runner/Assets.xcassets/AppIcon.appiconset (this doesn't really matter either way, I just decided not to thrash a bunch of icons, since there's no real reason to and it would have added a ton more files).
- Reverted changes outside of ios/, except for .gitignore which we may as well have a current version of.
- Added license blocks to template-created code files.
- Removed the RunnerTest target, its source file, and the Podfile adjustment to RunnerTest.
- Reverted bundle identifier changes in most cases, since it was often auto-detecting the old io.flutter.* org the examples were first created with.
- Re-added any important bits to Info.plist.
- Ran a build both with and without SwiftPM enabled, to ensure that all the Cocoapods and SwiftPM boilerplate is added to the projects to cut down on random diffs when people build later.
One-off changes:
- Added back Configuration.storkekit in in_app_purchase.
- Migrated the Google Maps API key code in AppDelegate.m to AppDelegate.swift
I did not convert the implementation packages in this PR because those will need to be handled more carefully, due to the presence of RunnerTest (and sometimes RunnerUITest) targets that need to be preserved.
Part of https://github.com/flutter/flutter/issues/148586
## Pre-Review Checklist
[^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling.
[dependabot]: Bump exoplayer_version from 1.4.1 to 1.5.1 in /packages/video_player/video_player_android/android (#8414)
Bumps exoplayer_version from 1.4.1 to 1.5.1.
Updates androidx.media3:media3-exoplayer from 1.4.1 to 1.5.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/androidx/media/releases">androidx.media3:media3-exoplayer's releases</a>.</em></p>
<blockquote>
<h2>1.5.1</h2>
<p>This release includes the following changes since the <a href="https://github.com/androidx/media/blob/HEAD/#150-2024-11-27">1.5.0 release</a>:</p>
<ul>
<li>ExoPlayer:
<ul>
<li>Disable use of asynchronous decryption in MediaCodec to avoid reported codec timeout issues with this platform API (<a href="https://redirect.github.com/androidx/media/issues/1641">#1641</a>).</li>
</ul>
</li>
<li>Extractors:
<ul>
<li>MP3: Don't stop playback early when a <code>VBRI</code> frame's table of contents doesn't cover all the MP3 data in a file (<a href="https://redirect.github.com/androidx/media/issues/1904">#1904</a>).</li>
</ul>
</li>
<li>Video:
<ul>
<li>Rollback of using <code>MediaCodecAdapter</code> supplied pixel aspect ratio values when provided while processing <code>onOutputFormatChanged</code> (<a href="https://redirect.github.com/androidx/media/pull/1371">#1371</a>).</li>
</ul>
</li>
<li>Text:
<ul>
<li>Fix bug in <code>ReplacingCuesResolver.discardCuesBeforeTimeUs</code> where the cue active at <code>timeUs</code> (started before but not yet ended) was incorrectly discarded (<a href="https://redirect.github.com/androidx/media/issues/1939">#1939</a>).</li>
</ul>
</li>
<li>Metadata:
<ul>
<li>Extract disc/track numbering and genre from Vorbis comments into <code>MediaMetadata</code> (<a href="https://redirect.github.com/androidx/media/issues/1958">#1958</a>).</li>
</ul>
</li>
</ul>
<h2>1.5.0</h2>
<p>This release includes the following changes since the <a href="https://github.com/androidx/media/blob/HEAD/#141-2024-08-23">1.4.1 release</a>:</p>
<ul>
<li>Common Library:
<ul>
<li>Add <code>ForwardingSimpleBasePlayer</code> that allows forwarding to another player with small adjustments while ensuring full consistency and listener handling (<a href="https://redirect.github.com/androidx/media/issues/1183">#1183</a>).</li>
<li>Replace <code>SimpleBasePlayer.State.playlist</code> by <code>getPlaylist()</code> method.</li>
<li>Add override for <code>SimpleBasePlayer.State.Builder.setPlaylist()</code> to directly specify a <code>Timeline</code> and current <code>Tracks</code> and <code>Metadata</code> instead of building a playlist structure.</li>
<li>Increase <code>minSdk</code> to 21 (Android Lollipop). This is aligned with all other AndroidX libraries.</li>
<li>Add <code>androidx.media3:media3-common-ktx</code> artifact which provides Kotlin-specific functionality built on top of the Common library</li>
<li>Add <code>Player.listen</code> suspending extension function to spin a coroutine to listen to <code>Player.Events</code> to the <code>media3-common-ktx</code> library.</li>
<li>Remove <code>@DoNotInline</code> annotations from manually out-of-lined inner classes designed to avoid <a href="https://chromium.googlesource.com/chromium/src/+/HEAD/build/android/docs/class_verification_failures.md">runtime class verification failures</a>. Recent versions of <a href="https://developer.android.com/build/shrink-code">R8</a> now automatically out-of-line calls like these to avoid the runtime failures (so the manual out-of-lining is no longer required). All Gradle users of the library must already be a using a version of the Android Gradle Plugin that uses a version of R8 which does this, <a href="https://issuetracker.google.com/345472586#comment7">due to <code>compileSdk = 35</code></a>. Users of the library with non-Gradle build systems will need to ensure their R8-equivalent shrinking/obfuscating step does a similar automatic out-of-lining process in order to avoid runtime class verification failures. This change has <a href="http://r.android.com/3156141">already been done in other AndroidX libraries</a>.</li>
</ul>
</li>
<li>ExoPlayer:
<ul>
<li><code>MediaCodecRenderer.onProcessedStreamChange()</code> can now be called for every media item. Previously it was not called for the first one. Use <code>MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()</code> to enable this.</li>
<li>Add <code>PreloadMediaSource.PreloadControl.onPreloadError</code> to allow <code>PreloadMediaSource.PreloadControl</code> implementations to take actions when error occurs.</li>
<li>Add <code>BasePreloadManager.Listener</code> to propagate preload events to apps.</li>
<li>Allow changing SNTP client timeout and retry alternative addresses on timeout (<a href="https://redirect.github.com/androidx/media/issues/1540">#1540</a>).</li>
<li>Remove <code>MediaCodecAdapter.Configuration.flags</code> as the field was always zero.</li>
<li>Allow the user to select the built-in speaker for playback on Wear OS API 35+ (where the device advertises support for this).</li>
<li>Defer the blocking call to <code>Context.getSystemService(Context.AUDIO_SERVICE)</code> until audio focus handling is enabled. This ensures the blocking call isn't done if audio focus handling is not enabled (<a href="https://redirect.github.com/androidx/media/pull/1616">#1616</a>).</li>
<li>Allow playback regardless of buffered duration when loading fails (<a href="https://redirect.github.com/androidx/media/issues/1571">#1571</a>).</li>
<li>Add <code>AnalyticsListener.onRendererReadyChanged()</code> to signal when individual renderers allow playback to be ready.</li>
<li>Fix <code>MediaCodec.CryptoException</code> sometimes being reported as an "unexpected runtime error" when <code>MediaCodec</code> is operated in asynchronous mode (default behaviour on API 31+).</li>
<li>Pass <code>bufferedDurationUs</code> instead of <code>bufferedPositionUs</code> with <code>PreloadMediaSource.PreloadControl.onContinueLoadingRequested()</code>. Also changes <code>DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS</code> to <code>DefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS</code>, apps then need to pass a value representing a specific duration from the default start position for which the corresponding media source has to be preloaded with this IntDef, instead of a position.</li>
<li>Add <code>ForwardingRenderer</code> implementation that forwards all method calls to another renderer (<a href="https://redirect.github.com/androidx/media/pull/1703">1703</a>).</li>
<li>Add playlist preloading for the next item in the playlist. Apps can enable preloading by calling <code>ExoPlayer.setPreloadConfiguration(PreloadConfiguration)</code> accordingly. By default preloading is disabled. When opted-in and to not interfere with playback, <code>DefaultLoadControl</code> restricts preloading to start and continue only when the player is not loading for playback. Apps can change this behaviour by implementing <code>LoadControl.shouldContinuePreloading()</code> accordingly (like when overriding this method in <code>DefaultLoadControl</code>). The default implementation of <code>LoadControl</code> disables preloading in case an app is using a custom implementation of <code>LoadControl</code>.</li>
<li>Add method <code>MediaSourceEventListener.EventDispatcher.dispatchEvent()</code> to allow invoking events of subclass listeners (<a href="https://redirect.github.com/androidx/media/pull/1736">1736</a>).</li>
<li>Add <code>DefaultPreloadManager.Builder</code> that builds the <code>DefaultPreloadManager</code> and <code>ExoPlayer</code> instances with consistently shared configurations.</li>
<li>Remove <code>Renderer[]</code> parameter from <code>LoadControl.onTracksSelected()</code> as <code>DefaultLoadControl</code> implementation can retrieve the stream types from <code>ExoTrackSelection[]</code>.</li>
<li>Deprecated <code>DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])</code> and marked method as final to prevent overrides. The new <code>DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])</code> should be used instead.</li>
<li>Report <code>MediaSourceEventListener</code> events from secondary sources in <code>MergingMediaSource</code>. This will result in load start/error/cancelled/completed events being reported for sideloaded subtitles (those added with <code>MediaItem.LocalConfiguration.subtitleConfigurations</code>), which may appear as duplicate load events emitted from <code>AnalyticsListener</code>.</li>
<li>Prevent subtitle & metadata errors from completely stopping playback. Instead the problematic track is disabled and playback of the remaining tracks continues (<a href="https://redirect.github.com/google/ExoPlayer/issues/1722">#1722</a>).
<ul>
<li>In new subtitle handling (during extraction), associated parse (e.g. invalid subtitle data) and load errors (e.g. HTTP 404) are emitted via <code>onLoadError</code> callbacks.</li>
<li>In legacy subtitle handling (during rendering), only associated load errors are emitted via <code>onLoadError</code> callbacks while parse errors are silently ignored (this is pre-existing behaviour).</li>
</ul>
</li>
<li>Fix bug where playlist items or periods in multi-period DASH streams with durations that don't match the actual content could cause frame freezes at the end of the item (<a href="https://redirect.github.com/androidx/media/issues/1698">#1698</a>).</li>
<li>Add a setter to <code>SntpClient</code> to set the max elapsed time since the last update after which the client is re-initialized (<a href="https://redirect.github.com/androidx/media/pull/1794">#1794</a>).</li>
</ul>
</li>
<li>Transformer:</li>
</ul>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/androidx/media/blob/release/RELEASENOTES.md">androidx.media3:media3-exoplayer's changelog</a>.</em></p>
<blockquote>
<h3>1.5.1 (2024-12-19)</h3>
<p>This release includes the following changes since the
<a href="https://github.com/androidx/media/blob/release/#150-2024-11-27">1.5.0 release</a>:</p>
<ul>
<li>ExoPlayer:
<ul>
<li>Disable use of asynchronous decryption in MediaCodec to avoid reported
codec timeout issues with this platform API
(<a href="https://redirect.github.com/androidx/media/issues/1641">#1641</a>).</li>
</ul>
</li>
<li>Extractors:
<ul>
<li>MP3: Don't stop playback early when a <code>VBRI</code> frame's table of contents
doesn't cover all the MP3 data in a file
(<a href="https://redirect.github.com/androidx/media/issues/1904">#1904</a>).</li>
</ul>
</li>
<li>Video:
<ul>
<li>Rollback of using <code>MediaCodecAdapter</code> supplied pixel aspect ratio values
when provided while processing <code>onOutputFormatChanged</code>
(<a href="https://redirect.github.com/androidx/media/pull/1371">#1371</a>).</li>
</ul>
</li>
<li>Text:
<ul>
<li>Fix bug in <code>ReplacingCuesResolver.discardCuesBeforeTimeUs</code> where the cue
active at <code>timeUs</code> (started before but not yet ended) was incorrectly
discarded (<a href="https://redirect.github.com/androidx/media/issues/1939">#1939</a>).</li>
</ul>
</li>
<li>Metadata:
<ul>
<li>Extract disc/track numbering and genre from Vorbis comments into
<code>MediaMetadata</code>
(<a href="https://redirect.github.com/androidx/media/issues/1958">#1958</a>).</li>
</ul>
</li>
</ul>
<h3>1.5.0 (2024-11-27)</h3>
<p>This release includes the following changes since the
<a href="https://github.com/androidx/media/blob/release/#141-2024-08-23">1.4.1 release</a>:</p>
<ul>
<li>Common Library:
<ul>
<li>Add <code>ForwardingSimpleBasePlayer</code> that allows forwarding to another
player with small adjustments while ensuring full consistency and
listener handling
(<a href="https://redirect.github.com/androidx/media/issues/1183">#1183</a>).</li>
<li>Replace <code>SimpleBasePlayer.State.playlist</code> by <code>getPlaylist()</code> method.</li>
<li>Add override for <code>SimpleBasePlayer.State.Builder.setPlaylist()</code> to
directly specify a <code>Timeline</code> and current <code>Tracks</code> and <code>Metadata</code>
instead of building a playlist structure.</li>
<li>Increase <code>minSdk</code> to 21 (Android Lollipop). This is aligned with all
other AndroidX libraries.</li>
<li>Add <code>androidx.media3:media3-common-ktx</code> artifact which provides
Kotlin-specific functionality built on top of the Common library</li>
<li>Add <code>Player.listen</code> suspending extension function to spin a coroutine to
listen to <code>Player.Events</code> to the <code>media3-common-ktx</code> library.</li>
<li>Remove <code>@DoNotInline</code> annotations from manually out-of-lined inner
classes designed to avoid
<a href="https://chromium.googlesource.com/chromium/src/+/HEAD/build/android/docs/class_verification_failures.md">runtime class verification failures</a>.
Recent versions of <a href="https://developer.android.com/build/shrink-code">R8</a></li>
</ul>
</li>
</ul>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/androidx/media/commit/76088cd6af7f263aba238b7a48d64bd4f060cb8b"><code>76088cd</code></a> Bump Media3 version to 1.5.1</li>
<li><a href="https://github.com/androidx/media/commit/7ae9ddf1662b7174a2d82eb14a0f07fc5d7a3e95"><code>7ae9ddf</code></a> Update release notes for Media3 1.5.1 release</li>
<li><a href="https://github.com/androidx/media/commit/e4e59cd929af4d80b84d9a392ae82cb4aa07cf0b"><code>e4e59cd</code></a> Switch default of async crypto mode to disabled</li>
<li><a href="https://github.com/androidx/media/commit/508a4258a32c4f03ae69721a0609075d9d817b77"><code>508a425</code></a> Switch play FGS exemption to use custom action instead of commands</li>
<li><a href="https://github.com/androidx/media/commit/52f976179622c764794859195dbecd6bea4104a4"><code>52f9761</code></a> Don't check codec's profile for MV-HEVC video.</li>
<li><a href="https://github.com/androidx/media/commit/de91ebc6ae101cdd4c9e4246cb6840a7962aa38b"><code>de91ebc</code></a> Add vorbis comment support for track/disc numbering fields, and genre</li>
<li><a href="https://github.com/androidx/media/commit/5d9badcb502aebc57027ba407959344b55731e9d"><code>5d9badc</code></a> Fix ReplacingCuesResolver.discardCuesBeforeTimeUs to retain active cue</li>
<li><a href="https://github.com/androidx/media/commit/121b79ae96e334e79ec0f886fccf81357b9054d0"><code>121b79a</code></a> Merge pull request <a href="https://redirect.github.com/androidx/media/issues/1943">#1943</a> from DolbyLaboratories:dlb/ac4-ajoc/dev</li>
<li><a href="https://github.com/androidx/media/commit/fa9689ef9ad10d97f60b8b9496222ae0e2624cd5"><code>fa9689e</code></a> Clarify <code>CommandButton</code> javadoc around <code>iconResId</code> and <code>ICON_UNDEFINED</code></li>
<li><a href="https://github.com/androidx/media/commit/f5bbb39e90ef54e163e716e5b01122d730192503"><code>f5bbb39</code></a> Merge pull request <a href="https://redirect.github.com/androidx/media/issues/1823">#1823</a> from MGaetan89:remove_outdated_sdk_check</li>
<li>Additional commits viewable in <a href="https://github.com/androidx/media/compare/1.4.1...1.5.1">compare view</a></li>
</ul>
</details>
<br />
Updates androidx.media3:media3-exoplayer-hls from 1.4.1 to 1.5.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/androidx/media/releases">androidx.media3:media3-exoplayer-hls's releases</a>.</em></p>
<blockquote>
<h2>1.5.1</h2>
<p>This release includes the following changes since the <a href="https://github.com/androidx/media/blob/HEAD/#150-2024-11-27">1.5.0 release</a>:</p>
<ul>
<li>ExoPlayer:
<ul>
<li>Disable use of asynchronous decryption in MediaCodec to avoid reported codec timeout issues with this platform API (<a href="https://redirect.github.com/androidx/media/issues/1641">#1641</a>).</li>
</ul>
</li>
<li>Extractors:
<ul>
<li>MP3: Don't stop playback early when a <code>VBRI</code> frame's table of contents doesn't cover all the MP3 data in a file (<a href="https://redirect.github.com/androidx/media/issues/1904">#1904</a>).</li>
</ul>
</li>
<li>Video:
<ul>
<li>Rollback of using <code>MediaCodecAdapter</code> supplied pixel aspect ratio values when provided while processing <code>onOutputFormatChanged</code> (<a href="https://redirect.github.com/androidx/media/pull/1371">#1371</a>).</li>
</ul>
</li>
<li>Text:
<ul>
<li>Fix bug in <code>ReplacingCuesResolver.discardCuesBeforeTimeUs</code> where the cue active at <code>timeUs</code> (started before but not yet ended) was incorrectly discarded (<a href="https://redirect.github.com/androidx/media/issues/1939">#1939</a>).</li>
</ul>
</li>
<li>Metadata:
<ul>
<li>Extract disc/track numbering and genre from Vorbis comments into <code>MediaMetadata</code> (<a href="https://redirect.github.com/androidx/media/issues/1958">#1958</a>).</li>
</ul>
</li>
</ul>
<h2>1.5.0</h2>
<p>This release includes the following changes since the <a href="https://github.com/androidx/media/blob/HEAD/#141-2024-08-23">1.4.1 release</a>:</p>
<ul>
<li>Common Library:
<ul>
<li>Add <code>ForwardingSimpleBasePlayer</code> that allows forwarding to another player with small adjustments while ensuring full consistency and listener handling (<a href="https://redirect.github.com/androidx/media/issues/1183">#1183</a>).</li>
<li>Replace <code>SimpleBasePlayer.State.playlist</code> by <code>getPlaylist()</code> method.</li>
<li>Add override for <code>SimpleBasePlayer.State.Builder.setPlaylist()</code> to directly specify a <code>Timeline</code> and current <code>Tracks</code> and <code>Metadata</code> instead of building a playlist structure.</li>
<li>Increase <code>minSdk</code> to 21 (Android Lollipop). This is aligned with all other AndroidX libraries.</li>
<li>Add <code>androidx.media3:media3-common-ktx</code> artifact which provides Kotlin-specific functionality built on top of the Common library</li>
<li>Add <code>Player.listen</code> suspending extension function to spin a coroutine to listen to <code>Player.Events</code> to the <code>media3-common-ktx</code> library.</li>
<li>Remove <code>@DoNotInline</code> annotations from manually out-of-lined inner classes designed to avoid <a href="https://chromium.googlesource.com/chromium/src/+/HEAD/build/android/docs/class_verification_failures.md">runtime class verification failures</a>. Recent versions of <a href="https://developer.android.com/build/shrink-code">R8</a> now automatically out-of-line calls like these to avoid the runtime failures (so the manual out-of-lining is no longer required). All Gradle users of the library must already be a using a version of the Android Gradle Plugin that uses a version of R8 which does this, <a href="https://issuetracker.google.com/345472586#comment7">due to <code>compileSdk = 35</code></a>. Users of the library with non-Gradle build systems will need to ensure their R8-equivalent shrinking/obfuscating step does a similar automatic out-of-lining process in order to avoid runtime class verification failures. This change has <a href="http://r.android.com/3156141">already been done in other AndroidX libraries</a>.</li>
</ul>
</li>
<li>ExoPlayer:
<ul>
<li><code>MediaCodecRenderer.onProcessedStreamChange()</code> can now be called for every media item. Previously it was not called for the first one. Use <code>MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()</code> to enable this.</li>
<li>Add <code>PreloadMediaSource.PreloadControl.onPreloadError</code> to allow <code>PreloadMediaSource.PreloadControl</code> implementations to take actions when error occurs.</li>
<li>Add <code>BasePreloadManager.Listener</code> to propagate preload events to apps.</li>
<li>Allow changing SNTP client timeout and retry alternative addresses on timeout (<a href="https://redirect.github.com/androidx/media/issues/1540">#1540</a>).</li>
<li>Remove <code>MediaCodecAdapter.Configuration.flags</code> as the field was always zero.</li>
<li>Allow the user to select the built-in speaker for playback on Wear OS API 35+ (where the device advertises support for this).</li>
<li>Defer the blocking call to <code>Context.getSystemService(Context.AUDIO_SERVICE)</code> until audio focus handling is enabled. This ensures the blocking call isn't done if audio focus handling is not enabled (<a href="https://redirect.github.com/androidx/media/pull/1616">#1616</a>).</li>
<li>Allow playback regardless of buffered duration when loading fails (<a href="https://redirect.github.com/androidx/media/issues/1571">#1571</a>).</li>
<li>Add <code>AnalyticsListener.onRendererReadyChanged()</code> to signal when individual renderers allow playback to be ready.</li>
<li>Fix <code>MediaCodec.CryptoException</code> sometimes being reported as an "unexpected runtime error" when <code>MediaCodec</code> is operated in asynchronous mode (default behaviour on API 31+).</li>
<li>Pass <code>bufferedDurationUs</code> instead of <code>bufferedPositionUs</code> with <code>PreloadMediaSource.PreloadControl.onContinueLoadingRequested()</code>. Also changes <code>DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS</code> to <code>DefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS</code>, apps then need to pass a value representing a specific duration from the default start position for which the corresponding media source has to be preloaded with this IntDef, instead of a position.</li>
<li>Add <code>ForwardingRenderer</code> implementation that forwards all method calls to another renderer (<a href="https://redirect.github.com/androidx/media/pull/1703">1703</a>).</li>
<li>Add playlist preloading for the next item in the playlist. Apps can enable preloading by calling <code>ExoPlayer.setPreloadConfiguration(PreloadConfiguration)</code> accordingly. By default preloading is disabled. When opted-in and to not interfere with playback, <code>DefaultLoadControl</code> restricts preloading to start and continue only when the player is not loading for playback. Apps can change this behaviour by implementing <code>LoadControl.shouldContinuePreloading()</code> accordingly (like when overriding this method in <code>DefaultLoadControl</code>). The default implementation of <code>LoadControl</code> disables preloading in case an app is using a custom implementation of <code>LoadControl</code>.</li>
<li>Add method <code>MediaSourceEventListener.EventDispatcher.dispatchEvent()</code> to allow invoking events of subclass listeners (<a href="https://redirect.github.com/androidx/media/pull/1736">1736</a>).</li>
<li>Add <code>DefaultPreloadManager.Builder</code> that builds the <code>DefaultPreloadManager</code> and <code>ExoPlayer</code> instances with consistently shared configurations.</li>
<li>Remove <code>Renderer[]</code> parameter from <code>LoadControl.onTracksSelected()</code> as <code>DefaultLoadControl</code> implementation can retrieve the stream types from <code>ExoTrackSelection[]</code>.</li>
<li>Deprecated <code>DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])</code> and marked method as final to prevent overrides. The new <code>DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])</code> should be used instead.</li>
<li>Report <code>MediaSourceEventListener</code> events from secondary sources in <code>MergingMediaSource</code>. This will result in load start/error/cancelled/completed events being reported for sideloaded subtitles (those added with <code>MediaItem.LocalConfiguration.subtitleConfigurations</code>), which may appear as duplicate load events emitted from <code>AnalyticsListener</code>.</li>
<li>Prevent subtitle & metadata errors from completely stopping playback. Instead the problematic track is disabled and playback of the remaining tracks continues (<a href="https://redirect.github.com/google/ExoPlayer/issues/1722">#1722</a>).
<ul>
<li>In new subtitle handling (during extraction), associated parse (e.g. invalid subtitle data) and load errors (e.g. HTTP 404) are emitted via <code>onLoadError</code> callbacks.</li>
<li>In legacy subtitle handling (during rendering), only associated load errors are emitted via <code>onLoadError</code> callbacks while parse errors are silently ignored (this is pre-existing behaviour).</li>
</ul>
</li>
<li>Fix bug where playlist items or periods in multi-period DASH streams with durations that don't match the actual content could cause frame freezes at the end of the item (<a href="https://redirect.github.com/androidx/media/issues/1698">#1698</a>).</li>
<li>Add a setter to <code>SntpClient</code> to set the max elapsed time since the last update after which the client is re-initialized (<a href="https://redirect.github.com/androidx/media/pull/1794">#1794</a>).</li>
</ul>
</li>
<li>Transformer:</li>
</ul>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/androidx/media/blob/release/RELEASENOTES.md">androidx.media3:media3-exoplayer-hls's changelog</a>.</em></p>
<blockquote>
<h3>1.5.1 (2024-12-19)</h3>
<p>This release includes the following changes since the
<a href="https://github.com/androidx/media/blob/release/#150-2024-11-27">1.5.0 release</a>:</p>
<ul>
<li>ExoPlayer:
<ul>
<li>Disable use of asynchronous decryption in MediaCodec to avoid reported
codec timeout issues with this platform API
(<a href="https://redirect.github.com/androidx/media/issues/1641">#1641</a>).</li>
</ul>
</li>
<li>Extractors:
<ul>
<li>MP3: Don't stop playback early when a <code>VBRI</code> frame's table of contents
doesn't cover all the MP3 data in a file
(<a href="https://redirect.github.com/androidx/media/issues/1904">#1904</a>).</li>
</ul>
</li>
<li>Video:
<ul>
<li>Rollback of using <code>MediaCodecAdapter</code> supplied pixel aspect ratio values
when provided while processing <code>onOutputFormatChanged</code>
(<a href="https://redirect.github.com/androidx/media/pull/1371">#1371</a>).</li>
</ul>
</li>
<li>Text:
<ul>
<li>Fix bug in <code>ReplacingCuesResolver.discardCuesBeforeTimeUs</code> where the cue
active at <code>timeUs</code> (started before but not yet ended) was incorrectly
discarded (<a href="https://redirect.github.com/androidx/media/issues/1939">#1939</a>).</li>
</ul>
</li>
<li>Metadata:
<ul>
<li>Extract disc/track numbering and genre from Vorbis comments into
<code>MediaMetadata</code>
(<a href="https://redirect.github.com/androidx/media/issues/1958">#1958</a>).</li>
</ul>
</li>
</ul>
<h3>1.5.0 (2024-11-27)</h3>
<p>This release includes the following changes since the
<a href="https://github.com/androidx/media/blob/release/#141-2024-08-23">1.4.1 release</a>:</p>
<ul>
<li>Common Library:
<ul>
<li>Add <code>ForwardingSimpleBasePlayer</code> that allows forwarding to another
player with small adjustments while ensuring full consistency and
listener handling
(<a href="https://redirect.github.com/androidx/media/issues/1183">#1183</a>).</li>
<li>Replace <code>SimpleBasePlayer.State.playlist</code> by <code>getPlaylist()</code> method.</li>
<li>Add override for <code>SimpleBasePlayer.State.Builder.setPlaylist()</code> to
directly specify a <code>Timeline</code> and current <code>Tracks</code> and <code>Metadata</code>
instead of building a playlist structure.</li>
<li>Increase <code>minSdk</code> to 21 (Android Lollipop). This is aligned with all
other AndroidX libraries.</li>
<li>Add <code>androidx.media3:media3-common-ktx</code> artifact which provides
Kotlin-specific functionality built on top of the Common library</li>
<li>Add <code>Player.listen</code> suspending extension function to spin a coroutine to
listen to <code>Player.Events</code> to the <code>media3-common-ktx</code> library.</li>
<li>Remove <code>@DoNotInline</code> annotations from manually out-of-lined inner
classes designed to avoid
<a href="https://chromium.googlesource.com/chromium/src/+/HEAD/build/android/docs/class_verification_failures.md">runtime class verification failures</a>.
Recent versions of <a href="https://developer.android.com/build/shrink-code">R8</a></li>
</ul>
</li>
</ul>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/androidx/media/commit/76088cd6af7f263aba238b7a48d64bd4f060cb8b"><code>76088cd</code></a> Bump Media3 version to 1.5.1</li>
<li><a href="https://github.com/androidx/media/commit/7ae9ddf1662b7174a2d82eb14a0f07fc5d7a3e95"><code>7ae9ddf</code></a> Update release notes for Media3 1.5.1 release</li>
<li><a href="https://github.com/androidx/media/commit/e4e59cd929af4d80b84d9a392ae82cb4aa07cf0b"><code>e4e59cd</code></a> Switch default of async crypto mode to disabled</li>
<li><a href="https://github.com/androidx/media/commit/508a4258a32c4f03ae69721a0609075d9d817b77"><code>508a425</code></a> Switch play FGS exemption to use custom action instead of commands</li>
<li><a href="https://github.com/androidx/media/commit/52f976179622c764794859195dbecd6bea4104a4"><code>52f9761</code></a> Don't check codec's profile for MV-HEVC video.</li>
<li><a href="https://github.com/androidx/media/commit/de91ebc6ae101cdd4c9e4246cb6840a7962aa38b"><code>de91ebc</code></a> Add vorbis comment support for track/disc numbering fields, and genre</li>
<li><a href="https://github.com/androidx/media/commit/5d9badcb502aebc57027ba407959344b55731e9d"><code>5d9badc</code></a> Fix ReplacingCuesResolver.discardCuesBeforeTimeUs to retain active cue</li>
<li><a href="https://github.com/androidx/media/commit/121b79ae96e334e79ec0f886fccf81357b9054d0"><code>121b79a</code></a> Merge pull request <a href="https://redirect.github.com/androidx/media/issues/1943">#1943</a> from DolbyLaboratories:dlb/ac4-ajoc/dev</li>
<li><a href="https://github.com/androidx/media/commit/fa9689ef9ad10d97f60b8b9496222ae0e2624cd5"><code>fa9689e</code></a> Clarify <code>CommandButton</code> javadoc around <code>iconResId</code> and <code>ICON_UNDEFINED</code></li>
<li><a href="https://github.com/androidx/media/commit/f5bbb39e90ef54e163e716e5b01122d730192503"><code>f5bbb39</code></a> Merge pull request <a href="https://redirect.github.com/androidx/media/issues/1823">#1823</a> from MGaetan89:remove_outdated_sdk_check</li>
<li>Additional commits viewable in <a href="https://github.com/androidx/media/compare/1.4.1...1.5.1">compare view</a></li>
</ul>
</details>
<br />
Updates androidx.media3:media3-exoplayer-dash from 1.4.1 to 1.5.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/androidx/media/releases">androidx.media3:media3-exoplayer-dash's releases</a>.</em></p>
<blockquote>
<h2>1.5.1</h2>
<p>This release includes the following changes since the <a href="https://github.com/androidx/media/blob/HEAD/#150-2024-11-27">1.5.0 release</a>:</p>
<ul>
<li>ExoPlayer:
<ul>
<li>Disable use of asynchronous decryption in MediaCodec to avoid reported codec timeout issues with this platform API (<a href="https://redirect.github.com/androidx/media/issues/1641">#1641</a>).</li>
</ul>
</li>
<li>Extractors:
<ul>
<li>MP3: Don't stop playback early when a <code>VBRI</code> frame's table of contents doesn't cover all the MP3 data in a file (<a href="https://redirect.github.com/androidx/media/issues/1904">#1904</a>).</li>
</ul>
</li>
<li>Video:
<ul>
<li>Rollback of using <code>MediaCodecAdapter</code> supplied pixel aspect ratio values when provided while processing <code>onOutputFormatChanged</code> (<a href="https://redirect.github.com/androidx/media/pull/1371">#1371</a>).</li>
</ul>
</li>
<li>Text:
<ul>
<li>Fix bug in <code>ReplacingCuesResolver.discardCuesBeforeTimeUs</code> where the cue active at <code>timeUs</code> (started before but not yet ended) was incorrectly discarded (<a href="https://redirect.github.com/androidx/media/issues/1939">#1939</a>).</li>
</ul>
</li>
<li>Metadata:
<ul>
<li>Extract disc/track numbering and genre from Vorbis comments into <code>MediaMetadata</code> (<a href="https://redirect.github.com/androidx/media/issues/1958">#1958</a>).</li>
</ul>
</li>
</ul>
<h2>1.5.0</h2>
<p>This release includes the following changes since the <a href="https://github.com/androidx/media/blob/HEAD/#141-2024-08-23">1.4.1 release</a>:</p>
<ul>
<li>Common Library:
<ul>
<li>Add <code>ForwardingSimpleBasePlayer</code> that allows forwarding to another player with small adjustments while ensuring full consistency and listener handling (<a href="https://redirect.github.com/androidx/media/issues/1183">#1183</a>).</li>
<li>Replace <code>SimpleBasePlayer.State.playlist</code> by <code>getPlaylist()</code> method.</li>
<li>Add override for <code>SimpleBasePlayer.State.Builder.setPlaylist()</code> to directly specify a <code>Timeline</code> and current <code>Tracks</code> and <code>Metadata</code> instead of building a playlist structure.</li>
<li>Increase <code>minSdk</code> to 21 (Android Lollipop). This is aligned with all other AndroidX libraries.</li>
<li>Add <code>androidx.media3:media3-common-ktx</code> artifact which provides Kotlin-specific functionality built on top of the Common library</li>
<li>Add <code>Player.listen</code> suspending extension function to spin a coroutine to listen to <code>Player.Events</code> to the <code>media3-common-ktx</code> library.</li>
<li>Remove <code>@DoNotInline</code> annotations from manually out-of-lined inner classes designed to avoid <a href="https://chromium.googlesource.com/chromium/src/+/HEAD/build/android/docs/class_verification_failures.md">runtime class verification failures</a>. Recent versions of <a href="https://developer.android.com/build/shrink-code">R8</a> now automatically out-of-line calls like these to avoid the runtime failures (so the manual out-of-lining is no longer required). All Gradle users of the library must already be a using a version of the Android Gradle Plugin that uses a version of R8 which does this, <a href="https://issuetracker.google.com/345472586#comment7">due to <code>compileSdk = 35</code></a>. Users of the library with non-Gradle build systems will need to ensure their R8-equivalent shrinking/obfuscating step does a similar automatic out-of-lining process in order to avoid runtime class verification failures. This change has <a href="http://r.android.com/3156141">already been done in other AndroidX libraries</a>.</li>
</ul>
</li>
<li>ExoPlayer:
<ul>
<li><code>MediaCodecRenderer.onProcessedStreamChange()</code> can now be called for every media item. Previously it was not called for the first one. Use <code>MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()</code> to enable this.</li>
<li>Add <code>PreloadMediaSource.PreloadControl.onPreloadError</code> to allow <code>PreloadMediaSource.PreloadControl</code> implementations to take actions when error occurs.</li>
<li>Add <code>BasePreloadManager.Listener</code> to propagate preload events to apps.</li>
<li>Allow changing SNTP client timeout and retry alternative addresses on timeout (<a href="https://redirect.github.com/androidx/media/issues/1540">#1540</a>).</li>
<li>Remove <code>MediaCodecAdapter.Configuration.flags</code> as the field was always zero.</li>
<li>Allow the user to select the built-in speaker for playback on Wear OS API 35+ (where the device advertises support for this).</li>
<li>Defer the blocking call to <code>Context.getSystemService(Context.AUDIO_SERVICE)</code> until audio focus handling is enabled. This ensures the blocking call isn't done if audio focus handling is not enabled (<a href="https://redirect.github.com/androidx/media/pull/1616">#1616</a>).</li>
<li>Allow playback regardless of buffered duration when loading fails (<a href="https://redirect.github.com/androidx/media/issues/1571">#1571</a>).</li>
<li>Add <code>AnalyticsListener.onRendererReadyChanged()</code> to signal when individual renderers allow playback to be ready.</li>
<li>Fix <code>MediaCodec.CryptoException</code> sometimes being reported as an "unexpected runtime error" when <code>MediaCodec</code> is operated in asynchronous mode (default behaviour on API 31+).</li>
<li>Pass <code>bufferedDurationUs</code> instead of <code>bufferedPositionUs</code> with <code>PreloadMediaSource.PreloadControl.onContinueLoadingRequested()</code>. Also changes <code>DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS</code> to <code>DefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS</code>, apps then need to pass a value representing a specific duration from the default start position for which the corresponding media source has to be preloaded with this IntDef, instead of a position.</li>
<li>Add <code>ForwardingRenderer</code> implementation that forwards all method calls to another renderer (<a href="https://redirect.github.com/androidx/media/pull/1703">1703</a>).</li>
<li>Add playlist preloading for the next item in the playlist. Apps can enable preloading by calling <code>ExoPlayer.setPreloadConfiguration(PreloadConfiguration)</code> accordingly. By default preloading is disabled. When opted-in and to not interfere with playback, <code>DefaultLoadControl</code> restricts preloading to start and continue only when the player is not loading for playback. Apps can change this behaviour by implementing <code>LoadControl.shouldContinuePreloading()</code> accordingly (like when overriding this method in <code>DefaultLoadControl</code>). The default implementation of <code>LoadControl</code> disables preloading in case an app is using a custom implementation of <code>LoadControl</code>.</li>
<li>Add method <code>MediaSourceEventListener.EventDispatcher.dispatchEvent()</code> to allow invoking events of subclass listeners (<a href="https://redirect.github.com/androidx/media/pull/1736">1736</a>).</li>
<li>Add <code>DefaultPreloadManager.Builder</code> that builds the <code>DefaultPreloadManager</code> and <code>ExoPlayer</code> instances with consistently shared configurations.</li>
<li>Remove <code>Renderer[]</code> parameter from <code>LoadControl.onTracksSelected()</code> as <code>DefaultLoadControl</code> implementation can retrieve the stream types from <code>ExoTrackSelection[]</code>.</li>
<li>Deprecated <code>DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])</code> and marked method as final to prevent overrides. The new <code>DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])</code> should be used instead.</li>
<li>Report <code>MediaSourceEventListener</code> events from secondary sources in <code>MergingMediaSource</code>. This will result in load start/error/cancelled/completed events being reported for sideloaded subtitles (those added with <code>MediaItem.LocalConfiguration.subtitleConfigurations</code>), which may appear as duplicate load events emitted from <code>AnalyticsListener</code>.</li>
<li>Prevent subtitle & metadata errors from completely stopping playback. Instead the problematic track is disabled and playback of the remaining tracks continues (<a href="https://redirect.github.com/google/ExoPlayer/issues/1722">#1722</a>).
<ul>
<li>In new subtitle handling (during extraction), associated parse (e.g. invalid subtitle data) and load errors (e.g. HTTP 404) are emitted via <code>onLoadError</code> callbacks.</li>
<li>In legacy subtitle handling (during rendering), only associated load errors are emitted via <code>onLoadError</code> callbacks while parse errors are silently ignored (this is pre-existing behaviour).</li>
</ul>
</li>
<li>Fix bug where playlist items or periods in multi-period DASH streams with durations that don't match the actual content could cause frame freezes at the end of the item (<a href="https://redirect.github.com/androidx/media/issues/1698">#1698</a>).</li>
<li>Add a setter to <code>SntpClient</code> to set the max elapsed time since the last update after which the client is re-initialized (<a href="https://redirect.github.com/androidx/media/pull/1794">#1794</a>).</li>
</ul>
</li>
<li>Transformer:</li>
</ul>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/androidx/media/blob/release/RELEASENOTES.md">androidx.media3:media3-exoplayer-dash's changelog</a>.</em></p>
<blockquote>
<h3>1.5.1 (2024-12-19)</h3>
<p>This release includes the following changes since the
<a href="https://github.com/androidx/media/blob/release/#150-2024-11-27">1.5.0 release</a>:</p>
<ul>
<li>ExoPlayer:
<ul>
<li>Disable use of asynchronous decryption in MediaCodec to avoid reported
codec timeout issues with this platform API
(<a href="https://redirect.github.com/androidx/media/issues/1641">#1641</a>).</li>
</ul>
</li>
<li>Extractors:
<ul>
<li>MP3: Don't stop playback early when a <code>VBRI</code> frame's table of contents
doesn't cover all the MP3 data in a file
(<a href="https://redirect.github.com/androidx/media/issues/1904">#1904</a>).</li>
</ul>
</li>
<li>Video:
<ul>
<li>Rollback of using <code>MediaCodecAdapter</code> supplied pixel aspect ratio values
when provided while processing <code>onOutputFormatChanged</code>
(<a href="https://redirect.github.com/androidx/media/pull/1371">#1371</a>).</li>
</ul>
</li>
<li>Text:
<ul>
<li>Fix bug in <code>ReplacingCuesResolver.discardCuesBeforeTimeUs</code> where the cue
active at <code>timeUs</code> (started before but not yet ended) was incorrectly
discarded (<a href="https://redirect.github.com/androidx/media/issues/1939">#1939</a>).</li>
</ul>
</li>
<li>Metadata:
<ul>
<li>Extract disc/track numbering and genre from Vorbis comments into
<code>MediaMetadata</code>
(<a href="https://redirect.github.com/androidx/media/issues/1958">#1958</a>).</li>
</ul>
</li>
</ul>
<h3>1.5.0 (2024-11-27)</h3>
<p>This release includes the following changes since the
<a href="https://github.com/androidx/media/blob/release/#141-2024-08-23">1.4.1 release</a>:</p>
<ul>
<li>Common Library:
<ul>
<li>Add <code>ForwardingSimpleBasePlayer</code> that allows forwarding to another
player with small adjustments while ensuring full consistency and
listener handling
(<a href="https://redirect.github.com/androidx/media/issues/1183">#1183</a>).</li>
<li>Replace <code>SimpleBasePlayer.State.playlist</code> by <code>getPlaylist()</code> method.</li>
<li>Add override for <code>SimpleBasePlayer.State.Builder.setPlaylist()</code> to
directly specify a <code>Timeline</code> and current <code>Tracks</code> and <code>Metadata</code>
instead of building a playlist structure.</li>
<li>Increase <code>minSdk</code> to 21 (Android Lollipop). This is aligned with all
other AndroidX libraries.</li>
<li>Add <code>androidx.media3:media3-common-ktx</code> artifact which provides
Kotlin-specific functionality built on top of the Common library</li>
<li>Add <code>Player.listen</code> suspending extension function to spin a coroutine to
listen to <code>Player.Events</code> to the <code>media3-common-ktx</code> library.</li>
<li>Remove <code>@DoNotInline</code> annotations from manually out-of-lined inner
classes designed to avoid
<a href="https://chromium.googlesource.com/chromium/src/+/HEAD/build/android/docs/class_verification_failures.md">runtime class verification failures</a>.
Recent versions of <a href="https://developer.android.com/build/shrink-code">R8</a></li>
</ul>
</li>
</ul>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/androidx/media/commit/76088cd6af7f263aba238b7a48d64bd4f060cb8b"><code>76088cd</code></a> Bump Media3 version to 1.5.1</li>
<li><a href="https://github.com/androidx/media/commit/7ae9ddf1662b7174a2d82eb14a0f07fc5d7a3e95"><code>7ae9ddf</code></a> Update release notes for Media3 1.5.1 release</li>
<li><a href="https://github.com/androidx/media/commit/e4e59cd929af4d80b84d9a392ae82cb4aa07cf0b"><code>e4e59cd</code></a> Switch default of async crypto mode to disabled</li>
<li><a href="https://github.com/androidx/media/commit/508a4258a32c4f03ae69721a0609075d9d817b77"><code>508a425</code></a> Switch play FGS exemption to use custom action instead of commands</li>
<li><a href="https://github.com/androidx/media/commit/52f976179622c764794859195dbecd6bea4104a4"><code>52f9761</code></a> Don't check codec's profile for MV-HEVC video.</li>
<li><a href="https://github.com/androidx/media/commit/de91ebc6ae101cdd4c9e4246cb6840a7962aa38b"><code>de91ebc</code></a> Add vorbis comment support for track/disc numbering fields, and genre</li>
<li><a href="https://github.com/androidx/media/commit/5d9badcb502aebc57027ba407959344b55731e9d"><code>5d9badc</code></a> Fix ReplacingCuesResolver.discardCuesBeforeTimeUs to retain active cue</li>
<li><a href="https://github.com/androidx/media/commit/121b79ae96e334e79ec0f886fccf81357b9054d0"><code>121b79a</code></a> Merge pull request <a href="https://redirect.github.com/androidx/media/issues/1943">#1943</a> from DolbyLaboratories:dlb/ac4-ajoc/dev</li>
<li><a href="https://github.com/androidx/media/commit/fa9689ef9ad10d97f60b8b9496222ae0e2624cd5"><code>fa9689e</code></a> Clarify <code>CommandButton</code> javadoc around <code>iconResId</code> and <code>ICON_UNDEFINED</code></li>
<li><a href="https://github.com/androidx/media/commit/f5bbb39e90ef54e163e716e5b01122d730192503"><code>f5bbb39</code></a> Merge pull request <a href="https://redirect.github.com/androidx/media/issues/1823">#1823</a> from MGaetan89:remove_outdated_sdk_check</li>
<li>Additional commits viewable in <a href="https://github.com/androidx/media/compare/1.4.1...1.5.1">compare view</a></li>
</ul>
</details>
<br />
Updates androidx.media3:media3-exoplayer-rtsp from 1.4.1 to 1.5.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/androidx/media/releases">androidx.media3:media3-exoplayer-rtsp's releases</a>.</em></p>
<blockquote>
<h2>1.5.1</h2>
<p>This release includes the following changes since the <a href="https://github.com/androidx/media/blob/HEAD/#150-2024-11-27">1.5.0 release</a>:</p>
<ul>
<li>ExoPlayer:
<ul>
<li>Disable use of asynchronous decryption in MediaCodec to avoid reported codec timeout issues with this platform API (<a href="https://redirect.github.com/androidx/media/issues/1641">#1641</a>).</li>
</ul>
</li>
<li>Extractors:
<ul>
<li>MP3: Don't stop playback early when a <code>VBRI</code> frame's table of contents doesn't cover all the MP3 data in a file (<a href="https://redirect.github.com/androidx/media/issues/1904">#1904</a>).</li>
</ul>
</li>
<li>Video:
<ul>
<li>Rollback of using <code>MediaCodecAdapter</code> supplied pixel aspect ratio values when provided while processing <code>onOutputFormatChanged</code> (<a href="https://redirect.github.com/androidx/media/pull/1371">#1371</a>).</li>
</ul>
</li>
<li>Text:
<ul>
<li>Fix bug in <code>ReplacingCuesResolver.discardCuesBeforeTimeUs</code> where the cue active at <code>timeUs</code> (started before but not yet ended) was incorrectly discarded (<a href="https://redirect.github.com/androidx/media/issues/1939">#1939</a>).</li>
</ul>
</li>
<li>Metadata:
<ul>
<li>Extract disc/track numbering and genre from Vorbis comments into <code>MediaMetadata</code> (<a href="https://redirect.github.com/androidx/media/issues/1958">#1958</a>).</li>
</ul>
</li>
</ul>
<h2>1.5.0</h2>
<p>This release includes the following changes since the <a href="https://github.com/androidx/media/blob/HEAD/#141-2024-08-23">1.4.1 release</a>:</p>
<ul>
<li>Common Library:
<ul>
<li>Add <code>ForwardingSimpleBasePlayer</code> that allows forwarding to another player with small adjustments while ensuring full consistency and listener handling (<a href="https://redirect.github.com/androidx/media/issues/1183">#1183</a>).</li>
<li>Replace <code>SimpleBasePlayer.State.playlist</code> by <code>getPlaylist()</code> method.</li>
<li>Add override for <code>SimpleBasePlayer.State.Builder.setPlaylist()</code> to directly specify a <code>Timeline</code> and current <code>Tracks</code> and <code>Metadata</code> instead of building a playlist structure.</li>
<li>Increase <code>minSdk</code> to 21 (Android Lollipop). This is aligned with all other AndroidX libraries.</li>
<li>Add <code>androidx.media3:media3-common-ktx</code> artifact which provides Kotlin-specific functionality built on top of the Common library</li>
<li>Add <code>Player.listen</code> suspending extension function to spin a coroutine to listen to <code>Player.Events</code> to the <code>media3-common-ktx</code> library.</li>
<li>Remove <code>@DoNotInline</code> annotations from manually out-of-lined inner classes designed to avoid <a href="https://chromium.googlesource.com/chromium/src/+/HEAD/build/android/docs/class_verification_failures.md">runtime class verification failures</a>. Recent versions of <a href="https://developer.android.com/build/shrink-code">R8</a> now automatically out-of-line calls like these to avoid the runtime failures (so the manual out-of-lining is no longer required). All Gradle users of the library must already be a using a version of the Android Gradle Plugin that uses a version of R8 which does this, <a href="https://issuetracker.google.com/345472586#comment7">due to <code>compileSdk = 35</code></a>. Users of the library with non-Gradle build systems will need to ensure their R8-equivalent shrinking/obfuscating step does a similar automatic out-of-lining process in order to avoid runtime class verification failures. This change has <a href="http://r.android.com/3156141">already been done in other AndroidX libraries</a>.</li>
</ul>
</li>
<li>ExoPlayer:
<ul>
<li><code>MediaCodecRenderer.onProcessedStreamChange()</code> can now be called for every media item. Previously it was not called for the first one. Use <code>MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()</code> to enable this.</li>
<li>Add <code>PreloadMediaSource.PreloadControl.onPreloadError</code> to allow <code>PreloadMediaSource.PreloadControl</code> implementations to take actions when error occurs.</li>
<li>Add <code>BasePreloadManager.Listener</code> to propagate preload events to apps.</li>
<li>Allow changing SNTP client timeout and retry alternative addresses on timeout (<a href="https://redirect.github.com/androidx/media/issues/1540">#1540</a>).</li>
<li>Remove <code>MediaCodecAdapter.Configuration.flags</code> as the field was always zero.</li>
<li>Allow the user to select the built-in speaker for playback on Wear OS API 35+ (where the device advertises support for this).</li>
<li>Defer the blocking call to <code>Context.getSystemService(Context.AUDIO_SERVICE)</code> until audio focus handling is enabled. This ensures the blocking call isn't done if audio focus handling is not enabled (<a href="https://redirect.github.com/androidx/media/pull/1616">#1616</a>).</li>
<li>Allow playback regardless of buffered duration when loading fails (<a href="https://redirect.github.com/androidx/media/issues/1571">#1571</a>).</li>
<li>Add <code>AnalyticsListener.onRendererReadyChanged()</code> to signal when individual renderers allow playback to be ready.</li>
<li>Fix <code>MediaCodec.CryptoException</code> sometimes being reported as an "unexpected runtime error" when <code>MediaCodec</code> is operated in asynchronous mode (default behaviour on API 31+).</li>
<li>Pass <code>bufferedDurationUs</code> instead of <code>bufferedPositionUs</code> with <code>PreloadMediaSource.PreloadControl.onContinueLoadingRequested()</code>. Also changes <code>DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS</code> to <code>DefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS</code>, apps then need to pass a value representing a specific duration from the default start position for which the corresponding media source has to be preloaded with this IntDef, instead of a position.</li>
<li>Add <code>ForwardingRenderer</code> implementation that forwards all method calls to another renderer (<a href="https://redirect.github.com/androidx/media/pull/1703">1703</a>).</li>
<li>Add playlist preloading for the next item in the playlist. Apps can enable preloading by calling <code>ExoPlayer.setPreloadConfiguration(PreloadConfiguration)</code> accordingly. By default preloading is disabled. When opted-in and to not interfere with playback, <code>DefaultLoadControl</code> restricts preloading to start and continue only when the player is not loading for playback. Apps can change this behaviour by implementing <code>LoadControl.shouldContinuePreloading()</code> accordingly (like when overriding this method in <code>DefaultLoadControl</code>). The default implementation of <code>LoadControl</code> disables preloading in case an app is using a custom implementation of <code>LoadControl</code>.</li>
<li>Add method <code>MediaSourceEventListener.EventDispatcher.dispatchEvent()</code> to allow invoking events of subclass listeners (<a href="https://redirect.github.com/androidx/media/pull/1736">1736</a>).</li>
<li>Add <code>DefaultPreloadManager.Builder</code> that builds the <code>DefaultPreloadManager</code> and <code>ExoPlayer</code> instances with consistently shared configurations.</li>
<li>Remove <code>Renderer[]</code> parameter from <code>LoadControl.onTracksSelected()</code> as <code>DefaultLoadControl</code> implementation can retrieve the stream types from <code>ExoTrackSelection[]</code>.</li>
<li>Deprecated <code>DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])</code> and marked method as final to prevent overrides. The new <code>DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])</code> should be used instead.</li>
<li>Report <code>MediaSourceEventListener</code> events from secondary sources in <code>MergingMediaSource</code>. This will result in load start/error/cancelled/completed events being reported for sideloaded subtitles (those added with <code>MediaItem.LocalConfiguration.subtitleConfigurations</code>), which may appear as duplicate load events emitted from <code>AnalyticsListener</code>.</li>
<li>Prevent subtitle & metadata errors from completely stopping playback. Instead the problematic track is disabled and playback of the remaining tracks continues (<a href="https://redirect.github.com/google/ExoPlayer/issues/1722">#1722</a>).
<ul>
<li>In new subtitle handling (during extraction), associated parse (e.g. invalid subtitle data) and load errors (e.g. HTTP 404) are emitted via <code>onLoadError</code> callbacks.</li>
<li>In legacy subtitle handling (during rendering), only associated load errors are emitted via <code>onLoadError</code> callbacks while parse errors are silently ignored (this is pre-existing behaviour).</li>
</ul>
</li>
<li>Fix bug where playlist items or periods in multi-period DASH streams with durations that don't match the actual content could cause frame freezes at the end of the item (<a href="https://redirect.github.com/androidx/media/issues/1698">#1698</a>).</li>
<li>Add a setter to <code>SntpClient</code> to set the max elapsed time since the last update after which the client is re-initialized (<a href="https://redirect.github.com/androidx/media/pull/1794">#1794</a>).</li>
</ul>
</li>
<li>Transformer:</li>
</ul>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/androidx/media/blob/release/RELEASENOTES.md">androidx.media3:media3-exoplayer-rtsp's changelog</a>.</em></p>
<blockquote>
<h3>1.5.1 (2024-12-19)</h3>
<p>This release includes the following changes since the
<a href="https://github.com/androidx/media/blob/release/#150-2024-11-27">1.5.0 release</a>:</p>
<ul>
<li>ExoPlayer:
<ul>
<li>Disable use of asynchronous decryption in MediaCodec to avoid reported
codec timeout issues with this platform API
(<a href="https://redirect.github.com/androidx/media/issues/1641">#1641</a>).</li>
</ul>
</li>
<li>Extractors:
<ul>
<li>MP3: Don't stop playback early when a <code>VBRI</code> frame's table of contents
doesn't cover all the MP3 data in a file
(<a href="https://redirect.github.com/androidx/media/issues/1904">#1904</a>).</li>
</ul>
</li>
<li>Video:
<ul>
<li>Rollback of using <code>MediaCodecAdapter</code> supplied pixel aspect ratio values
when provided while processing <code>onOutputFormatChanged</code>
(<a href="https://redirect.github.com/androidx/media/pull/1371">#1371</a>).</li>
</ul>
</li>
<li>Text:
<ul>
<li>Fix bug in <code>ReplacingCuesResolver.discardCuesBeforeTimeUs</code> where the cue
active at <code>timeUs</code> (started before but not yet ended) was incorrectly
discarded (<a href="https://redirect.github.com/androidx/media/issues/1939">#1939</a>).</li>
</ul>
</li>
<li>Metadata:
<ul>
<li>Extract disc/track numbering and genre from Vorbis comments into
<code>MediaMetadata</code>
(<a href="https://redirect.github.com/androidx/media/issues/1958">#1958</a>).</li>
</ul>
</li>
</ul>
<h3>1.5.0 (2024-11-27)</h3>
<p>This release includes the following changes since the
<a href="https://github.com/androidx/media/blob/release/#141-2024-08-23">1.4.1 release</a>:</p>
<ul>
<li>Common Library:
<ul>
<li>Add <code>ForwardingSimpleBasePlayer</code> that allows forwarding to another
player with small adjustments while ensuring full consistency and
listener handling
(<a href="https://redirect.github.com/androidx/media/issues/1183">#1183</a>).</li>
<li>Replace <code>SimpleBasePlayer.State.playlist</code> by <code>getPlaylist()</code> method.</li>
<li>Add override for <code>SimpleBasePlayer.State.Builder.setPlaylist()</code> to
directly specify a <code>Timeline</code> and current <code>Tracks</code> and <code>Metadata</code>
instead of building a playlist structure.</li>
<li>Increase <code>minSdk</code> to 21 (Android Lollipop). This is aligned with all
other AndroidX libraries.</li>
<li>Add <code>androidx.media3:media3-common-ktx</code> artifact which provides
Kotlin-specific functionality built on top of the Common library</li>
<li>Add <code>Player.listen</code> suspending extension function to spin a coroutine to
listen to <code>Player.Events</code> to the <code>media3-common-ktx</code> library.</li>
<li>Remove <code>@DoNotInline</code> annotations from manually out-of-lined inner
classes designed to avoid
<a href="https://chromium.googlesource.com/chromium/src/+/HEAD/build/android/docs/class_verification_failures.md">runtime class verification failures</a>.
Recent versions of <a href="https://developer.android.com/build/shrink-code">R8</a></li>
</ul>
</li>
</ul>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/androidx/media/commit/76088cd6af7f263aba238b7a48d64bd4f060cb8b"><code>76088cd</code></a> Bump Media3 version to 1.5.1</li>
<li><a href="https://github.com/androidx/media/commit/7ae9ddf1662b7174a2d82eb14a0f07fc5d7a3e95"><code>7ae9ddf</code></a> Update release notes for Media3 1.5.1 release</li>
<li><a href="https://github.com/androidx/media/commit/e4e59cd929af4d80b84d9a392ae82cb4aa07cf0b"><code>e4e59cd</code></a> Switch default of async crypto mode to disabled</li>
<li><a href="https://github.com/androidx/media/commit/508a4258a32c4f03ae69721a0609075d9d817b77"><code>508a425</code></a> Switch play FGS exemption to use custom action instead of commands</li>
<li><a href="https://github.com/androidx/media/commit/52f976179622c764794859195dbecd6bea4104a4"><code>52f9761</code></a> Don't check codec's profile for MV-HEVC video.</li>
<li><a href="https://github.com/androidx/media/commit/de91ebc6ae101cdd4c9e4246cb6840a7962aa38b"><code>de91ebc</code></a> Add vorbis comment support for track/disc numbering fields, and genre</li>
<li><a href="https://github.com/androidx/media/commit/5d9badcb502aebc57027ba407959344b55731e9d"><code>5d9badc</code></a> Fix ReplacingCuesResolver.discardCuesBeforeTimeUs to retain active cue</li>
<li><a href="https://github.com/androidx/media/commit/121b79ae96e334e79ec0f886fccf81357b9054d0"><code>121b79a</code></a> Merge pull request <a href="https://redirect.github.com/androidx/media/issues/1943">#1943</a> from DolbyLaboratories:dlb/ac4-ajoc/dev</li>
<li><a href="https://github.com/androidx/media/commit/fa9689ef9ad10d97f60b8b9496222ae0e2624cd5"><code>fa9689e</code></a> Clarify <code>CommandButton</code> javadoc around <code>iconResId</code> and <code>ICON_UNDEFINED</code></li>
<li><a href="https://github.com/androidx/media/commit/f5bbb39e90ef54e163e716e5b01122d730192503"><code>f5bbb39</code></a> Merge pull request <a href="https://redirect.github.com/androidx/media/issues/1823">#1823</a> from MGaetan89:remove_outdated_sdk_check</li>
<li>Additional commits viewable in <a href="https://github.com/androidx/media/compare/1.4.1...1.5.1">compare view</a></li>
</ul>
</details>
<br />
Updates androidx.media3:media3-exoplayer-smoothstreaming from 1.4.1 to 1.5.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/androidx/media/releases">androidx.media3:media3-exoplayer-smoothstreaming's releases</a>.</em></p>
<blockquote>
<h2>1.5.1</h2>
<p>This release includes the following changes since the <a href="https://github.com/androidx/media/blob/HEAD/#150-2024-11-27">1.5.0 release</a>:</p>
<ul>
<li>ExoPlayer:
<ul>
<li>Disable use of asynchronous decryption in MediaCodec to avoid reported codec timeout issues with this platform API (<a href="https://redirect.github.com/androidx/media/issues/1641">#1641</a>).</li>
</ul>
</li>
<li>Extractors:
<ul>
<li>MP3: Don't stop playback early when a <code>VBRI</code> frame's table of contents doesn't cover all the MP3 data in a file (<a href="https://redirect.github.com/androidx/media/issues/1904">#1904</a>).</li>
</ul>
</li>
<li>Video:
<ul>
<li>Rollback of using <code>MediaCodecAdapter</code> supplied pixel aspect ratio values when provided while processing <code>onOutputFormatChanged</code> (<a href="https://redirect.github.com/androidx/media/pull/1371">#1371</a>).</li>
</ul>
</li>
<li>Text:
<ul>
<li>Fix bug in <code>ReplacingCuesResolver.discardCuesBeforeTimeUs</code> where the cue active at <code>timeUs</code> (started before but not yet ended) was incorrectly discarded (<a href="https://redirect.github.com/androidx/media/issues/1939">#1939</a>).</li>
</ul>
</li>
<li>Metadata:
<ul>
<li>Extract disc/track numbering and genre from Vorbis comments into <code>MediaMetadata</code> (<a href="https://redirect.github.com/androidx/media/issues/1958">#1958</a>).</li>
</ul>
</li>
</ul>
<h2>1.5.0</h2>
<p>This release includes the following changes since the <a href="https://github.com/androidx/media/blob/HEAD/#141-2024-08-23">1.4.1 release</a>:</p>
<ul>
<li>Common Library:
<ul>
<li>Add <code>ForwardingSimpleBasePlayer</code> that allows forwarding to another player with small adjustments while ensuring full consistency and listener handling (<a href="https://redirect.github.com/androidx/media/issues/1183">#1183</a>).</li>
<li>Replace <code>SimpleBasePlayer.State.playlist</code> by <code>getPlaylist()</code> method.</li>
<li>Add override for <code>SimpleBasePlayer.State.Builder.setPlaylist()</code> to directly specify a <code>Timeline</code> and current <code>Tracks</code> and <code>Metadata</code> instead of building a playlist structure.</li>
<li>Increase <code>minSdk</code> to 21 (Android Lollipop). This is aligned with all other AndroidX libraries.</li>
<li>Add <code>androidx.media3:media3-common-ktx</code> artifact which provides Kotlin-specific functionality built on top of the Common library</li>
<li>Add <code>Player.listen</code> suspending extension function to spin a coroutine to listen to <code>Player.Events</code> to the <code>media3-common-ktx</code> library.</li>
<li>Remove <code>@DoNotInline</code> annotations from manually out-of-lined inner classes designed to avoid <a href="https://chromium.googlesource.com/chromium/src/+/HEAD/build/android/docs/class_verification_failures.md">runtime class verification failures</a>. Recent versions of <a href="https://developer.android.com/build/shrink-code">R8</a> now automatically out-of-line calls like these to avoid the runtime failures (so the manual out-of-lining is no longer required). All Gradle users of the library must already be a using a version of the Android Gradle Plugin that uses a version of R8 which does this, <a href="https://issuetracker.google.com/345472586#comment7">due to <code>compileSdk = 35</code></a>. Users of the library with non-Gradle build systems will need to ensure their R8-equivalent shrinking/obfuscating step does a similar automatic out-of-lining process in order to avoid runtime class verification failures. This change has <a href="http://r.android.com/3156141">already been done in other AndroidX libraries</a>.</li>
</ul>
</li>
<li>ExoPlayer:
<ul>
<li><code>MediaCodecRenderer.onProcessedStreamChange()</code> can now be called for every media item. Previously it was not called for the first one. Use <code>MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()</code> to enable this.</li>
<li>Add <code>PreloadMediaSource.PreloadControl.onPreloadError</code> to allow <code>PreloadMediaSource.PreloadControl</code> implementations to take actions when error occurs.</li>
<li>Add <code>BasePreloadManager.Listener</code> to propagate preload events to apps.</li>
<li>Allow changing SNTP client timeout and retry alternative addresses on timeout (<a href="https://redirect.github.com/androidx/media/issues/1540">#1540</a>).</li>
<li>Remove <code>MediaCodecAdapter.Configuration.flags</code> as the fie...
_Description has been truncated_
> **Note**
> Automatic rebases have been disabled on this pull request as it has been open for over 30 days.
[video_player] Use CADisplayLink on macOS 14.0+ (#9533)
Marks the CVDisplayLink-based implementation that was previously used on macOS in all cases with deprecation suppressions, and switches macOS 14+ to share the CADisplayLink-based implementation that is currently used for iOS.
Fixes https://github.com/flutter/flutter/issues/171391
## Pre-Review Checklist
[^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling.