Skip to content

Commit

Permalink
[video_player]: Bump exoplayer_version from 1.3.1 to 1.4.0 in /packag…
Browse files Browse the repository at this point in the history
…es/video_player/video_player_android/android (flutter#7241)

Bumps `exoplayer_version` from 1.3.1 to 1.4.0.
Updates `androidx.media3:media3-exoplayer` from 1.3.1 to 1.4.0
<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.4.0</h2>
<p>This release includes the following changes since the <a href="https://github.com/androidx/media/blob/HEAD/#131-2024-04-11">1.3.1 release</a>:</p>
<ul>
<li>Common Library:
<ul>
<li>Forward presumed no-op seek calls to the protected <code>BasePlayer.seekTo()</code> and <code>SimpleBasePlayer.handleSeek()</code> methods instead of ignoring them. If you are implementing these methods in a custom player, you may need to handle these additional calls with <code>mediaItemIndex == C.INDEX_UNSET</code>.</li>
<li>Remove compile dependency on enhanced Java 8 desugaring (<a href="https://redirect.github.com/androidx/media/issues/1312">#1312</a>).</li>
<li>Ensure the duration passed to <code>MediaItem.Builder.setImageDurationMs()</code> is ignored for a non-image <code>MediaItem</code> (as documented).</li>
<li>Add <code>Format.customData</code> to store app-provided custom information about <code>Format</code> instances.</li>
</ul>
</li>
<li>ExoPlayer:
<ul>
<li>Add <code>BasePreloadManager</code> which coordinates the preloading for multiple sources based on the priorities defined by their <code>rankingData</code>. Customization is possible by extending this class. Add <code>DefaultPreloadManager</code> which uses <code>PreloadMediaSource</code> to preload media samples of the sources into memory, and uses an integer <code>rankingData</code> that indicates the index of an item on the UI.</li>
<li>Add <code>PlayerId</code> to most methods of <code>LoadControl</code> to enable <code>LoadControl</code> implementations to support multiple players.</li>
<li>Remove <code>Buffer.isDecodeOnly()</code> and <code>C.BUFFER_FLAG_DECODE_ONLY</code>. There is no need to set this flag as renderers and decoders will decide to skip buffers based on timestamp. Custom <code>Renderer</code> implementations should check if the buffer time is at least <code>BaseRenderer.getLastResetPositionUs()</code> to decide whether a sample should be shown. Custom <code>SimpleDecoder</code> implementations can check <code>isAtLeastOutputStartTimeUs()</code> if needed or mark other buffers with <code>DecoderOutputBuffer.shouldBeSkipped</code> to skip them.</li>
<li>Allow a null value to be returned by <code>TargetPreloadStatusControl.getTargetPreloadStatus(T)</code> to indicate not to preload a <code>MediaSource</code> with the given <code>rankingData</code>.</li>
<li>Add <code>remove(MediaSource)</code> to <code>BasePreloadManager</code>.</li>
<li>Add <code>reset()</code> to <code>BasePreloadManager</code> to release all the holding sources while keep the preload manager instance.</li>
<li>Add <code>ExoPlayer.setPriority()</code> (and <code>Builder.setPriority()</code>) to define the priority value used in <code>PriorityTaskManager</code> and for MediaCodec importance from API 35.</li>
<li>Fix issue with updating the last rebuffer time which resulted in incorrect <code>bs</code> (buffer starvation) key in CMCD (<a href="https://redirect.github.com/androidx/media/issues/1124">#1124</a>).</li>
<li>Add <code>PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)</code> to indicate that the source has loaded to the end. This allows the <code>DefaultPreloadManager</code> and the custom <code>PreloadMediaSource.PreloadControl</code> implementations to preload the next source or take other actions.</li>
<li>Fix bug where silence skipping at the end of items can trigger a playback exception.</li>
<li>Add <code>clear</code> to <code>PreloadMediaSource</code> to discard the preloading period.</li>
<li>Add new error code <code>PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED</code> that is used when codec resources are reclaimed for higher priority tasks.</li>
<li>Let <code>AdsMediaSource</code> load preroll ads before initial content media preparation completes (<a href="https://redirect.github.com/androidx/media/issues/1358">#1358</a>).</li>
<li>Fix bug where playback moved to <code>STATE_ENDED</code> when re-preparing a multi-period DASH live stream after the original period was already removed from the manifest.</li>
<li>Rename <code>onTimelineRefreshed()</code> to <code>onSourcePrepared()</code> and <code>onPrepared()</code> to <code>onTracksSelected()</code> in <code>PreloadMediaSource.PreloadControl</code>. Also rename the IntDefs in <code>DefaultPreloadManager.Stage</code> accordingly.</li>
<li>Add experimental support for dynamic scheduling to better align work with CPU wake-cycles and delay waking up to when renderers can progress. You can enable this using <code>experimentalSetDynamicSchedulingEnabled()</code> when setting up your ExoPlayer instance.</li>
<li>Add <code>Renderer.getDurationToProgressUs()</code>. A <code>Renderer</code> can implement this method to return to ExoPlayer the duration that playback must advance for the renderer to progress. If <code>ExoPlayer</code> is set with <code>experimentalSetDynamicSchedulingEnabled()</code> then <code>ExoPlayer</code> will call this method when calculating the time to schedule its work task.</li>
<li>Add <code>MediaCodecAdapter#OnBufferAvailableListener</code> to alert when input and output buffers are available for use by <code>MediaCodecRenderer</code>. <code>MediaCodecRenderer</code> will signal <code>ExoPlayer</code> when receiving these callbacks and if <code>ExoPlayer</code> is set with <code>experimentalSetDynamicSchedulingEnabled()</code>, then <code>ExoPlayer</code> will schedule its work loop as renderers can make progress.</li>
<li>Use data class for <code>LoadControl</code> methods instead of individual parameters.</li>
<li>Add <code>ExoPlayer.isReleased()</code> to check whether <code>Exoplayer.release()</code> has been called.</li>
<li>Add <code>ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()</code> to configure the maximum position for which <code>seekToPrevious()</code> seeks to the previous item (<a href="https://redirect.github.com/androidx/media/issues/1425">#1425</a>).</li>
<li>Fix some audio focus inconsistencies, e.g. not reporting full or transient focus loss while the player is paused (<a href="https://redirect.github.com/androidx/media/issues/1436">#1436</a>).</li>
<li>Fix potential <code>IndexOutOfBoundsException</code> caused by extractors reporting additional tracks after the initial preparation step (<a href="https://redirect.github.com/androidx/media/issues/1476">#1476</a>).</li>
<li><code>Effects</code> in <code>ExoPlayer.setVideoEffect()</code> will receive the timestamps with the renderer offset removed (<a href="https://redirect.github.com/androidx/media/issues/1098">#1098</a>).</li>
<li>Fix potential <code>IllegalArgumentException</code> when handling player error that happened while reading ahead into another playlist item (<a href="https://redirect.github.com/androidx/media/issues/1483">#1483</a>).</li>
</ul>
</li>
<li>Transformer:
<ul>
<li>Add <code>audioConversionProcess</code> and <code>videoConversionProcess</code> to <code>ExportResult</code> indicating how the respective track in the output file was made.</li>
<li>Relax trim optimization H.264 level checks.</li>
<li>Add support for changing between SDR and HDR input media in a sequence.</li>
<li>Add support for composition-level audio effects.</li>
<li>Add support for transcoding Ultra HDR images into HDR videos.</li>
<li>Fix issue where the <code>DefaultAudioMixer</code> does not output the correct amount of bytes after being reset and reused.</li>
<li>Work around a decoder bug where the number of audio channels was capped at stereo when handling PCM input.</li>
<li>When selecting tracks in <code>ExoPlayerAssetLoader</code>, ignore audio channel count constraints as they only apply for playback.</li>
<li>Replace <code>androidx.media3.transformer.Muxer</code> interface with <code>androidx.media3.muxer.Muxer</code> and remove <code>androidx.media3.transformer.Muxer</code>.</li>
<li>Fix HEIC image loading from content URI schemes (<a href="https://redirect.github.com/androidx/media/issues/1373">#1373</a>).</li>
<li>Adjust audio track duration in <code>AudioGraphInput</code> to improve AV sync.</li>
<li>Remove <code>ExportResult.processedInputs</code> field. If you use this field for codec details, then use <code>DefaultDecoderFactory.listener</code> instead. In case of a codec exception, codec details will be available in the <code>ExportException.codecInfo</code>.</li>
</ul>
</li>
<li>Extractors:
<ul>
<li>MPEG-TS: Roll forward the change ensuring the last frame is rendered by passing the last access unit of a stream to the sample queue (<a href="https://redirect.github.com/google/ExoPlayer/issues/7909">#7909</a>). Incorporating fixes to resolve the issues that emerged in I-frame only HLS streams(<a href="https://redirect.github.com/androidx/media/issues/1150">#1150</a>) and H.262 HLS streams (<a href="https://redirect.github.com/androidx/media/issues/1126">#1126</a>).</li>
<li>MP3: Prefer the data size from an <code>Info</code> frame over the size reported by the underlying stream (e.g. file size, or HTTP <code>Content-Length</code> header). This helps to exclude non-playable trailer data (e.g. album artwork) from constant bitrate seeking calculations, making seeks more accurate (<a href="https://redirect.github.com/androidx/media/issues/1376">#1376</a>).</li>
</ul>
</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.4.0 (2024-07-24)</h3>
<p>This release includes the following changes since the
<a href="https://github.com/androidx/media/blob/release/#131-2024-04-11">1.3.1 release</a>:</p>
<ul>
<li>Common Library:
<ul>
<li>Forward presumed no-op seek calls to the protected <code>BasePlayer.seekTo()</code>
and <code>SimpleBasePlayer.handleSeek()</code> methods instead of ignoring them. If
you are implementing these methods in a custom player, you may need to
handle these additional calls with <code>mediaItemIndex == C.INDEX_UNSET</code>.</li>
<li>Remove compile dependency on enhanced Java 8 desugaring
(<a href="https://redirect.github.com/androidx/media/issues/1312">#1312</a>).</li>
<li>Ensure the duration passed to <code>MediaItem.Builder.setImageDurationMs()</code>
is ignored for a non-image <code>MediaItem</code> (as documented).</li>
<li>Add <code>Format.customData</code> to store app-provided custom information about
<code>Format</code> instances.</li>
</ul>
</li>
<li>ExoPlayer:
<ul>
<li>Add <code>BasePreloadManager</code> which coordinates the preloading for multiple
sources based on the priorities defined by their <code>rankingData</code>.
Customization is possible by extending this class. Add
<code>DefaultPreloadManager</code> which uses <code>PreloadMediaSource</code> to preload media
samples of the sources into memory, and uses an integer <code>rankingData</code>
that indicates the index of an item on the UI.</li>
<li>Add <code>PlayerId</code> to most methods of <code>LoadControl</code> to enable <code>LoadControl</code>
implementations to support multiple players.</li>
<li>Remove <code>Buffer.isDecodeOnly()</code> and <code>C.BUFFER_FLAG_DECODE_ONLY</code>. There is
no need to set this flag as renderers and decoders will decide to skip
buffers based on timestamp. Custom <code>Renderer</code> implementations should
check if the buffer time is at least
<code>BaseRenderer.getLastResetPositionUs()</code> to decide whether a sample
should be shown. Custom <code>SimpleDecoder</code> implementations can check
<code>isAtLeastOutputStartTimeUs()</code> if needed or mark other buffers with
<code>DecoderOutputBuffer.shouldBeSkipped</code> to skip them.</li>
<li>Allow a null value to be returned by
<code>TargetPreloadStatusControl.getTargetPreloadStatus(T)</code> to indicate not
to preload a <code>MediaSource</code> with the given <code>rankingData</code>.</li>
<li>Add <code>remove(MediaSource)</code> to <code>BasePreloadManager</code>.</li>
<li>Add <code>reset()</code> to <code>BasePreloadManager</code> to release all the holding sources
while keep the preload manager instance.</li>
<li>Add <code>ExoPlayer.setPriority()</code> (and <code>Builder.setPriority()</code>) to define
the priority value used in <code>PriorityTaskManager</code> and for MediaCodec
importance from API 35.</li>
<li>Fix issue with updating the last rebuffer time which resulted in
incorrect <code>bs</code> (buffer starvation) key in CMCD
(<a href="https://redirect.github.com/androidx/media/issues/1124">#1124</a>).</li>
<li>Add
<code>PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)</code>
to indicate that the source has loaded to the end. This allows the
<code>DefaultPreloadManager</code> and the custom
<code>PreloadMediaSource.PreloadControl</code> implementations to preload the next</li>
</ul>
</li>
</ul>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/androidx/media/commit/b01c6ffcb3fca3d038476dab5d3bc9c9f2010781"><code>b01c6ff</code></a> Merge branch 'release' into release-1.4.0</li>
<li><a href="https://github.com/androidx/media/commit/9fb731669649dc0002649c9fb49fb8410d39b111"><code>9fb7316</code></a> Fix the release notes for 1.4.0 stable release</li>
<li><a href="https://github.com/androidx/media/commit/4e6a643d883c535690233e291b2d72c19c2393b0"><code>4e6a643</code></a> Update media3 version for 1.4.0 stable release</li>
<li><a href="https://github.com/androidx/media/commit/18a1582e8c18a56f2ed9e468a6acb3b9c57aa98a"><code>18a1582</code></a> Fix the release notes for 1.4.0 stable release</li>
<li><a href="https://github.com/androidx/media/commit/1dfab4f73ae29f4ec4ec9751e9e7dcb87a66e049"><code>1dfab4f</code></a> Merge release notes for media3 1.4.0 stable release</li>
<li><a href="https://github.com/androidx/media/commit/567204e986804ab17abfdb41d909547a03bdf36e"><code>567204e</code></a> Version bump to 1.4.0-rc01</li>
<li><a href="https://github.com/androidx/media/commit/75dadeaa9e341ebdd3a1095ed3e22f08ab4d5376"><code>75dadea</code></a> Update release notes for 1.4.0-rc01</li>
<li><a href="https://github.com/androidx/media/commit/d97ec132b9d689334f14eaaa194fea3a19860a63"><code>d97ec13</code></a> Suppress the lint &quot;WrongConstant&quot; error</li>
<li><a href="https://github.com/androidx/media/commit/6946f499972d8066721ba2a4d2b972ebaf1b0a6d"><code>6946f49</code></a> Add OptIn annotation to method declaration in demo app file</li>
<li><a href="https://github.com/androidx/media/commit/5b60f6c67d28cf8e8c3f827a85e7d53b8bd23d90"><code>5b60f6c</code></a> Fix index out of bounds exception when a <code>Subtitle</code> is empty</li>
<li>Additional commits viewable in <a href="https://github.com/androidx/media/compare/1.3.1...1.4.0">compare view</a></li>
</ul>
</details>
<br />

Updates `androidx.media3:media3-exoplayer-hls` from 1.3.1 to 1.4.0
<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.4.0</h2>
<p>This release includes the following changes since the <a href="https://github.com/androidx/media/blob/HEAD/#131-2024-04-11">1.3.1 release</a>:</p>
<ul>
<li>Common Library:
<ul>
<li>Forward presumed no-op seek calls to the protected <code>BasePlayer.seekTo()</code> and <code>SimpleBasePlayer.handleSeek()</code> methods instead of ignoring them. If you are implementing these methods in a custom player, you may need to handle these additional calls with <code>mediaItemIndex == C.INDEX_UNSET</code>.</li>
<li>Remove compile dependency on enhanced Java 8 desugaring (<a href="https://redirect.github.com/androidx/media/issues/1312">#1312</a>).</li>
<li>Ensure the duration passed to <code>MediaItem.Builder.setImageDurationMs()</code> is ignored for a non-image <code>MediaItem</code> (as documented).</li>
<li>Add <code>Format.customData</code> to store app-provided custom information about <code>Format</code> instances.</li>
</ul>
</li>
<li>ExoPlayer:
<ul>
<li>Add <code>BasePreloadManager</code> which coordinates the preloading for multiple sources based on the priorities defined by their <code>rankingData</code>. Customization is possible by extending this class. Add <code>DefaultPreloadManager</code> which uses <code>PreloadMediaSource</code> to preload media samples of the sources into memory, and uses an integer <code>rankingData</code> that indicates the index of an item on the UI.</li>
<li>Add <code>PlayerId</code> to most methods of <code>LoadControl</code> to enable <code>LoadControl</code> implementations to support multiple players.</li>
<li>Remove <code>Buffer.isDecodeOnly()</code> and <code>C.BUFFER_FLAG_DECODE_ONLY</code>. There is no need to set this flag as renderers and decoders will decide to skip buffers based on timestamp. Custom <code>Renderer</code> implementations should check if the buffer time is at least <code>BaseRenderer.getLastResetPositionUs()</code> to decide whether a sample should be shown. Custom <code>SimpleDecoder</code> implementations can check <code>isAtLeastOutputStartTimeUs()</code> if needed or mark other buffers with <code>DecoderOutputBuffer.shouldBeSkipped</code> to skip them.</li>
<li>Allow a null value to be returned by <code>TargetPreloadStatusControl.getTargetPreloadStatus(T)</code> to indicate not to preload a <code>MediaSource</code> with the given <code>rankingData</code>.</li>
<li>Add <code>remove(MediaSource)</code> to <code>BasePreloadManager</code>.</li>
<li>Add <code>reset()</code> to <code>BasePreloadManager</code> to release all the holding sources while keep the preload manager instance.</li>
<li>Add <code>ExoPlayer.setPriority()</code> (and <code>Builder.setPriority()</code>) to define the priority value used in <code>PriorityTaskManager</code> and for MediaCodec importance from API 35.</li>
<li>Fix issue with updating the last rebuffer time which resulted in incorrect <code>bs</code> (buffer starvation) key in CMCD (<a href="https://redirect.github.com/androidx/media/issues/1124">#1124</a>).</li>
<li>Add <code>PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)</code> to indicate that the source has loaded to the end. This allows the <code>DefaultPreloadManager</code> and the custom <code>PreloadMediaSource.PreloadControl</code> implementations to preload the next source or take other actions.</li>
<li>Fix bug where silence skipping at the end of items can trigger a playback exception.</li>
<li>Add <code>clear</code> to <code>PreloadMediaSource</code> to discard the preloading period.</li>
<li>Add new error code <code>PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED</code> that is used when codec resources are reclaimed for higher priority tasks.</li>
<li>Let <code>AdsMediaSource</code> load preroll ads before initial content media preparation completes (<a href="https://redirect.github.com/androidx/media/issues/1358">#1358</a>).</li>
<li>Fix bug where playback moved to <code>STATE_ENDED</code> when re-preparing a multi-period DASH live stream after the original period was already removed from the manifest.</li>
<li>Rename <code>onTimelineRefreshed()</code> to <code>onSourcePrepared()</code> and <code>onPrepared()</code> to <code>onTracksSelected()</code> in <code>PreloadMediaSource.PreloadControl</code>. Also rename the IntDefs in <code>DefaultPreloadManager.Stage</code> accordingly.</li>
<li>Add experimental support for dynamic scheduling to better align work with CPU wake-cycles and delay waking up to when renderers can progress. You can enable this using <code>experimentalSetDynamicSchedulingEnabled()</code> when setting up your ExoPlayer instance.</li>
<li>Add <code>Renderer.getDurationToProgressUs()</code>. A <code>Renderer</code> can implement this method to return to ExoPlayer the duration that playback must advance for the renderer to progress. If <code>ExoPlayer</code> is set with <code>experimentalSetDynamicSchedulingEnabled()</code> then <code>ExoPlayer</code> will call this method when calculating the time to schedule its work task.</li>
<li>Add <code>MediaCodecAdapter#OnBufferAvailableListener</code> to alert when input and output buffers are available for use by <code>MediaCodecRenderer</code>. <code>MediaCodecRenderer</code> will signal <code>ExoPlayer</code> when receiving these callbacks and if <code>ExoPlayer</code> is set with <code>experimentalSetDynamicSchedulingEnabled()</code>, then <code>ExoPlayer</code> will schedule its work loop as renderers can make progress.</li>
<li>Use data class for <code>LoadControl</code> methods instead of individual parameters.</li>
<li>Add <code>ExoPlayer.isReleased()</code> to check whether <code>Exoplayer.release()</code> has been called.</li>
<li>Add <code>ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()</code> to configure the maximum position for which <code>seekToPrevious()</code> seeks to the previous item (<a href="https://redirect.github.com/androidx/media/issues/1425">#1425</a>).</li>
<li>Fix some audio focus inconsistencies, e.g. not reporting full or transient focus loss while the player is paused (<a href="https://redirect.github.com/androidx/media/issues/1436">#1436</a>).</li>
<li>Fix potential <code>IndexOutOfBoundsException</code> caused by extractors reporting additional tracks after the initial preparation step (<a href="https://redirect.github.com/androidx/media/issues/1476">#1476</a>).</li>
<li><code>Effects</code> in <code>ExoPlayer.setVideoEffect()</code> will receive the timestamps with the renderer offset removed (<a href="https://redirect.github.com/androidx/media/issues/1098">#1098</a>).</li>
<li>Fix potential <code>IllegalArgumentException</code> when handling player error that happened while reading ahead into another playlist item (<a href="https://redirect.github.com/androidx/media/issues/1483">#1483</a>).</li>
</ul>
</li>
<li>Transformer:
<ul>
<li>Add <code>audioConversionProcess</code> and <code>videoConversionProcess</code> to <code>ExportResult</code> indicating how the respective track in the output file was made.</li>
<li>Relax trim optimization H.264 level checks.</li>
<li>Add support for changing between SDR and HDR input media in a sequence.</li>
<li>Add support for composition-level audio effects.</li>
<li>Add support for transcoding Ultra HDR images into HDR videos.</li>
<li>Fix issue where the <code>DefaultAudioMixer</code> does not output the correct amount of bytes after being reset and reused.</li>
<li>Work around a decoder bug where the number of audio channels was capped at stereo when handling PCM input.</li>
<li>When selecting tracks in <code>ExoPlayerAssetLoader</code>, ignore audio channel count constraints as they only apply for playback.</li>
<li>Replace <code>androidx.media3.transformer.Muxer</code> interface with <code>androidx.media3.muxer.Muxer</code> and remove <code>androidx.media3.transformer.Muxer</code>.</li>
<li>Fix HEIC image loading from content URI schemes (<a href="https://redirect.github.com/androidx/media/issues/1373">#1373</a>).</li>
<li>Adjust audio track duration in <code>AudioGraphInput</code> to improve AV sync.</li>
<li>Remove <code>ExportResult.processedInputs</code> field. If you use this field for codec details, then use <code>DefaultDecoderFactory.listener</code> instead. In case of a codec exception, codec details will be available in the <code>ExportException.codecInfo</code>.</li>
</ul>
</li>
<li>Extractors:
<ul>
<li>MPEG-TS: Roll forward the change ensuring the last frame is rendered by passing the last access unit of a stream to the sample queue (<a href="https://redirect.github.com/google/ExoPlayer/issues/7909">#7909</a>). Incorporating fixes to resolve the issues that emerged in I-frame only HLS streams(<a href="https://redirect.github.com/androidx/media/issues/1150">#1150</a>) and H.262 HLS streams (<a href="https://redirect.github.com/androidx/media/issues/1126">#1126</a>).</li>
<li>MP3: Prefer the data size from an <code>Info</code> frame over the size reported by the underlying stream (e.g. file size, or HTTP <code>Content-Length</code> header). This helps to exclude non-playable trailer data (e.g. album artwork) from constant bitrate seeking calculations, making seeks more accurate (<a href="https://redirect.github.com/androidx/media/issues/1376">#1376</a>).</li>
</ul>
</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.4.0 (2024-07-24)</h3>
<p>This release includes the following changes since the
<a href="https://github.com/androidx/media/blob/release/#131-2024-04-11">1.3.1 release</a>:</p>
<ul>
<li>Common Library:
<ul>
<li>Forward presumed no-op seek calls to the protected <code>BasePlayer.seekTo()</code>
and <code>SimpleBasePlayer.handleSeek()</code> methods instead of ignoring them. If
you are implementing these methods in a custom player, you may need to
handle these additional calls with <code>mediaItemIndex == C.INDEX_UNSET</code>.</li>
<li>Remove compile dependency on enhanced Java 8 desugaring
(<a href="https://redirect.github.com/androidx/media/issues/1312">#1312</a>).</li>
<li>Ensure the duration passed to <code>MediaItem.Builder.setImageDurationMs()</code>
is ignored for a non-image <code>MediaItem</code> (as documented).</li>
<li>Add <code>Format.customData</code> to store app-provided custom information about
<code>Format</code> instances.</li>
</ul>
</li>
<li>ExoPlayer:
<ul>
<li>Add <code>BasePreloadManager</code> which coordinates the preloading for multiple
sources based on the priorities defined by their <code>rankingData</code>.
Customization is possible by extending this class. Add
<code>DefaultPreloadManager</code> which uses <code>PreloadMediaSource</code> to preload media
samples of the sources into memory, and uses an integer <code>rankingData</code>
that indicates the index of an item on the UI.</li>
<li>Add <code>PlayerId</code> to most methods of <code>LoadControl</code> to enable <code>LoadControl</code>
implementations to support multiple players.</li>
<li>Remove <code>Buffer.isDecodeOnly()</code> and <code>C.BUFFER_FLAG_DECODE_ONLY</code>. There is
no need to set this flag as renderers and decoders will decide to skip
buffers based on timestamp. Custom <code>Renderer</code> implementations should
check if the buffer time is at least
<code>BaseRenderer.getLastResetPositionUs()</code> to decide whether a sample
should be shown. Custom <code>SimpleDecoder</code> implementations can check
<code>isAtLeastOutputStartTimeUs()</code> if needed or mark other buffers with
<code>DecoderOutputBuffer.shouldBeSkipped</code> to skip them.</li>
<li>Allow a null value to be returned by
<code>TargetPreloadStatusControl.getTargetPreloadStatus(T)</code> to indicate not
to preload a <code>MediaSource</code> with the given <code>rankingData</code>.</li>
<li>Add <code>remove(MediaSource)</code> to <code>BasePreloadManager</code>.</li>
<li>Add <code>reset()</code> to <code>BasePreloadManager</code> to release all the holding sources
while keep the preload manager instance.</li>
<li>Add <code>ExoPlayer.setPriority()</code> (and <code>Builder.setPriority()</code>) to define
the priority value used in <code>PriorityTaskManager</code> and for MediaCodec
importance from API 35.</li>
<li>Fix issue with updating the last rebuffer time which resulted in
incorrect <code>bs</code> (buffer starvation) key in CMCD
(<a href="https://redirect.github.com/androidx/media/issues/1124">#1124</a>).</li>
<li>Add
<code>PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)</code>
to indicate that the source has loaded to the end. This allows the
<code>DefaultPreloadManager</code> and the custom
<code>PreloadMediaSource.PreloadControl</code> implementations to preload the next</li>
</ul>
</li>
</ul>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/androidx/media/commit/b01c6ffcb3fca3d038476dab5d3bc9c9f2010781"><code>b01c6ff</code></a> Merge branch 'release' into release-1.4.0</li>
<li><a href="https://github.com/androidx/media/commit/9fb731669649dc0002649c9fb49fb8410d39b111"><code>9fb7316</code></a> Fix the release notes for 1.4.0 stable release</li>
<li><a href="https://github.com/androidx/media/commit/4e6a643d883c535690233e291b2d72c19c2393b0"><code>4e6a643</code></a> Update media3 version for 1.4.0 stable release</li>
<li><a href="https://github.com/androidx/media/commit/18a1582e8c18a56f2ed9e468a6acb3b9c57aa98a"><code>18a1582</code></a> Fix the release notes for 1.4.0 stable release</li>
<li><a href="https://github.com/androidx/media/commit/1dfab4f73ae29f4ec4ec9751e9e7dcb87a66e049"><code>1dfab4f</code></a> Merge release notes for media3 1.4.0 stable release</li>
<li><a href="https://github.com/androidx/media/commit/567204e986804ab17abfdb41d909547a03bdf36e"><code>567204e</code></a> Version bump to 1.4.0-rc01</li>
<li><a href="https://github.com/androidx/media/commit/75dadeaa9e341ebdd3a1095ed3e22f08ab4d5376"><code>75dadea</code></a> Update release notes for 1.4.0-rc01</li>
<li><a href="https://github.com/androidx/media/commit/d97ec132b9d689334f14eaaa194fea3a19860a63"><code>d97ec13</code></a> Suppress the lint &quot;WrongConstant&quot; error</li>
<li><a href="https://github.com/androidx/media/commit/6946f499972d8066721ba2a4d2b972ebaf1b0a6d"><code>6946f49</code></a> Add OptIn annotation to method declaration in demo app file</li>
<li><a href="https://github.com/androidx/media/commit/5b60f6c67d28cf8e8c3f827a85e7d53b8bd23d90"><code>5b60f6c</code></a> Fix index out of bounds exception when a <code>Subtitle</code> is empty</li>
<li>Additional commits viewable in <a href="https://github.com/androidx/media/compare/1.3.1...1.4.0">compare view</a></li>
</ul>
</details>
<br />

Updates `androidx.media3:media3-exoplayer-dash` from 1.3.1 to 1.4.0
<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.4.0</h2>
<p>This release includes the following changes since the <a href="https://github.com/androidx/media/blob/HEAD/#131-2024-04-11">1.3.1 release</a>:</p>
<ul>
<li>Common Library:
<ul>
<li>Forward presumed no-op seek calls to the protected <code>BasePlayer.seekTo()</code> and <code>SimpleBasePlayer.handleSeek()</code> methods instead of ignoring them. If you are implementing these methods in a custom player, you may need to handle these additional calls with <code>mediaItemIndex == C.INDEX_UNSET</code>.</li>
<li>Remove compile dependency on enhanced Java 8 desugaring (<a href="https://redirect.github.com/androidx/media/issues/1312">#1312</a>).</li>
<li>Ensure the duration passed to <code>MediaItem.Builder.setImageDurationMs()</code> is ignored for a non-image <code>MediaItem</code> (as documented).</li>
<li>Add <code>Format.customData</code> to store app-provided custom information about <code>Format</code> instances.</li>
</ul>
</li>
<li>ExoPlayer:
<ul>
<li>Add <code>BasePreloadManager</code> which coordinates the preloading for multiple sources based on the priorities defined by their <code>rankingData</code>. Customization is possible by extending this class. Add <code>DefaultPreloadManager</code> which uses <code>PreloadMediaSource</code> to preload media samples of the sources into memory, and uses an integer <code>rankingData</code> that indicates the index of an item on the UI.</li>
<li>Add <code>PlayerId</code> to most methods of <code>LoadControl</code> to enable <code>LoadControl</code> implementations to support multiple players.</li>
<li>Remove <code>Buffer.isDecodeOnly()</code> and <code>C.BUFFER_FLAG_DECODE_ONLY</code>. There is no need to set this flag as renderers and decoders will decide to skip buffers based on timestamp. Custom <code>Renderer</code> implementations should check if the buffer time is at least <code>BaseRenderer.getLastResetPositionUs()</code> to decide whether a sample should be shown. Custom <code>SimpleDecoder</code> implementations can check <code>isAtLeastOutputStartTimeUs()</code> if needed or mark other buffers with <code>DecoderOutputBuffer.shouldBeSkipped</code> to skip them.</li>
<li>Allow a null value to be returned by <code>TargetPreloadStatusControl.getTargetPreloadStatus(T)</code> to indicate not to preload a <code>MediaSource</code> with the given <code>rankingData</code>.</li>
<li>Add <code>remove(MediaSource)</code> to <code>BasePreloadManager</code>.</li>
<li>Add <code>reset()</code> to <code>BasePreloadManager</code> to release all the holding sources while keep the preload manager instance.</li>
<li>Add <code>ExoPlayer.setPriority()</code> (and <code>Builder.setPriority()</code>) to define the priority value used in <code>PriorityTaskManager</code> and for MediaCodec importance from API 35.</li>
<li>Fix issue with updating the last rebuffer time which resulted in incorrect <code>bs</code> (buffer starvation) key in CMCD (<a href="https://redirect.github.com/androidx/media/issues/1124">#1124</a>).</li>
<li>Add <code>PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)</code> to indicate that the source has loaded to the end. This allows the <code>DefaultPreloadManager</code> and the custom <code>PreloadMediaSource.PreloadControl</code> implementations to preload the next source or take other actions.</li>
<li>Fix bug where silence skipping at the end of items can trigger a playback exception.</li>
<li>Add <code>clear</code> to <code>PreloadMediaSource</code> to discard the preloading period.</li>
<li>Add new error code <code>PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED</code> that is used when codec resources are reclaimed for higher priority tasks.</li>
<li>Let <code>AdsMediaSource</code> load preroll ads before initial content media preparation completes (<a href="https://redirect.github.com/androidx/media/issues/1358">#1358</a>).</li>
<li>Fix bug where playback moved to <code>STATE_ENDED</code> when re-preparing a multi-period DASH live stream after the original period was already removed from the manifest.</li>
<li>Rename <code>onTimelineRefreshed()</code> to <code>onSourcePrepared()</code> and <code>onPrepared()</code> to <code>onTracksSelected()</code> in <code>PreloadMediaSource.PreloadControl</code>. Also rename the IntDefs in <code>DefaultPreloadManager.Stage</code> accordingly.</li>
<li>Add experimental support for dynamic scheduling to better align work with CPU wake-cycles and delay waking up to when renderers can progress. You can enable this using <code>experimentalSetDynamicSchedulingEnabled()</code> when setting up your ExoPlayer instance.</li>
<li>Add <code>Renderer.getDurationToProgressUs()</code>. A <code>Renderer</code> can implement this method to return to ExoPlayer the duration that playback must advance for the renderer to progress. If <code>ExoPlayer</code> is set with <code>experimentalSetDynamicSchedulingEnabled()</code> then <code>ExoPlayer</code> will call this method when calculating the time to schedule its work task.</li>
<li>Add <code>MediaCodecAdapter#OnBufferAvailableListener</code> to alert when input and output buffers are available for use by <code>MediaCodecRenderer</code>. <code>MediaCodecRenderer</code> will signal <code>ExoPlayer</code> when receiving these callbacks and if <code>ExoPlayer</code> is set with <code>experimentalSetDynamicSchedulingEnabled()</code>, then <code>ExoPlayer</code> will schedule its work loop as renderers can make progress.</li>
<li>Use data class for <code>LoadControl</code> methods instead of individual parameters.</li>
<li>Add <code>ExoPlayer.isReleased()</code> to check whether <code>Exoplayer.release()</code> has been called.</li>
<li>Add <code>ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()</code> to configure the maximum position for which <code>seekToPrevious()</code> seeks to the previous item (<a href="https://redirect.github.com/androidx/media/issues/1425">#1425</a>).</li>
<li>Fix some audio focus inconsistencies, e.g. not reporting full or transient focus loss while the player is paused (<a href="https://redirect.github.com/androidx/media/issues/1436">#1436</a>).</li>
<li>Fix potential <code>IndexOutOfBoundsException</code> caused by extractors reporting additional tracks after the initial preparation step (<a href="https://redirect.github.com/androidx/media/issues/1476">#1476</a>).</li>
<li><code>Effects</code> in <code>ExoPlayer.setVideoEffect()</code> will receive the timestamps with the renderer offset removed (<a href="https://redirect.github.com/androidx/media/issues/1098">#1098</a>).</li>
<li>Fix potential <code>IllegalArgumentException</code> when handling player error that happened while reading ahead into another playlist item (<a href="https://redirect.github.com/androidx/media/issues/1483">#1483</a>).</li>
</ul>
</li>
<li>Transformer:
<ul>
<li>Add <code>audioConversionProcess</code> and <code>videoConversionProcess</code> to <code>ExportResult</code> indicating how the respective track in the output file was made.</li>
<li>Relax trim optimization H.264 level checks.</li>
<li>Add support for changing between SDR and HDR input media in a sequence.</li>
<li>Add support for composition-level audio effects.</li>
<li>Add support for transcoding Ultra HDR images into HDR videos.</li>
<li>Fix issue where the <code>DefaultAudioMixer</code> does not output the correct amount of bytes after being reset and reused.</li>
<li>Work around a decoder bug where the number of audio channels was capped at stereo when handling PCM input.</li>
<li>When selecting tracks in <code>ExoPlayerAssetLoader</code>, ignore audio channel count constraints as they only apply for playback.</li>
<li>Replace <code>androidx.media3.transformer.Muxer</code> interface with <code>androidx.media3.muxer.Muxer</code> and remove <code>androidx.media3.transformer.Muxer</code>.</li>
<li>Fix HEIC image loading from content URI schemes (<a href="https://redirect.github.com/androidx/media/issues/1373">#1373</a>).</li>
<li>Adjust audio track duration in <code>AudioGraphInput</code> to improve AV sync.</li>
<li>Remove <code>ExportResult.processedInputs</code> field. If you use this field for codec details, then use <code>DefaultDecoderFactory.listener</code> instead. In case of a codec exception, codec details will be available in the <code>ExportException.codecInfo</code>.</li>
</ul>
</li>
<li>Extractors:
<ul>
<li>MPEG-TS: Roll forward the change ensuring the last frame is rendered by passing the last access unit of a stream to the sample queue (<a href="https://redirect.github.com/google/ExoPlayer/issues/7909">#7909</a>). Incorporating fixes to resolve the issues that emerged in I-frame only HLS streams(<a href="https://redirect.github.com/androidx/media/issues/1150">#1150</a>) and H.262 HLS streams (<a href="https://redirect.github.com/androidx/media/issues/1126">#1126</a>).</li>
<li>MP3: Prefer the data size from an <code>Info</code> frame over the size reported by the underlying stream (e.g. file size, or HTTP <code>Content-Length</code> header). This helps to exclude non-playable trailer data (e.g. album artwork) from constant bitrate seeking calculations, making seeks more accurate (<a href="https://redirect.github.com/androidx/media/issues/1376">#1376</a>).</li>
</ul>
</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.4.0 (2024-07-24)</h3>
<p>This release includes the following changes since the
<a href="https://github.com/androidx/media/blob/release/#131-2024-04-11">1.3.1 release</a>:</p>
<ul>
<li>Common Library:
<ul>
<li>Forward presumed no-op seek calls to the protected <code>BasePlayer.seekTo()</code>
and <code>SimpleBasePlayer.handleSeek()</code> methods instead of ignoring them. If
you are implementing these methods in a custom player, you may need to
handle these additional calls with <code>mediaItemIndex == C.INDEX_UNSET</code>.</li>
<li>Remove compile dependency on enhanced Java 8 desugaring
(<a href="https://redirect.github.com/androidx/media/issues/1312">#1312</a>).</li>
<li>Ensure the duration passed to <code>MediaItem.Builder.setImageDurationMs()</code>
is ignored for a non-image <code>MediaItem</code> (as documented).</li>
<li>Add <code>Format.customData</code> to store app-provided custom information about
<code>Format</code> instances.</li>
</ul>
</li>
<li>ExoPlayer:
<ul>
<li>Add <code>BasePreloadManager</code> which coordinates the preloading for multiple
sources based on the priorities defined by their <code>rankingData</code>.
Customization is possible by extending this class. Add
<code>DefaultPreloadManager</code> which uses <code>PreloadMediaSource</code> to preload media
samples of the sources into memory, and uses an integer <code>rankingData</code>
that indicates the index of an item on the UI.</li>
<li>Add <code>PlayerId</code> to most methods of <code>LoadControl</code> to enable <code>LoadControl</code>
implementations to support multiple players.</li>
<li>Remove <code>Buffer.isDecodeOnly()</code> and <code>C.BUFFER_FLAG_DECODE_ONLY</code>. There is
no need to set this flag as renderers and decoders will decide to skip
buffers based on timestamp. Custom <code>Renderer</code> implementations should
check if the buffer time is at least
<code>BaseRenderer.getLastResetPositionUs()</code> to decide whether a sample
should be shown. Custom <code>SimpleDecoder</code> implementations can check
<code>isAtLeastOutputStartTimeUs()</code> if needed or mark other buffers with
<code>DecoderOutputBuffer.shouldBeSkipped</code> to skip them.</li>
<li>Allow a null value to be returned by
<code>TargetPreloadStatusControl.getTargetPreloadStatus(T)</code> to indicate not
to preload a <code>MediaSource</code> with the given <code>rankingData</code>.</li>
<li>Add <code>remove(MediaSource)</code> to <code>BasePreloadManager</code>.</li>
<li>Add <code>reset()</code> to <code>BasePreloadManager</code> to release all the holding sources
while keep the preload manager instance.</li>
<li>Add <code>ExoPlayer.setPriority()</code> (and <code>Builder.setPriority()</code>) to define
the priority value used in <code>PriorityTaskManager</code> and for MediaCodec
importance from API 35.</li>
<li>Fix issue with updating the last rebuffer time which resulted in
incorrect <code>bs</code> (buffer starvation) key in CMCD
(<a href="https://redirect.github.com/androidx/media/issues/1124">#1124</a>).</li>
<li>Add
<code>PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)</code>
to indicate that the source has loaded to the end. This allows the
<code>DefaultPreloadManager</code> and the custom
<code>PreloadMediaSource.PreloadControl</code> implementations to preload the next</li>
</ul>
</li>
</ul>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/androidx/media/commit/b01c6ffcb3fca3d038476dab5d3bc9c9f2010781"><code>b01c6ff</code></a> Merge branch 'release' into release-1.4.0</li>
<li><a href="https://github.com/androidx/media/commit/9fb731669649dc0002649c9fb49fb8410d39b111"><code>9fb7316</code></a> Fix the release notes for 1.4.0 stable release</li>
<li><a href="https://github.com/androidx/media/commit/4e6a643d883c535690233e291b2d72c19c2393b0"><code>4e6a643</code></a> Update media3 version for 1.4.0 stable release</li>
<li><a href="https://github.com/androidx/media/commit/18a1582e8c18a56f2ed9e468a6acb3b9c57aa98a"><code>18a1582</code></a> Fix the release notes for 1.4.0 stable release</li>
<li><a href="https://github.com/androidx/media/commit/1dfab4f73ae29f4ec4ec9751e9e7dcb87a66e049"><code>1dfab4f</code></a> Merge release notes for media3 1.4.0 stable release</li>
<li><a href="https://github.com/androidx/media/commit/567204e986804ab17abfdb41d909547a03bdf36e"><code>567204e</code></a> Version bump to 1.4.0-rc01</li>
<li><a href="https://github.com/androidx/media/commit/75dadeaa9e341ebdd3a1095ed3e22f08ab4d5376"><code>75dadea</code></a> Update release notes for 1.4.0-rc01</li>
<li><a href="https://github.com/androidx/media/commit/d97ec132b9d689334f14eaaa194fea3a19860a63"><code>d97ec13</code></a> Suppress the lint &quot;WrongConstant&quot; error</li>
<li><a href="https://github.com/androidx/media/commit/6946f499972d8066721ba2a4d2b972ebaf1b0a6d"><code>6946f49</code></a> Add OptIn annotation to method declaration in demo app file</li>
<li><a href="https://github.com/androidx/media/commit/5b60f6c67d28cf8e8c3f827a85e7d53b8bd23d90"><code>5b60f6c</code></a> Fix index out of bounds exception when a <code>Subtitle</code> is empty</li>
<li>Additional commits viewable in <a href="https://github.com/androidx/media/compare/1.3.1...1.4.0">compare view</a></li>
</ul>
</details>
<br />

Updates `androidx.media3:media3-exoplayer-smoothstreaming` from 1.3.1 to 1.4.0
<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.4.0</h2>
<p>This release includes the following changes since the <a href="https://github.com/androidx/media/blob/HEAD/#131-2024-04-11">1.3.1 release</a>:</p>
<ul>
<li>Common Library:
<ul>
<li>Forward presumed no-op seek calls to the protected <code>BasePlayer.seekTo()</code> and <code>SimpleBasePlayer.handleSeek()</code> methods instead of ignoring them. If you are implementing these methods in a custom player, you may need to handle these additional calls with <code>mediaItemIndex == C.INDEX_UNSET</code>.</li>
<li>Remove compile dependency on enhanced Java 8 desugaring (<a href="https://redirect.github.com/androidx/media/issues/1312">#1312</a>).</li>
<li>Ensure the duration passed to <code>MediaItem.Builder.setImageDurationMs()</code> is ignored for a non-image <code>MediaItem</code> (as documented).</li>
<li>Add <code>Format.customData</code> to store app-provided custom information about <code>Format</code> instances.</li>
</ul>
</li>
<li>ExoPlayer:
<ul>
<li>Add <code>BasePreloadManager</code> which coordinates the preloading for multiple sources based on the priorities defined by their <code>rankingData</code>. Customization is possible by extending this class. Add <code>DefaultPreloadManager</code> which uses <code>PreloadMediaSource</code> to preload media samples of the sources into memory, and uses an integer <code>rankingData</code> that indicates the index of an item on the UI.</li>
<li>Add <code>PlayerId</code> to most methods of <code>LoadControl</code> to enable <code>LoadControl</code> implementations to support multiple players.</li>
<li>Remove <code>Buffer.isDecodeOnly()</code> and <code>C.BUFFER_FLAG_DECODE_ONLY</code>. There is no need to set this flag as renderers and decoders will decide to skip buffers based on timestamp. Custom <code>Renderer</code> implementations should check if the buffer time is at least <code>BaseRenderer.getLastResetPositionUs()</code> to decide whether a sample should be shown. Custom <code>SimpleDecoder</code> implementations can check <code>isAtLeastOutputStartTimeUs()</code> if needed or mark other buffers with <code>DecoderOutputBuffer.shouldBeSkipped</code> to skip them.</li>
<li>Allow a null value to be returned by <code>TargetPreloadStatusControl.getTargetPreloadStatus(T)</code> to indicate not to preload a <code>MediaSource</code> with the given <code>rankingData</code>.</li>
<li>Add <code>remove(MediaSource)</code> to <code>BasePreloadManager</code>.</li>
<li>Add <code>reset()</code> to <code>BasePreloadManager</code> to release all the holding sources while keep the preload manager instance.</li>
<li>Add <code>ExoPlayer.setPriority()</code> (and <code>Builder.setPriority()</code>) to define the priority value used in <code>PriorityTaskManager</code> and for MediaCodec importance from API 35.</li>
<li>Fix issue with updating the last rebuffer time which resulted in incorrect <code>bs</code> (buffer starvation) key in CMCD (<a href="https://redirect.github.com/androidx/media/issues/1124">#1124</a>).</li>
<li>Add <code>PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)</code> to indicate that the source has loaded to the end. This allows the <code>DefaultPreloadManager</code> and the custom <code>PreloadMediaSource.PreloadControl</code> implementations to preload the next source or take other actions.</li>
<li>Fix bug where silence skipping at the end of items can trigger a playback exception.</li>
<li>Add <code>clear</code> to <code>PreloadMediaSource</code> to discard the preloading period.</li>
<li>Add new error code <code>PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED</code> that is used when codec resources are reclaimed for higher priority tasks.</li>
<li>Let <code>AdsMediaSource</code> load preroll ads before initial content media preparation completes (<a href="https://redirect.github.com/androidx/media/issues/1358">#1358</a>).</li>
<li>Fix bug where playback moved to <code>STATE_ENDED</code> when re-preparing a multi-period DASH live stream after the original period was already removed from the manifest.</li>
<li>Rename <code>onTimelineRefreshed()</code> to <code>onSourcePrepared()</code> and <code>onPrepared()</code> to <code>onTracksSelected()</code> in <code>PreloadMediaSource.PreloadControl</code>. Also rename the IntDefs in <code>DefaultPreloadManager.Stage</code> accordingly.</li>
<li>Add experimental support for dynamic scheduling to better align work with CPU wake-cycles and delay waking up to when renderers can progress. You can enable this using <code>experimentalSetDynamicSchedulingEnabled()</code> when setting up your ExoPlayer instance.</li>
<li>Add <code>Renderer.getDurationToProgressUs()</code>. A <code>Renderer</code> can implement this method to return to ExoPlayer the duration that playback must advance for the renderer to progress. If <code>ExoPlayer</code> is set with <code>experimentalSetDynamicSchedulingEnabled()</code> then <code>ExoPlayer</code> will call this method when calculating the time to schedule its work task.</li>
<li>Add <code>MediaCodecAdapter#OnBufferAvailableListener</code> to alert when input and output buffers are available for use by <code>MediaCodecRenderer</code>. <code>MediaCodecRenderer</code> will signal <code>ExoPlayer</code> when receiving these callbacks and if <code>ExoPlayer</code> is set with <code>experimentalSetDynamicSchedulingEnabled()</code>, then <code>ExoPlayer</code> will schedule its work loop as renderers can make progress.</li>
<li>Use data class for <code>LoadControl</code> methods instead of individual parameters.</li>
<li>Add <code>ExoPlayer.isReleased()</code> to check whether <code>Exoplayer.release()</code> has been called.</li>
<li>Add <code>ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()</code> to configure the maximum position for which <code>seekToPrevious()</code> seeks to the previous item (<a href="https://redirect.github.com/androidx/media/issues/1425">#1425</a>).</li>
<li>Fix some audio focus inconsistencies, e.g. not reporting full or transient focus loss while the player is paused (<a href="https://redirect.github.com/androidx/media/issues/1436">#1436</a>).</li>
<li>Fix potential <code>IndexOutOfBoundsException</code> caused by extractors reporting additional tracks after the initial preparation step (<a href="https://redirect.github.com/androidx/media/issues/1476">#1476</a>).</li>
<li><code>Effects</code> in <code>ExoPlayer.setVideoEffect()</code> will receive the timestamps with the renderer offset removed (<a href="https://redirect.github.com/androidx/media/issues/1098">#1098</a>).</li>
<li>Fix potential <code>IllegalArgumentException</code> when handling player error that happened while reading ahead into another playlist item (<a href="https://redirect.github.com/androidx/media/issues/1483">#1483</a>).</li>
</ul>
</li>
<li>Transformer:
<ul>
<li>Add <code>audioConversionProcess</code> and <code>videoConversionProcess</code> to <code>ExportResult</code> indicating how the respective track in the output file was made.</li>
<li>Relax trim optimization H.264 level checks.</li>
<li>Add support for changing between SDR and HDR input media in a sequence.</li>
<li>Add support for composition-level audio effects.</li>
<li>Add support for transcoding Ultra HDR images into HDR videos.</li>
<li>Fix issue where the <code>DefaultAudioMixer</code> does not output the correct amount of bytes after being reset and reused.</li>
<li>Work around a decoder bug where the number of audio channels was capped at stereo when handling PCM input.</li>
<li>When selecting tracks in <code>ExoPlayerAssetLoader</code>, ignore audio channel count constraints as they only apply for playback.</li>
<li>Replace <code>androidx.media3.transformer.Muxer</code> interface with <code>androidx.media3.muxer.Muxer</code> and remove <code>androidx.media3.transformer.Muxer</code>.</li>
<li>Fix HEIC image loading from content URI schemes (<a href="https://redirect.github.com/androidx/media/issues/1373">#1373</a>).</li>
<li>Adjust audio track duration in <code>AudioGraphInput</code> to improve AV sync.</li>
<li>Remove <code>ExportResult.processedInputs</code> field. If you use this field for codec details, then use <code>DefaultDecoderFactory.listener</code> instead. In case of a codec exception, codec details will be available in the <code>ExportException.codecInfo</code>.</li>
</ul>
</li>
<li>Extractors:
<ul>
<li>MPEG-TS: Roll forward the change ensuring the last frame is rendered by passing the last access unit of a stream to the sample queue (<a href="https://redirect.github.com/google/ExoPlayer/issues/7909">#7909</a>). Incorporating fixes to resolve the issues that emerged in I-frame only HLS streams(<a href="https://redirect.github.com/androidx/media/issues/1150">#1150</a>) and H.262 HLS streams (<a href="https://redirect.github.com/androidx/media/issues/1126">#1126</a>).</li>
<li>MP3: Prefer the data size from an <code>Info</code> frame over the size reported by the underlying stream (e.g. file size, or HTTP <code>Content-Length</code> header). This helps to exclude non-playable trailer data (e.g. album artwork) from constant bitrate seeking calculations, making seeks more accurate (<a href="https://redirect.github.com/androidx/media/issues/1376">#1376</a>).</li>
</ul>
</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-smoothstreaming's changelog</a>.</em></p>
<blockquote>
<h3>1.4.0 (2024-07-24)</h3>
<p>This release includes the following changes since the
<a href="https://github.com/androidx/media/blob/release/#131-2024-04-11">1.3.1 release</a>:</p>
<ul>
<li>Common Library:
<ul>
<li>Forward presumed no-op seek calls to the protected <code>BasePlayer.seekTo()</code>
and <code>SimpleBasePlayer.handleSeek()</code> methods instead of ignoring them. If
you are implementing these methods in a custom player, you may need to
handle these additional calls with <code>mediaItemIndex == C.INDEX_UNSET</code>.</li>
<li>Remove compile dependency on enhanced Java 8 desugaring
(<a href="https://redirect.github.com/androidx/media/issues/1312">#1312</a>).</li>
<li>Ensure the duration passed to <code>MediaItem.Builder.setImageDurationMs()</code>
is ignored for a non-image <code>MediaItem</code> (as documented).</li>
<li>Add <code>Format.customData</code> to store app-provided custom information about
<code>Format</code> instances.</li>
</ul>
</li>
<li>ExoPlayer:
<ul>
<li>Add <code>BasePreloadManager</code> which coordinates the preloading for multiple
sources based on the priorities defined by their <code>rankingData</code>.
Customization is possible by extending this class. Add
<code>DefaultPreloadManager</code> which uses <code>PreloadMediaSource</code> to preload media
samples of the sources into memory, and uses an integer <code>rankingData</code>
that indicates the index of an item on the UI.</li>
<li>Add <code>PlayerId</code> to most methods of <code>LoadControl</code> to enable <code>LoadControl</code>
implementations to support multiple players.</li>
<li>Remove <code>Buffer.isDecodeOnly()</code> and <code>C.BUFFER_FLAG_DECODE_ONLY</code>. There is
no need to set this flag as renderers and decoders will decide to skip
buffers based on timestamp. Custom <code>Renderer</code> implementations should
check if the buffer time is at least
<code>BaseRenderer.getLastResetPositionUs()</code> to decide whether a sample
should be shown. Custom <code>SimpleDecoder</code> implementations can check
<code>isAtLeastOutputStartTimeUs()</code> if needed or mark other buffers with
<code>DecoderOutputBuffer.shouldBeSkipped</code> to skip them.</li>
<li>Allow a null value to be returned by
<code>TargetPreloadStatusControl.getTargetPreloadStatus(T)</code> to indicate not
to preload a <code>MediaSource</code> with the given <code>rankingData</code>.</li>
<li>Add <code>remove(MediaSource)</code> to <code>BasePreloadManager</code>.</li>
<li>Add <code>reset()</code> to <code>BasePreloadManager</code> to release all the holding sources
while keep the preload manager instance.</li>
<li>Add <code>ExoPlayer.setPriority()</code> (and <code>Builder.setPriority()</code>) to define
the priority value used in <code>PriorityTaskManager</code> and for MediaCodec
importance from API 35.</li>
<li>Fix issue with updating the last rebuffer time which resulted in
incorrect <code>bs</code> (buffer starvation) key in CMCD
(<a href="https://redirect.github.com/androidx/media/issues/1124">#1124</a>).</li>
<li>Add
<code>PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)</code>
to indicate that the source has loaded to the end. This allows the
<code>DefaultPreloadManager</code> and the custom
<code>PreloadMediaSource.PreloadControl</code> implementations to preload the next</li>
</ul>
</li>
</ul>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/androidx/media/commit/b01c6ffcb3fca3d038476dab5d3bc9c9f2010781"><code>b01c6ff</code></a> Merge branch 'release' into release-1.4.0</li>
<li><a href="https://github.com/androidx/media/commit/9fb731669649dc0002649c9fb49fb8410d39b111"><code>9fb7316</code></a> Fix the release notes for 1.4.0 stable release</li>
<li><a href="https://github.com/androidx/media/commit/4e6a643d883c535690233e291b2d72c19c2393b0"><code>4e6a643</code></a> Update media3 version for 1.4.0 stable release</li>
<li><a href="https://github.com/androidx/media/commit/18a1582e8c18a56f2ed9e468a6acb3b9c57aa98a"><code>18a1582</code></a> Fix the release notes for 1.4.0 stable release</li>
<li><a href="https://github.com/androidx/media/commit/1dfab4f73ae29f4ec4ec9751e9e7dcb87a66e049"><code>1dfab4f</code></a> Merge release notes for media3 1.4.0 stable release</li>
<li><a href="https://github.com/androidx/media/commit/567204e986804ab17abfdb41d909547a03bdf36e"><code>567204e</code></a> Version bump to 1.4.0-rc01</li>
<li><a href="https://github.com/androidx/media/commit/75dadeaa9e341ebdd3a1095ed3e22f08ab4d5376"><code>75dadea</code></a> Update release notes for 1.4.0-rc01</li>
<li><a href="https://github.com/androidx/media/commit/d97ec132b9d689334f14eaaa194fea3a19860a63"><code>d97ec13</code></a> Suppress the lint &quot;WrongConstant&quot; error</li>
<li><a href="https://github.com/androidx/media/commit/6946f499972d8066721ba2a4d2b972ebaf1b0a6d"><code>6946f49</code></a> Add OptIn annotation to method declaration in demo app file</li>
<li><a href="https://github.com/androidx/media/commit/5b60f6c67d28cf8e8c3f827a85e7d53b8bd23d90"><code>5b60f6c</code></a> Fix index out of bounds exception when a <code>Subtitle</code> is empty</li>
<li>Additional commits viewable in <a href="https://github.com/androidx/media/compare/1.3.1...1.4.0">compare view</a></li>
</ul>
</details>
<br />

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

</details>
  • Loading branch information
dependabot[bot] authored Jul 29, 2024
1 parent 1b9a8c4 commit e3b8127
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 3 deletions.
4 changes: 4 additions & 0 deletions packages/video_player/video_player_android/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 2.5.4

* Updates Media3-ExoPlayer to 1.4.0.

## 2.5.3

* Updates lint checks to ignore NewerVersionAvailable.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ android {
}

dependencies {
def exoplayer_version = "1.3.1"
def exoplayer_version = "1.4.0"
implementation "androidx.media3:media3-exoplayer:${exoplayer_version}"
implementation "androidx.media3:media3-exoplayer-hls:${exoplayer_version}"
implementation "androidx.media3:media3-exoplayer-dash:${exoplayer_version}"
Expand All @@ -57,7 +57,7 @@ android {
testImplementation 'androidx.test:core:1.3.0'
testImplementation 'org.mockito:mockito-inline:5.0.0'
testImplementation 'org.robolectric:robolectric:4.10.3'
testImplementation "androidx.media3:media3-test-utils:1.3.1"
testImplementation "androidx.media3:media3-test-utils:${exoplayer_version}"
}

testOptions {
Expand Down
2 changes: 1 addition & 1 deletion packages/video_player/video_player_android/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: video_player_android
description: Android implementation of the video_player plugin.
repository: https://github.com/flutter/packages/tree/main/packages/video_player/video_player_android
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22
version: 2.5.3
version: 2.5.4

environment:
sdk: ^3.4.0
Expand Down

0 comments on commit e3b8127

Please sign in to comment.