Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[video_player]: Bump exoplayer_version from 1.3.1 to 1.4.0 in /packag…
…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 "WrongConstant" 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 "WrongConstant" 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 "WrongConstant" 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 "WrongConstant" 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