一文掌握 Media3 1.5.0 的新功能
作者 / 工程经理 Kristina Simakova
Media3 1.5.0 已推出
Transformer 优化
动态照片支持
更快的图像编码
AudioEncoderSettings
编辑列表支持
不支持的轨道类型日志记录
Media3 Muxer
在之前的某个版本中,我们添加了一个新的 Muxer 库,可用于创建 MP4 容器文件。Media3 Muxer 支持多种音频和视频编解码器,可顺畅处理各种媒体格式。此外,这个新库还具备一些高级功能,包括:
B-frame 支持 碎片化的 MP4 输出 编辑列表支持
Muxer 库 https://github.com/androidx/media/tree/release/libraries/muxer
implementation ("androidx.media3:media3-muxer:1.5.0")
Media3 Muxer 与 Transformer
val transformer = Transformer.Builder(context).setMuxerFactory(InAppMuxer.Factory.Builder().build()).build()
简化 DefaultPreloadManager 和 ExoPlayer 的设置
在 Media3 1.5.0 中,我们增加了 DefaultPreloadManager.Builder,可使您更加容易地构建预加载组件和播放器。此前,我们要求您先实例化多个必要组件 (如 RenderersFactory、TrackSelectorFactory、LoadControl、BandwidthMeter 和预加载/播放 Looper),并在将这些组件注入 DefaultPreloadManager 构造函数和 ExoPlayer.Builder 时,十分谨慎地正确共享这些组件。通过使用新的 DefaultPreloadManager.Builder,这个过程变得简单多了:
使用所有默认组件构建 DefaultPreloadManager 和 ExoPlayer 实例。
val preloadManagerBuilder = DefaultPreloadManager.Builder()val preloadManager = preloadManagerBuilder.build()val player = preloadManagerBuilder.buildExoPlayer()
使用自定义共享组件构建 DefaultPreloadManager 和 ExoPlayer 实例。
val preloadManagerBuilder = DefaultPreloadManager.Builder().setRenderersFactory(customRenderersFactory)// The resulting preloadManager uses customRenderersFactoryval preloadManager = preloadManagerBuilder.build()// The resulting player uses customRenderersFactoryval player = preloadManagerBuilder.buildExoPlayer()
构建 DefaultPreloadManager 和 ExoPlayer 实例,并在 ExoPlayer 上设置自定义的仅播放配置。
val preloadManagerBuilder = DefaultPreloadManager.Builder()val preloadManager = preloadManagerBuilder.build()// Tune the playback-only configurationsval playerBuilder = ExoPlayer.Builder().setFooEnabled()// The resulting player will have playback feature "Foo" enabledval player = preloadManagerBuilder.buildExoPlayer(playerBuilder)
预加载下个播放列表项目
player.preloadConfiguration =PreloadConfiguration(/* targetPreloadDurationUs= */ 5_000_000L)
player.preloadConfiguration = PreloadConfiguration.DEFAULT
新 IAMF 解码器和
Kotlin 监听器扩展程序
implementation ("androidx.media3:media3-decoder-iamf:1.5.0")IAMF https://aomediacodec.github.io/iamf/ Media3 自述文件 https://github.com/androidx/media/blob/release/libraries/decoder_iamf/README.md
implementation ("androidx.media3:media3-common-ktx:1.5.0")
通过委托轻松定制播放器
装饰器模式 https://en.wikipedia.org/wiki/Decorator_pattern 切入重点 https://gist.github.com/icbaker/44e962c6e218ad141880331300308021
class PlayerWithoutSeekToNext(player: Player) : ForwardingSimpleBasePlayer(player) {override fun getState(): State {val state = super.getState()return state.buildUpon().setAvailableCommands(state.availableCommands.buildUpon().remove(COMMAND_SEEK_TO_NEXT).build()).build()}// We don't need to override handleSeek, because it is guaranteed not to be called for// COMMAND_SEEK_TO_NEXT since we've marked that command unavailable.}
MediaSession:
媒体项目的命令按钮
△ 屏幕截图:Android Automotive OS 媒体中心中媒体项目的命令按钮。
GitHub 上的 Media3 问题跟踪页 https://github.com/androidx/media/issues
谷歌开发者特别招募活动进行中
诚邀热爱技术的你加入
通过多种形式 (文章/视频/coding 等) 创作与 Google 技术相关的讲解分享、实践案例或活动感受等内容,以及分享您应用 AI 技术的故事经历与成果。我们将为您提供平台和资源,助力您在分享中提升技能。更有惊喜权益等您领取,快来报名参与吧!