苦等多年!Compose 终于迎来原生 Media3 播放器

张开发
2026/4/10 11:18:01 15 分钟阅读

分享文章

苦等多年!Compose 终于迎来原生 Media3 播放器
本文首发于公众号“Android技术圈HPro”前两天Google 正式发布了Media3 1.10。对开发者来说最炸的莫不过Compose终于有自己的播放器了Compose 播放器来了过去一提 Compose 播放器很多团队的真实状态其实都差不多。要么继续用PlayerView外面包一层AndroidView()要么自己把内容层、控制层、进度条、手势和倍速按钮一块一块拼出来。问题不是做不到而是很费。尤其是当你既想保留 Compose 的声明式写法又想让界面更接近 Material 3 风格时工作量很容易失控。这次Media3 1.10在media3-ui-compose-material3上继续扩模块并新增了一个可直接上手的Player Composable。官方给它的定位很明确把内容显示和可定制的播放控制组合起来先给你一套开箱可用的现代播放器骨架。同时这版还补了几个很关键的小部件•ProgressSlider支持拖拽和点击 seek•PlaybackSpeedControl做倍速管理•PlaybackSpeedToggleButton提供 Material 3 风格的倍速切换按钮这件事真正有价值的地方不是“少写几个控件”。而是团队终于可以先拿到一套官方 Compose 播放器底座再决定哪些地方自己定制而不是从零开始手搓一整套媒体交互层。如果你只是想先把依赖拉起来最小升级可以先这样配implementation(androidx.media3:media3-exoplayer:1.10.0)implementation(androidx.media3:media3-ui-compose:1.10.0)implementation(androidx.media3:media3-ui-compose-material3:1.10.0)如果你们现在还停留在PlayerView Compose 包壳的过渡方案这版已经值得单独拉一个分支试一轮。你们更想要官方接下来先补字幕、轨道选择还是更细粒度的播放器插槽我觉得这会直接决定 Media3 Compose 这条线成熟得有多快。性能提升很多版本发布喜欢讲新能力但业务里真正要命的往往不是“有没有新 API”而是“这个资源到底播不播得出来”“出错了能不能兜住”“高负载时还能不能稳一点”。Media3 1.10在播放层补的很多就是这种更贴近实战的问题。先看格式支持。这次 ExoPlayer 新增了对MP4容器中Dolby Vision Profile 10和VVCtrack 提取的支持decoder_mpegh扩展加入了MPEG-H UI managerIAMF扩展也更顺滑地支持双耳输出并且能借助 AndroidSpatializer更好匹配扬声器布局。这几项放在一起看信号很清楚ExoPlayer 不是只在补“能不能播”而是在继续往更复杂、更高规格的媒体场景靠。除此之外这版还做了几件非常工程化的改进• 广告播放链路继续提升可靠性• HLS interstitial 更好支持X-PLAYOUT-LIMIT和X-SNAP• HLS 遇到加载错误时如果有不同 location 的冗余流可以做 location fallback•MediaSessionService现在继承LifecycleService服务生命周期管理会自然很多还有一个我很在意的小实验能力官方开始支持用更高效的方式调度核心播放循环。如果你们有多实例播放、长列表视频预览、后台音频或直播场景这个方向值得马上盯住。试验开关也很直接val playerExoPlayer.Builder(context).experimentalSetDynamicSchedulingEnabled(true).build()它现在还是实验能力但方向已经很明确了。Media3 今年一个重点不只是让播放器“能跑起来”而是让播放器“跑得更有效率”。如果你们团队最近正好在排查掉帧、发热、功耗或者复杂 HLS 兼容问题这段更新比表面上看更值钱。倍速导出这件事终于更稳了做媒体编辑的人都知道倍速从来不只是把数值改成1.25x或1.5x那么简单。一旦进入导出链路帧率、输出体积、处理性能很快就会互相牵制。很多时候你以为自己只是做了一个“调速度”的功能最后踩到的却是导出体积异常、处理时间拉长或者成片表现不稳定。这次Transformer的改动不花哨但非常实用。EditedMediaItem.Builder.setFrameRate()现在可以用来设置视频的最大输出帧率在和setSpeed()配合时尤其有价值。一个很实用的写法大概就是这样val editedItemEditedMediaItem.Builder(mediaItem).setSpeed(1.5f).setFrameRate(30).build()如果你们在做短视频剪辑、模板导出、运动视频快放或者任何“用户会频繁改速度”的编辑场景这个点建议直接转给负责导出链路的同学。因为它解决的不是 API 好不好看而是倍速导出最容易出事的那个位置终于有了更明确的控制杆。写在最后要不要升级我的建议很简单• 正在做 Compose 播放器建议尽快开分支验证• 业务里有复杂格式、HLS、广告、空间音频建议安排升级评估• 正在做导出或剪辑链路至少把Transformer的帧率控制测一轮• 如果当前项目改动窗口很小可以先观察但没必要忽略这版你们团队现在最痛的是播放器 UI、格式兼容还是视频导出[#Android](javascript: [#Media3](javascript: [#ExoPlayer](javascript: [#Compose](javascript: [#音视频开发](javascript:

更多文章