commit | e3b812783866b40e625a29c3e1b7813126473796 | [log] [tgz] |
---|---|---|
author | dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> | Mon Jul 29 16:42:06 2024 |
committer | GitHub <noreply@github.com> | Mon Jul 29 16:42:06 2024 |
tree | d91f75cddf8a6d99f6e3f49e9fe03425c1b9f581 | |
parent | 1b9a8c41aee87e3a3d94be80fa8cd7da06d17031 [diff] |
[video_player]: Bump exoplayer_version from 1.3.1 to 1.4.0 in /packages/video_player/video_player_android/android (#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>
This repo is a companion repo to the main flutter repo. It contains the source code for Flutter's first-party packages (i.e., packages developed by the core Flutter team). Check the packages
directory to see all packages.
These packages are also available on pub.
Please file any issues, bugs, or feature requests in the main flutter repo. Issues pertaining to this repository are labeled “package”.
If you wish to contribute a new package to the Flutter ecosystem, please see the documentation for developing packages. You can store your package source code in any GitHub repository (the present repo is only intended for packages developed by the core Flutter team). Once your package is ready you can publish to the pub repository.
If you wish to contribute a change to any of the existing packages in this repo, please review our contribution guide, and send a pull request.
These are the packages hosted in this repository: