{"id":399,"date":"2026-08-12T01:55:23","date_gmt":"2026-08-12T01:55:23","guid":{"rendered":"https:\/\/x.sheep-mine.ts.net\/index.php\/media3-1-11-whats-new-html\/"},"modified":"2026-08-12T01:55:23","modified_gmt":"2026-08-12T01:55:23","slug":"media3-1-11-whats-new-html","status":"publish","type":"post","link":"https:\/\/x.sheep-mine.ts.net\/index.php\/media3-1-11-whats-new-html\/","title":{"rendered":"Media3 1.11 &#8211; What&#8217;s new?"},"content":{"rendered":"<p><br \/>\n<\/p>\n<div>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEh_gJCo2h7iOyQG5LwWPBDlV9Qp6uUWCY887K1Ks_eueHtzJtCdDivF4nHillSk5Qklbt2-rDge9GTsKQuY1MrnWeI8g_C480HZkbfl8LH_tuAQXdxZO6DarMl0Uy9o0eQCmbR_ahBntC76eZAcUJPxey1Wsfsu59HmQ674guNEZS-OsctCNhuINFPtnEc\/s8583\/AFD%20-%20%5BABL_101%5D%20Media3%201.11%20is%20out%20_Blog.png\" style=\"clear: left; float: left; margin-bottom: 1em; margin-right: 1em;\"><img decoding=\"async\" border=\"0\" data-original-height=\"2601\" data-original-width=\"8583\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEh_gJCo2h7iOyQG5LwWPBDlV9Qp6uUWCY887K1Ks_eueHtzJtCdDivF4nHillSk5Qklbt2-rDge9GTsKQuY1MrnWeI8g_C480HZkbfl8LH_tuAQXdxZO6DarMl0Uy9o0eQCmbR_ahBntC76eZAcUJPxey1Wsfsu59HmQ674guNEZS-OsctCNhuINFPtnEc\/s1600\/AFD%20-%20%5BABL_101%5D%20Media3%201.11%20is%20out%20_Blog.png\"\/><\/a><\/div>\n<p><i><br \/><\/i><\/p>\n<p>Media3 1.11 is out. Powering the vast majority of top Android media apps, this release brings new features, bug fixes, and improvements across playback, editing, and UI components. We&#8217;re expanding our Jetpack Compose UI modules with customizable <code>Player<\/code> slots and easy to use defaults, interactive gestures, state observers, and short-form video preloading using <code>PlayerPool<\/code>. We also modernized the Media3 Cast integration with SystemUI Output Switcher support, introduced a new Ktor HTTP client network extension, and added new muxing utilities for Ogg and WAV files.<\/p>\n<p>Read on for key highlights, and check out the full <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/github.com\/androidx\/media\/releases\/tag\/1.11.0\" target=\"_blank\">release notes<\/a> for a comprehensive list of changes.<\/p>\n<h2>Playback UI and Compose<\/h2>\n<p>With Android becoming Compose-first, we are continuing to expand the <code>media3-ui-compose<\/code> and <code>media3-ui-compose-material3<\/code> modules. This update introduces more granular control over your player layout, richer interaction patterns, and deeper integration with Material3.<\/p>\n<h3>Customizable Player layout<\/h3>\n<p>The Material 3 Player Composable now supports dedicated content slots for <code>topControls<\/code>, <code>centerControls<\/code>, <code>bottomControls<\/code>, and <code>errorOverlay<\/code>. You can drop in your own Composables or use the ready-made defaults published in <code>PlayerDefaults<\/code>:<\/p>\n<pre><code>Player(\n  player = player,\n  topControls = { PlayerDefaults.TopControls(player) },\n  centerControls = { PlayerDefaults.CenterControls(player) },\n  bottomControls = { PlayerDefaults.BottomControls(player) },\n)<\/code><\/pre>\n<p>The <code>Player<\/code> Composable also integrates <code>FocusRequester<\/code> support, enabling seamless D-pad and keyboard navigation on Android TV, foldables, and desktop environments. large-screen devices.<\/p>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjOvklguB2-POGNSBrDcol5m4qsdxyp4SSGOUbjMKL07MAqEcPYUeyn1WlaJ1erDJUFu9Snd7qdXfFUVJgmQtz5mmSO2dJSnftIyaph5FksrY0oxg5wgJAnL5ZTHzv_U-vCRo7nOA28616QfDcJnJ3ElB1W8NEmK2abtTMoXDiPPACKqqHtgdm1MtgK-74\/s1064\/player_video.png\" style=\"margin-left: 1em; margin-right: 1em;\"><img loading=\"lazy\" decoding=\"async\" border=\"0\" data-original-height=\"848\" data-original-width=\"1064\" height=\"510\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjOvklguB2-POGNSBrDcol5m4qsdxyp4SSGOUbjMKL07MAqEcPYUeyn1WlaJ1erDJUFu9Snd7qdXfFUVJgmQtz5mmSO2dJSnftIyaph5FksrY0oxg5wgJAnL5ZTHzv_U-vCRo7nOA28616QfDcJnJ3ElB1W8NEmK2abtTMoXDiPPACKqqHtgdm1MtgK-74\/w640-h510\/player_video.png\" width=\"640\"\/><\/a><span style=\"text-align: left;\">Example for a Composable Player with customized controls<\/span><\/div>\n<h3>Gestures and playback speed control<\/h3>\n<p><code>PlaybackSpeedState<\/code> now provides a fast-forward\/slow-motion API. The <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/github.com\/androidx\/media\/tree\/release\/demos\/compose\" target=\"_blank\"><code>demo-compose<\/code> app<\/a> showcases this with a long-press gesture to fast-forward playback and seeking with double tap. Combined with the <code>ProgressSlider<\/code> introduced in 1.10, the Compose player UI now offers rich touch and gesture interactions out of the box.<\/p>\n<h3>Short-form video preloading with PlayerPool<\/h3>\n<p>For apps with sliding-window media feeds (for example, short-form vertical video), managing multiple ExoPlayer instances efficiently is a common challenge. Media3 1.11 introduces <code>PlayerPool<\/code> (in <code>common-ktx<\/code>) and <code>rememberPooledPlayer<\/code> (in <code>ui-compose<\/code>) to handle player recycling and preloading automatically.<\/p>\n<p>The new <code>ShortFormPlayerScreen<\/code> in <code>demo-compose<\/code> shows this in action, a vertically paging feed where players are pooled, preloaded, and seamlessly recycled as the user scrolls.<\/p>\n<h3>MiniController<\/h3>\n<p>A new <code>MiniController<\/code> Composable in <code>media3-ui-compose-material3<\/code> provides a compact playback bar displaying the current item&#8217;s title, artist, artwork, and progress alongside play\/pause controls. As all our default Composables in <code>media3-ui-compose-material3<\/code>, the <code>MiniController<\/code> supports Material3 Dynamic Color integration, allowing it to automatically adapt to the user&#8217;s wallpaper theme.This is ideal for persistent bottom-sheet or mini-player affordances, for example while the user browses content or during active Cast sessions.<\/p>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEh5oaDCWuBtfos3_ynVEvQHwcV_G4cdziIk_0hO1Ws0taS0pRQdvvwGec51Kvh8en95V_8DcLqjCfGoPPM7mvyvSLLyUJn7mOp2qG6RK5I1mEcUHMe1HH3-7_MCSGWn2jKAojODVCSYYhIZVr8beSnLAXWdy3CD2VNzx4v997eYRfZIVVS_4cvROFGZF6o\/s1080\/mini_player.png\" style=\"margin-left: 1em; margin-right: 1em;\"><img decoding=\"async\" border=\"0\" data-original-height=\"218\" data-original-width=\"1080\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEh5oaDCWuBtfos3_ynVEvQHwcV_G4cdziIk_0hO1Ws0taS0pRQdvvwGec51Kvh8en95V_8DcLqjCfGoPPM7mvyvSLLyUJn7mOp2qG6RK5I1mEcUHMe1HH3-7_MCSGWn2jKAojODVCSYYhIZVr8beSnLAXWdy3CD2VNzx4v997eYRfZIVVS_4cvROFGZF6o\/s1600\/mini_player.png\"\/><\/a><span style=\"text-align: left;\">The Media3 MiniController showing album art, media metadata and basic controls<\/span><\/div>\n<h3>Expanded state holders for metadata and errors<\/h3>\n<p>We added several new reactive state holders to <code>media3-ui-compose<\/code>:<\/p>\n<ul>\n<li><code>rememberCurrentMediaItemState<\/code> \u2013 observe metadata about the currently playing item<\/li>\n<li><code>rememberPlaylistState<\/code> \u2013 observe the full playlist and active indices<\/li>\n<li><code>rememberErrorState<\/code> \u2013 track playback errors, with a matching <code>ErrorText<\/code> Composable and default <code>ErrorOverlay<\/code> in Material3<\/li>\n<\/ul>\n<p>We&#8217;ll continue working on new additions and more customization options in upcoming releases. Please share your thoughts on the <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/github.com\/androidx\/media\/issues\" target=\"_blank\">project issue tracker<\/a>.<\/p>\n<h2>Modernized Cast integration<\/h2>\n<p>Media3 1.11 updates the Cast extension with programmatic configuration options and support for OS-level routing.<\/p>\n<h3>CastParams and SystemUI Output Switcher<\/h3>\n<p>You can now configure the Cast extension using <code>CastParams<\/code>:<\/p>\n<pre><code>val castParams = CastParams.Builder()\n  .setShowSystemOutputSwitcherOnCastButtonClick(true)\n  .build()\n\nCast.getSingletonInstance(context).initialize(castParams)<\/code><\/pre>\n<p>Setting <code>setShowSystemOutputSwitcherOnCastIconClick(true)<\/code> configures the <code>MediaRouteButton<\/code> to open Android&#8217;s native SystemUI Output Switcher on supported platform versions, providing a unified output picker experience.<\/p>\n<h3>Reactive MediaRouteButton state in Compose<\/h3>\n<p>Apps using Jetpack Compose can now easily add the Media routing button (also known as Cast button), which automatically observes the dialog state and updates accordingly. No further logic needed when used together with Media3&#8217;s <code>CastPlayer<\/code>!<\/p>\n<pre><code>@Composable\nfun TopAppBarWithCast() {\n  Row {\n    Text(text = \"App Title\")\n    MediaRouteButton()\n  }\n}<\/code><\/pre>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEidQ-Xe-lcSB9FXluhjtqdpynCjvU4WKxIHIxLJVHKDPHULzbV_gEhFckoVMhvdArTFNWI0673TcgpOLMDAPugEdxVbf4ZHn7b6LUnBf8cEwvLkIE1MNtw3wq0xiaQLYGSoxYm6Vt98GebZJeX2vL4S1EjrBfLwTvpLg9Pv44gY9JKiKvxNlEni-uf0kaE\/s3230\/cast_button_2.png\" style=\"clear: left; float: left; margin-bottom: 1em; margin-right: 1em;\"><img decoding=\"async\" border=\"0\" data-original-height=\"861\" data-original-width=\"3230\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEidQ-Xe-lcSB9FXluhjtqdpynCjvU4WKxIHIxLJVHKDPHULzbV_gEhFckoVMhvdArTFNWI0673TcgpOLMDAPugEdxVbf4ZHn7b6LUnBf8cEwvLkIE1MNtw3wq0xiaQLYGSoxYm6Vt98GebZJeX2vL4S1EjrBfLwTvpLg9Pv44gY9JKiKvxNlEni-uf0kaE\/s1600\/cast_button_2.png\"\/><\/a><span style=\"text-align: left;\">Media3 media route button in an app launching the default output switcher dialog<\/span><\/div>\n<h2>Core playback and session enhancements<\/h2>\n<h3>Eclipsa Video &#8211; HAGC dynamic HDR metadata (API 37+)<\/h3>\n<p><a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/developer.android.com\/blog\/posts\/eclipsa-video-hdr-that-looks-right-on-every-screen\" target=\"_blank\">Eclipsa Video<\/a> promises a more consistent HDR experience across devices, with a consistent baseline HDR white, adaptive headroom depending on the screen and the surroundings, ensuring the creative intent is preserved on all devices.<\/p>\n<p>ExoPlayer now supports playback of the necessary HAGC (ST 2094-50) timed metadata for progressive media (MP4, Matroska). The player automatically merges HAGC metadata tracks with the associated video track and delivers the metadata out-of-band to the decoder on API 37+ devices. On older devices, ExoPlayer seamlessly falls back to providing a standard HDR playback experience without the adjustments.<\/p>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEggfp9FGFl6dWGw7EO8JUA1m56Y4TZBb9Yw7nUN3cBH2AVsTtewmAUsAflgQvAgAahMQLi4KJn0g8iD7GjKK103WwlKdJ7ID5RR0iYFl0-ddSaJoTtr4rGsJI6W2CIAwv9jpBHIPZ_AJvqZb6j7q2lcZe6Snp25x36zsioh5QzQqXDhoawr17m4CyQV-48\/s1288\/eclipsa.png\" style=\"clear: left; float: left; margin-bottom: 1em; margin-right: 1em;\"><img decoding=\"async\" border=\"0\" data-original-height=\"450\" data-original-width=\"1288\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEggfp9FGFl6dWGw7EO8JUA1m56Y4TZBb9Yw7nUN3cBH2AVsTtewmAUsAflgQvAgAahMQLi4KJn0g8iD7GjKK103WwlKdJ7ID5RR0iYFl0-ddSaJoTtr4rGsJI6W2CIAwv9jpBHIPZ_AJvqZb6j7q2lcZe6Snp25x36zsioh5QzQqXDhoawr17m4CyQV-48\/s1600\/eclipsa.png\"\/><\/a><\/div>\n<p><span style=\"text-align: left;\">Illustration to show benefits of Eclipsa Video HDR, like more consistent color contract<\/span><\/p>\n<h3>New Ktor HTTP client extension<\/h3>\n<p>A new <code>media3-datasource-ktor<\/code> extension module provides <code>KtorDataSource<\/code>, backed by the <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/ktor.io\/\" target=\"_blank\">Ktor<\/a> HTTP stack. This offers a Kotlin-first, coroutine-friendly alternative to the existing Cronet and OkHttp data source modules.<\/p>\n<h3>Asynchronous MediaSession connections<\/h3>\n<p><code>MediaSession.Callback<\/code> now includes <code>onConnectAsync()<\/code>, which lets you process controller connection attempts asynchronously \u2014 for example, to verify authorization before accepting a connection. You can return an immediate Future with <code>Futures.immediateFuture(ConnectionResult)<\/code> for the same behavior as the existing <code>onConnect<\/code>.<\/p>\n<pre><code>override fun onConnectAsync(\n  session: MediaSession,\n  controller: MediaSession.ControllerInfo\n): ListenableFuture<mediasession.connectionresult> {\n  return authenticateControllerAsync(controller)\n}<\/mediasession.connectionresult><\/code><\/pre>\n<h3>Safer MediaSession defaults<\/h3>\n<p>For apps that don\u2019t override <code>onConnect<\/code> or <code>onConnectAsync<\/code> in <code>MediaSession.Callback<\/code>, the library now defaults to a more secure configuration. Specifically, session data is no longer shared by default with untrusted controllers, meaning third-party or non-system apps lacking notification access are restricted from accessing session data unless you explicitly implement these callback methods to authorize the connection.<\/p>\n<h2>New Muxer implementations &#038; container parsing<\/h2>\n<h3>OggMuxer and WavMuxer<\/h3>\n<p>We&#8217;ve added two new dedicated muxers: <code>OggMuxer<\/code> for muxing OPUS and VORBIS streams into standard .ogg files, and <code>WavMuxer<\/code> for generating uncompressed and floating-point PCM .wav audio files.<\/p>\n<h3>Container parsing and track references<\/h3>\n<ul>\n<li>MP4 Track References (tref): <code>Mp4Muxer.addTrackReference<\/code> allows linking dependent metadata or aux tracks to primary video streams.<\/li>\n<li>Chapter Extraction: QuickTime and Nero chapter from MP4 files (.m4a, .m4b), and Matroska chapters, are now extracted as Chapter metadata entries for audiobook and podcast navigation.<\/li>\n<\/ul>\n<p>Please use the <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/github.com\/androidx\/media\/issues\" target=\"_blank\">issue tracker<\/a> to report any bugs, or if you have questions or feature requests. We look forward to hearing from you!<\/p>\n<\/div>\n<p><br \/>\n<br \/><a href=\"https:\/\/android-developers.googleblog.com\/2026\/08\/media3-1-11-whats-new.html\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Media3 1.11 is out. Powering the vast majority of top Android media apps, this release&#8230;<\/p>\n","protected":false},"author":1,"featured_media":400,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[880,881,882,883,884,885,886],"tags":[],"class_list":["post-399","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-audio","category-exoplayer","category-jetpack","category-media","category-media3","category-playback","category-video"],"_links":{"self":[{"href":"https:\/\/x.sheep-mine.ts.net\/index.php\/wp-json\/wp\/v2\/posts\/399","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/x.sheep-mine.ts.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/x.sheep-mine.ts.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/x.sheep-mine.ts.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/x.sheep-mine.ts.net\/index.php\/wp-json\/wp\/v2\/comments?post=399"}],"version-history":[{"count":0,"href":"https:\/\/x.sheep-mine.ts.net\/index.php\/wp-json\/wp\/v2\/posts\/399\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/x.sheep-mine.ts.net\/index.php\/wp-json\/wp\/v2\/media\/400"}],"wp:attachment":[{"href":"https:\/\/x.sheep-mine.ts.net\/index.php\/wp-json\/wp\/v2\/media?parent=399"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/x.sheep-mine.ts.net\/index.php\/wp-json\/wp\/v2\/categories?post=399"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/x.sheep-mine.ts.net\/index.php\/wp-json\/wp\/v2\/tags?post=399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}