{"id":346707,"date":"2025-08-12T13:54:37","date_gmt":"2025-08-12T18:54:37","guid":{"rendered":"https:\/\/michigandigitalnews.com\/index.php\/2025\/08\/12\/android-developers-blog-media3-1-8-0\/"},"modified":"2025-08-12T13:54:37","modified_gmt":"2025-08-12T18:54:37","slug":"android-developers-blog-media3-1-8-0","status":"publish","type":"post","link":"https:\/\/michigandigitalnews.com\/index.php\/2025\/08\/12\/android-developers-blog-media3-1-8-0\/","title":{"rendered":"Android Developers Blog: Media3 1.8.0"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div>\n<meta content=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgjvUZRbW3C54XXsmXfmUotzasJ2iYC5dnPpM6MeEvi5jBGvHUzmawInbCLf2jehsnOWq0ic36GJ_QdXgMhj2cFziwvrV6R0QzKO-OnLzPmL2-w95f1q6ltsycfj_poLhXqe0ltaYZugveysTPkP1gg7hbz3IbIqqiqi0uGSsZJlT2n3cN46vtadnMcTAQ\/s1600\/android-jetpack-media3-1-8-0-meta.png\" name=\"twitter:image\"\/><br \/>\n<img decoding=\"async\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgjvUZRbW3C54XXsmXfmUotzasJ2iYC5dnPpM6MeEvi5jBGvHUzmawInbCLf2jehsnOWq0ic36GJ_QdXgMhj2cFziwvrV6R0QzKO-OnLzPmL2-w95f1q6ltsycfj_poLhXqe0ltaYZugveysTPkP1gg7hbz3IbIqqiqi0uGSsZJlT2n3cN46vtadnMcTAQ\/s1600\/android-jetpack-media3-1-8-0-meta.png\" style=\"display: none;\"\/><\/p>\n<p><em>Posted by Toni Heidenreich \u2013 Engineering Manager<\/em><\/p>\n<p><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjc7tvydNaQJzmTLusAiFBurSEmdaA24MfNjgUSSE6BheohJqi6AV-3KOuCVg0dJanXZKTE_HT8ujL1mMGW1HDi0KO4V3TqFd0I04HkLfME6D1B7LkCIDvUlQjlKGwj_Kq5WfBiQMqHJ4wN2ngzW9TwZ8GrvhuDWfzfwLU6aluHQXkLWX7jYM3iVfFFenI\/s1600\/Android%20Jetpack%20Media3%201.8.0.png\"><img decoding=\"async\" border=\"0\" data-original-height=\"800\" data-original-width=\"100%\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjc7tvydNaQJzmTLusAiFBurSEmdaA24MfNjgUSSE6BheohJqi6AV-3KOuCVg0dJanXZKTE_HT8ujL1mMGW1HDi0KO4V3TqFd0I04HkLfME6D1B7LkCIDvUlQjlKGwj_Kq5WfBiQMqHJ4wN2ngzW9TwZ8GrvhuDWfzfwLU6aluHQXkLWX7jYM3iVfFFenI\/s1600\/Android%20Jetpack%20Media3%201.8.0.png\"\/><\/a><\/p>\n<p>This release includes several bug fixes, performance improvements, and new features. Read on to find out more, and as always please check out the full <a href=\"https:\/\/github.com\/androidx\/media\/releases\/tag\/1.8.0\" target=\"_blank\" rel=\"noopener\">release notes<\/a> for a comprehensive overview of changes in this release.<\/p>\n<h2><span style=\"font-size: x-large;\">Scrubbing in ExoPlayer<\/span><\/h2>\n<p>This release introduces a <i>scrubbing mode<\/i> in ExoPlayer, designed to optimize performance for frequent, user-driven seeks, like dragging a seek bar handle. You can enable it with <span style=\"color: #0d904f; font-family: courier;\">ExoPlayer.setScrubbingModeEnabled(true)<\/span>. We&#8217;ve also integrated this into <span style=\"color: #0d904f; font-family: courier;\">PlayerControlView<\/span> in the UI module where it can be enabled with either <span style=\"color: #0d904f; font-family: courier;\">time_bar_scrubbing_enabled=&#8221;true&#8221;<\/span> in XML or the <span style=\"color: #0d904f; font-family: courier;\">setTimeBarScrubbingEnabled(boolean)<\/span> method. Media3 1.8.0 contains the first batch of scrubbing improvements, with more to come in 1.9.0!<\/p>\n<p><image><\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" alt=\"moving image showing repeated seeking while scrubbing with scrubbing mode off in ExoPlayer\" border=\"0\" id=\"imgCaption\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEie_PhwcM4wHt-mswNNqxnEH9Yir3mKSvcYEgagimsRmam5ikl7Yy9j96x9iBbt3pXf6axUu0MxbgI9iqKP-VNv_1_QScesSZbrg7joyAURn9xEPc1Sa9ANaj7Y1tMldDYz2AErDBebWzde4CDGChFc2zaatoeAdC-W0A2kBxipty1B5N_2bFm9o2nSuEU\/s16000\/media3-1-8-0-repeated-seeking-scrubbing-mode-off.gif\"\/><\/div>\n<p><imgcaption><center><em>Repeated seeking while scrubbing with scrubbing mode OFF<\/em><\/center><\/imgcaption><\/image><\/p>\n<p><image><\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" alt=\"moving image showing repeated seeking while scrubbing with scrubbing mode on in ExoPlayer\" border=\"0\" id=\"imgCaption\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiKjAPgLR6Utk4p4hZJTzHMGzWWqKrSXvKMKzOFsWQiwg2DUdQjC6nLOV1j5RCA5xkN4zCxezrdxhXfNUzMTWOF80hkXIifxJQtFILsdEBKvBs_mVi3hdvmyiFELnTsT_1BdLFCtY5dEkZxTk9aQY9Ef6tL3JT2xPtu4dJQ103ck7Opr_Jc0J7990ar79Y\/s1600\/media3-1-8-0-repeated-seeking-scrubbing-mode-on.gif\"\/><\/div>\n<p><imgcaption><center><em>Repeated seeking while scrubbing with scrubbing mode ON<\/em><\/center><\/imgcaption><\/image><\/p>\n<h2><span style=\"font-size: x-large;\">Live streaming ads with HLS interstitials<\/span><\/h2>\n<p>Extending the initial support for VOD in Media3 1.6.0, <span style=\"color: #0d904f; font-family: courier;\">HlsInterstitialsAdsLoader<\/span> now supports live streams and asset lists for all your server-guided ad insertion (SGAI) needs. The <a href=\"https:\/\/ads-developers.googleblog.com\/2025\/04\/unlock-premium-ad-experiences-for.html\" target=\"_blank\" rel=\"noopener\">Google Ads Manager team explains how SGAI works<\/a>. Follow our documentation for <a href=\"https:\/\/developer.android.com\/media\/media3\/exoplayer\/hls#interstitials\" target=\"_blank\" rel=\"noopener\">how to integrate HLS interstitals into your app<\/a>.<\/p>\n<p><image\/><\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" alt=\"chart of HLS intertitials processing flow from content server to ads server to Exoplayer\" border=\"0\" id=\"imgCaption\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjUgd047Oq3A7Y3PcrLab5pb24a2kf6XGaWrgZYiR8lrTgFNCJIsz3kiSe2QjbbrpUmnr9R5oAi3Ij17zLsSPijYHG7jtt-qZqdQKB3txAsq2yWky8R5JwYPmdVrt6bA3lmaJyeFDlShLM301FbtIawVO3vtbPAG9gdUBK0L03ognYFhYNaS9qZj3UqPV8\/s1600\/HLS-interstitials-processing-flow-chart.png\" width=\"85%\"\/><\/div>\n<p><imgcaption><center><em>HLS interstitials processing flow<\/em><\/center><\/imgcaption><\/p>\n<h2><span style=\"font-size: x-large;\">Duration retrieval without playback<\/span><\/h2>\n<p><span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/media\/media3\/exoplayer\/retrieving-metadata#wo-playback\" target=\"_blank\" rel=\"noopener\">MetadataRetriever<\/a><\/span> has been significantly updated &#8211; it&#8217;s now using an <span style=\"color: #0d904f; font-family: courier;\">AutoCloseable<\/span> pattern and lets you retrieve the duration of media items without playback. This means Media3 now offers the full functionality of the Android platform <span style=\"color: #0d904f; font-family: courier;\">MediaMetadataRetriever<\/span> but without having to worry about device specific quirks and cross-process communication (some parts like frame extraction are still experimental, but we&#8217;ll integrate them properly in the future).<\/p>\n<p><!--Kotlin--><\/p>\n<div style=\"background: rgb(248, 248, 248); border: 0px; overflow: auto; width: auto;\">\n<pre style=\"line-height: 125%; margin: 0px;\"><span\/><span style=\"color: green; font-weight: bold;\">try<\/span><span style=\"color: #bbbbbb;\"> <\/span>{\n<span style=\"color: #bbbbbb;\">  <\/span>MetadataRetriever.<span style=\"color: #687822;\">Builder<\/span>(context,<span style=\"color: #bbbbbb;\"> <\/span>mediaItem).<span style=\"color: #687822;\">build<\/span>().<span style=\"color: #687822;\">use<\/span><span style=\"color: #bbbbbb;\"> <\/span>{\n<span style=\"color: #bbbbbb;\">     <\/span><span style=\"color: green; font-weight: bold;\">val<\/span><span style=\"color: #bbbbbb;\"> <\/span><span style=\"color: #19177c;\">trackInfo<\/span><span style=\"color: #bbbbbb;\"> <\/span><span style=\"color: #666666;\">=<\/span><span style=\"color: #bbbbbb;\"> <\/span><span style=\"color: green;\">it<\/span>.<span style=\"color: #687822;\">retrieveTrackGroups<\/span>().<span style=\"color: #687822;\">await<\/span>()\n<span style=\"color: #bbbbbb;\">     <\/span><span style=\"color: green; font-weight: bold;\">val<\/span><span style=\"color: #bbbbbb;\"> <\/span><span style=\"color: #19177c;\">duration<\/span><span style=\"color: #bbbbbb;\"> <\/span><span style=\"color: #666666;\">=<\/span><span style=\"color: #bbbbbb;\"> <\/span><span style=\"color: green;\">it<\/span>.<span style=\"color: #687822;\">retrieveDurationUs<\/span>().<span style=\"color: #687822;\">await<\/span>()\n<span style=\"color: #bbbbbb;\">  <\/span>}\n}<span style=\"color: #bbbbbb;\"> <\/span><span style=\"color: green; font-weight: bold;\">catch<\/span><span style=\"color: #bbbbbb;\"> <\/span>(e:<span style=\"color: #bbbbbb;\"> <\/span>IOException)<span style=\"color: #bbbbbb;\"> <\/span>{\n<span style=\"color: #bbbbbb;\">  <\/span>handleFailure(e)\n}\n<\/pre>\n<\/div>\n<h2><span style=\"font-size: x-large;\">Partial downloads, XR audio routing and more efficient playback<\/span><\/h2>\n<p>There were several other improvements and bug fixes across ExoPlayer and playback related components. To name just a few:<\/p>\n<ul>\n<ul>\n<li><span style=\"color: #0d904f; font-family: courier;\">Downloader<\/span> implementations now support partial downloads, with a new <span style=\"color: #0d904f; font-family: courier;\">PreCacheHelper<\/span> to organize manual caching of single items. This will be integrated into ExoPlayer&#8217;s <a href=\"https:\/\/developer.android.com\/media\/media3\/exoplayer\/preloading-media\/preloadmanager\" target=\"_blank\" rel=\"noopener\">Default<span style=\"font-family: courier;\">PreloadManager<\/span><\/a> in Media3 1.9.0 for an even more seamless caching and <a href=\"https:\/\/developer.android.com\/media\/media3\/exoplayer\/preloading-media\/preloadmanager\" target=\"_blank\" rel=\"noopener\">preloading<\/a> experience.<\/li>\n<\/ul>\n<ul>\n<li>When created with a <span style=\"color: #0d904f; font-family: courier;\">Context<\/span> with a <a href=\"https:\/\/developer.android.com\/reference\/android\/companion\/virtual\/VirtualDevice#getDeviceId%28%29\" target=\"_blank\" rel=\"noopener\">virtual device ID<\/a>, ExoPlayer now automatically routes the audio to the virtual XR device for that ID.<\/li>\n<\/ul>\n<ul>\n<li>We enabled more efficient interactions with Android&#8217;s MediaCodec, for example skipping buffers that are not needed earlier in the pipeline.<\/li>\n<\/ul>\n<\/ul>\n<h2><span style=\"font-size: x-large;\">Playback resumption in demo app and better notification defaults<\/span><\/h2>\n<p>The <span style=\"color: #0d904f; font-family: courier;\">MediaSession<\/span> module has a few changes and improvements for notification handling. It&#8217;s now keeping notifications for longer by default, for example when playback is paused, stopped or failed, so that a user has more time to resume playback in your app. Notifications for live streams (in particular with DVR windows) also became more useful by removing the confusing DVR window duration and progress from the notification.<\/p>\n<p>The media session demo app now also supports playback resumption to showcase how the feature can be integrated into your app! It allows the user to resume playback long after your app has been terminated and even after reboot.<\/p>\n<p><image\/><\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" alt=\"Media resumption notification after device reboot\" border=\"0\" id=\"imgCaption\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjQc1cllu3KUlFLLJLLECRf5VocBWdhGrVszfgV86VbcwW9zLjPhen62N5T-F8AUgpk2ktw2bTKDFPJxs_GQJxGPXpM6q7wuXsAQ7z7yM2KuWohQDJf-5zHYixIaX1dQ2SWvunCEFpR13MS0HJY08K0BuTgud8ZpVsl66ZeDyQWUPbuKJnuHmKCuzIyQDI\/s16000\/media-resumption-notification-after-device-reboot.png\"\/><\/div>\n<p><imgcaption><center><em>Media resumption notification after device reboot<\/em><\/center><\/imgcaption><\/p>\n<h2><span style=\"font-size: x-large;\">Faster trim operations with edit list support<\/span><\/h2>\n<p>We are continuing to add optimizations for faster trim operations to Transformer APIs. In the new 1.8.0 release, we introduced support for trimming using MP4 edit lists. Call <span style=\"color: #0d904f; font-family: courier;\">experimentalSetMp4EditListTrimEnabled(true)<\/span> to make trim-only edits significantly faster.<\/p>\n<p><!-- Kotlin --><\/p>\n<div style=\"background: #f8f8f8; overflow:auto;width:auto;border:0;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span\/><span style=\"color: #008000; font-weight: bold\">val<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #19177C\">transformer<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">=<\/span><span style=\"color: #BBB\"> <\/span>Transformer.<span style=\"color: #687822\">Builder<\/span>(requireContext())\n<span style=\"color: #BBB\">        <\/span>.<span style=\"color: #687822\">addListener<\/span>(transformerListener)\n<span style=\"color: #BBB\">        <\/span>.<span style=\"color: #687822\">experimentalSetMp4EditListTrimEnabled<\/span>(<span style=\"color: #008000; font-weight: bold\">true<\/span>)\n<span style=\"color: #BBB\">        <\/span>.<span style=\"color: #687822\">build<\/span>()\n<\/pre>\n<\/div>\n<p>A standard trimming operation often requires a full re-transcoding of the video, even for a simple trim. This meant decoding, re-encoding the entire file, which is a time-consuming and resource-intensive process. With MP4 edit list support, Transformer can now perform &#8220;trim-only&#8221; edits much more efficiently. Instead of re-encoding, it leverages the existing encoded samples and defines a &#8220;pre-roll&#8221; within the edit list. This pre-roll essentially tells the player where to start playback within an existing encoded sample, effectively skipping the unwanted beginning portion.<\/p>\n<p>The following diagram illustrates how this works:<\/p>\n<p><image\/><\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" alt=\"processing overview for faster trim optimizations\" border=\"0\" id=\"imgCaption\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjaauZG2XbN_mNb5UBOfF_4Kq6oyIMDJCdhJ9fdWEaocFuDPc16kQk9pISzd4CEA_W5D6VSi2aFb1bXuBvXKmMMJaPfeVoofJggwXvofqqLqxa9YzboBpS4trbvTDrdanU-7qk7UHkYB0FBKSE_4CF6UOurKhZplASVwWU5ILjnCWvL9XVTkk6ZtBHz5Z4\/s1600\/processing-overview-faster-trim-optimization.jpg\"\/><\/div>\n<p><imgcaption><center><em>Processing overview for faster trim optimizations<br \/>\n<\/em><\/center><\/imgcaption><\/p>\n<p>As illustrated above, each file contains encoded samples and each sample begins with a keyframe. The red line indicates the intended clip point in the original file, allowing us to safely discard two first samples. The major difference in this approach lies in how we handle the third encoded sample. Instead of running a transcoding operation, we transmux this sample and define a pre-roll for a video start position. This significantly accelerates the export operation; however this optimization is only applicable if no other effects are applied. Player implementations may also ignore the pre-roll component of the final video and play from the start of the encoded sample.<\/p>\n<h2><span style=\"font-size: x-large;\">Chipset specific optimizations with CodecDbLite<\/span><\/h2>\n<p>CodecDBLite optimizes two elements of encoder configuration on a chipset-by-chipset basis: codec selection and B-frames. Depending on the chipset, these parameters can have either a positive or adverse impact on video quality. CodecDB Lite leverages benchmark data collected on production devices to recommend a configuration that achieves the maximum user-perceived quality for the developer\u2019s target bitrate. By enabling CodecDB Lite, developers can leverage advanced video codecs and features without worrying about whether or not they work on a given device.<\/p>\n<p>To use CodecDbLite, simply call <span style=\"color: #0d904f; font-family: courier;\">setEnableCodecDbLite(true)<\/span> when building the encoder factory:<\/p>\n<p><!-- Kotlin --><\/p>\n<div style=\"background: #f8f8f8; overflow:auto;width:auto;border:0;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span\/><span style=\"color: #008000; font-weight: bold\">val<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #19177C\">transformer<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">=<\/span>\n<span style=\"color: #BBB\">    <\/span>Transformer.<span style=\"color: #687822\">Builder<\/span>()\n<span style=\"color: #BBB\">        <\/span>.<span style=\"color: #687822\">setEncoderFactory<\/span>(\n<span style=\"color: #BBB\">            <\/span>DefaultEncoderFactory.<span style=\"color: #687822\">Builder<\/span>()\n<span style=\"color: #BBB\">                <\/span>.<span style=\"color: #687822\">setEnableCodecDbLite<\/span>(<span style=\"color: #008000; font-weight: bold\">true<\/span>)\n<span style=\"color: #BBB\">                <\/span>.<span style=\"color: #687822\">build<\/span>()\n<span style=\"color: #BBB\">        <\/span>)\n<span style=\"color: #BBB\">        <\/span>.<span style=\"color: #687822\">build<\/span>()\n<\/pre>\n<\/div>\n<h2><span style=\"font-size: x-large;\">New Composition demo<\/span><\/h2>\n<p>The <a href=\"https:\/\/github.com\/androidx\/media\/tree\/release\/demos\/composition\" target=\"_blank\" rel=\"noopener\">Composition Demo app<\/a> has been refreshed, and is now built entirely with Kotlin and Compose to showcase advanced multi-asset editing capabilities in Media3. Our team is actively extending the APIs, and future releases will introduce more advanced editing features, such as transitions between media items and other more advanced video compositing settings.<\/p>\n<p><b>Adaptive-first:<\/b> Editing flows can get complicated, so it helps to take advantage of as much screen real estate as possible. With the adaptive layouts provided by Jetpack Compose, such as the <a href=\"https:\/\/developer.android.com\/develop\/ui\/compose\/layouts\/adaptive\/build-a-supporting-pane-layout\" target=\"_blank\" rel=\"noopener\">supporting pane layout<\/a>, we can dynamically adapt the UI based on the device\u2019s screen size.<\/p>\n<p><image\/><\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" alt=\"new Composition demo app\" border=\"0\" id=\"imgCaption\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgL94_ksTExG6aDGurbjV-PyA1Y8rx066b-S-dmrZ_HErdjm4XThFP5YhW4sJgrOH4FVVlLIIS6K4BI_YYNUqiuUeyl_poOd98RMhRM_4l3vQWkr_I-FR1A-LpXi3Gv7tcgYL_BDgG7qAYSuCLeiFK4Zp3xvYC9t8_wciXl3dgw8NiRNnEO9Vzm37JXNM0\/s1600\/new-composition-demo-app.gif\" width=\"35%\"\/><\/div>\n<p><imgcaption><center><em>Processing overview for faster trim optimizations<\/em><\/center><\/imgcaption><\/p>\n<p><b>Multi-asset video compositor:<\/b> We\u2019ve added a <a href=\"https:\/\/github.com\/androidx\/media\/blob\/b7bbc6e2bc3e45ff3ed99884c114c50f03bba5c9\/demos\/composition\/src\/main\/java\/androidx\/media3\/demo\/composition\/CompositionPreviewViewModel.kt#L322\" target=\"_blank\" rel=\"noopener\">custom video compositor<\/a> that demonstrates how to arrange input media items into different layouts, such as a 2&#215;2 grid or a picture-in-picture overlay. These compositor settings are <a href=\"https:\/\/developer.android.com\/reference\/androidx\/media3\/transformer\/Composition.Builder#setVideoCompositorSettings%28androidx.media3.common.VideoCompositorSettings%29\" target=\"_blank\" rel=\"noopener\">applied to the Composition<\/a>, and can be used both with CompositionPlayer for preview and Transformer for export.<\/p>\n<p><image\/><\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" alt=\"picture-in-picture video overlay in the Composition demo app\" border=\"0\" id=\"imgCaption\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEi3FfIZOTOAotctlmJZjoCMQQCxX7tSkp3MABvOQ8WVlwjs57Vu5WKx1dwNurc9139gaB6OkxtqOHgXeLGo1E_kd9skHrIlZBpwJ7QYUi-gLCAHzTOOPF4EHsHtunJ3Xbh3ehJ4-0JjgwS-XGahorpS80uB4UOwmS5OEZC8IFNDyYriFSdu9Hle0eQLybk\/s1600\/picture-in-picture-video-overlay-composition-demo-app.gif\" width=\"35%\"\/><\/div>\n<p><imgcaption><center><em>Picture-in-picture video overlay in the Composition demo app<\/em><\/center><\/imgcaption><\/p>\n<h2><span style=\"font-size: x-large;\">Get started with Media3 1.8.0<\/span><\/h2>\n<p>Please get in touch via the <a href=\"https:\/\/github.com\/androidx\/media\/issues\" target=\"_blank\" rel=\"noopener\">Media3 issue Tracker<\/a> if you run into any bugs, or if you have questions or feature requests. We look forward to hearing from you!<\/p>\n<\/div>\n<p>[ad_2]<br \/>\n<br \/><a href=\"http:\/\/android-developers.googleblog.com\/2025\/08\/media3-180-whats-new.html\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] Posted by Toni Heidenreich \u2013 Engineering Manager This release includes several bug fixes, performance improvements, and new features. Read on to find out more,<\/p>\n","protected":false},"author":1,"featured_media":346708,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[146],"tags":[],"_links":{"self":[{"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/posts\/346707"}],"collection":[{"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/comments?post=346707"}],"version-history":[{"count":0,"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/posts\/346707\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/media\/346708"}],"wp:attachment":[{"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/media?parent=346707"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/categories?post=346707"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/tags?post=346707"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}