Media2
最近更新时间 | 稳定版 | 候选版 | Beta 版 | Alpha 版 |
---|---|---|---|---|
2024 年 1 月 10 日 | 1.3.0 | - | - | - |
声明依赖项
如需添加 Media2 的依赖项,您必须将 Google Maven 代码库添加到项目中。如需了解详情,请参阅 Google 的 Maven 代码库。
在应用或模块的 build.gradle
文件中添加所需工件的依赖项:
Groovy
dependencies { def media2_version = "1.3.0" // Interacting with MediaSessions implementation "androidx.media2:media2-session:$media2_version" // optional - UI widgets for VideoView and MediaControlView implementation "androidx.media2:media2-widget:$media2_version" // optional - Implementation of a SessionPlayer implementation "androidx.media2:media2-player:$media2_version" }
Kotlin
dependencies { val media2_version = "1.3.0" // Interacting with MediaSessions implementation("androidx.media2:media2-session:$media2_version") // optional - UI widgets for VideoView and MediaControlView implementation("androidx.media2:media2-widget:$media2_version") // optional - Implementation of a SessionPlayer implementation("androidx.media2:media2-player:$media2_version") }
如需详细了解依赖项,请参阅添加 build 依赖项。
反馈
您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库有任何改进建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。
如需了解详情,请参阅问题跟踪器文档。
版本 1.3
版本 1.3.0
2024 年 1 月 10 日
发布了 androidx.media2:media2-*:1.3.0
。版本 1.3.0 中包含这些提交内容。
自 1.2.0 以来的重要变更
- androidx.media2 现已完全废弃。请改用 androidx.media3。
版本 1.3.0-rc01
2023 年 12 月 13 日
发布了 androidx.media2:media2-*:1.3.0-rc01
,该版本与 Media2 1.3.0-beta01 相比没有变化。版本 1.3.0-rc01 中包含这些提交内容。
版本 1.3.0-beta01
2023 年 11 月 29 日
发布了 androidx.media2:media2-*:1.3.0-beta01
,该版本与 Media2 1.3.0-alpha01
相比没有变化。版本 1.3.0-beta01 中包含这些提交内容。
版本 1.3.0-alpha01
2023 年 11 月 15 日
发布了 androidx.media2:media2-*:1.3.0-alpha01
。版本 1.3.0-alpha01 中包含这些提交内容。
API 变更
androidx.media2
现已完全废弃。已改用androidx.media3
。(I53164)
版本 1.2.1
版本 1.2.1
2022 年 2 月 9 日
发布了 androidx.media2:media2-*:1.2.1
。版本 1.2.1 中包含这些提交内容。
bug 修复
- 修复了以 API 33 为目标平台时对自定义 Parcelable 进行的检查。
版本 1.2.0
版本 1.2.0
2021 年 9 月 15 日
发布了 androidx.media2:media2-*:1.2.0
。版本 1.2.0 中包含这些提交内容。
自 1.1.0 以来的重要变更
- 支持与 (prepare|play)From(MediaId|Uri|Search) 的 AndroidX 媒体互操作
- 在
MediaConstants
中添加了MEDIA_URI_PATH_SET_MEDIA_URI
和MEDIA_URI_QUERY_URI
版本 1.2.0-rc01
2021 年 9 月 1 日
发布了 androidx.media2:media2-*:1.2.0-rc01
。版本 1.2.0-rc01 中包含这些提交内容。
bug 修复
- 修复了关闭媒体通知时出现的 ANR 问题(Ifdcc2、b/148011394)
版本 1.2.0-beta01
2021 年 6 月 30 日
发布了 androidx.media2:media2-*:1.2.0-beta01
。版本 1.2.0-beta01 中包含这些提交内容。
新功能
- 支持与 (prepare|play)From(MediaId|Uri|Search) 的 AndroidX 媒体互操作
API 变更
- 在 MediaConstants 中添加了
MEDIA_URI_PATH_SET_MEDIA_URI
和MEDIA_URI_QUERY_URI
版本 1.2.0-alpha01
2021 年 4 月 21 日
发布了 androidx.media2:media2-*:1.2.0-alpha01
。版本 1.2.0-alpha01 中包含这些提交内容。
API 变更
- 添加了对 (prepare|play)From(MediaId|Uri|Search) 的支持(I13475、b/176949057)
bug 修复
- 修复了由不必要的同步块导致的死锁问题。
- 在没有可播放项时重置播放器
- 允许 onCurrentMediaItemChanged 获取 null 媒体项
- 在当前媒体项变化时更新通知
- 在创建会话后立即修复与控制器 compat 之间的互操作性
版本 1.1.3
版本 1.1.3
2021 年 4 月 21 日
发布了 androidx.media2:media2-*:1.1.3
。版本 1.1.3 中包含这些提交内容。
bug 修复
- 修复了由不必要的同步块导致的死锁问题。
版本 1.1.2
版本 1.1.2
2021 年 1 月 27 日
发布了 androidx.media2:media2-*:1.1.2
。版本 1.1.2 中包含这些提交内容。
bug 修复
- 修复了 VersionedParcelable 中的 NPE(I1ec28、b/177060207)
版本 1.1.1
版本 1.1.1
2020 年 12 月 16 日
发布了 androidx.media2:media2-*:1.1.1
。版本 1.1.1 中包含这些提交内容。
bug 修复
- 在当前媒体项变化时更新媒体通知。
版本 1.1.0
版本 1.1.0
2020 年 12 月 2 日
发布了 androidx.media2:media2-*:1.1.0
。版本 1.1.0 中包含这些提交内容。
自 1.0.0 以来的重要变更
- 添加了更多用于处理媒体轨道的 API
- 更好地支持与 AndroidX 媒体库之间的互操作性
- 添加了
MediaSession#setMediaUri
- 通过
MediaSession#getSessionCompatToken()
公开了MediaSessionCompat.Token
- 添加了
版本 1.1.0-rc01
2020 年 10 月 28 日
发布了 androidx.media2:media2-*:1.1.0-rc01
。版本 1.1.0-rc01 中包含这些提交内容。
- 修复了 MediaController 在持有锁期间通知回调,从而可能导致死锁的问题 (I76c56
- 修复了
MediaSessionImplBase#isClosed()
在已释放的MediaSessionCompat
上调用getCurrentControllerInfo()
时可能崩溃的问题。(aosp/1423291] - 修复了 media2
MediaSession
未将有效队列项 ID 设为PlaybackStateCompat
的问题 (aosp/1421652) - 在绑定到服务时添加了
BIND_INCLUDE_CAPABILITIES
标记,以允许无头媒体应用在获得相应权限的情况下使用位置信息。这对于 Android Auto 应用尤其有用。(aosp/1440731)
版本 1.1.0-beta01
2020 年 9 月 16 日
发布了 androidx.media2:media2-*:1.1.0-beta01
。版本 1.1.0-beta01 中包含这些提交内容。
bug 修复
- 当媒体项更改时重置当前位置
- 建立连接后发送元数据和缓冲状态
- 修复了在会话与控制器之间发送大量数据时发生崩溃的问题
- 在 Android 11 中,为 media 和 media2 的清单添加了
<queries>
- 修复了
MediaController.getPlaylist()
的 NPE 问题 - 不允许使用 seek 命令时,停用
MediaControlView
的进度条 - 当会话的当前媒体项更改时,通知
PlaybackStateCompat
- 修复了
SessionPlayer.TrackInfo
的打包问题
版本 1.1.0-alpha01
2020 年 6 月 24 日
发布了 androidx.media2:media2-*:1.1.0-alpha01
。版本 1.1.0-alpha01 中包含这些提交内容。
bug 修复
- 修复了在更新元数据时出现的时间问题(I45567、b/143999611)
- SessionResult 将保留来自 PlayerResult 的 MediaItem(I927b0、b/154885520)
- 修复了
MediaController#setVolumeTo()
可能会更改错误音频流音量的问题。(I76870、b/151204736)
版本 1.0.3
版本 1.0.3
2020 年 2 月 19 日
发布了 androidx.media2:media2-*:1.0.3
。media2-{common,player,session}
的版本 1.0.3 中包含这些提交内容,media2-widget
的版本 1.0.3 中包含这些提交内容。
bug 修复
- 修复了使用 null 回调创建 MediaController 时的 NullPointerException
- 修复了在
MediaPlayer.setMediaItem
之后未调用onPlaylistChanged()
的问题
版本 1.0.2
版本 1.0.2
2020 年 2 月 5 日
发布了 androidx.media2:media2-*:1.0.2
。media2-{common,player,session}
的版本 1.0.2 中包含这些提交内容,media2-widget
的版本 1.0.2 中包含这些提交内容。
bug 修复
- 修复了
MediaPlayer#getSelectedTrack()
中的IndexOutOfBoundsException
。(aosp/987003) - 改进了以下情况的处理方式:ExoPlayer 调用 getDuration(),而媒体内容不存在 (aosp/987484)
- 修复了当在
IDLE
状态调用getDuration()
时,ExoPlayer 不会抛出IllegalStateException
的错误 (aosp/987246) - 不允许 media2 的自定义 Parcelable (aosp/1091056)
- 修复了导致
close()
中断的问题 (aosp/1096455) - MediaBrowser:改进了使用
MediaBrowserService
在subscribe()
中处理错误的方式 (aosp/1158057) - 修复了与框架 MediaSession 有关的 MediaController 崩溃问题 (aosp/1177663)
- 建立连接后,不通过回调提供会话信息(aosp/1195030、b/142925848)
- 修复了可通过 MediaController 多次意外发送 SessionResult 的问题 (aosp/1198634)
- 修复了 MediaController 可能会向 MediaSession 发送不允许的命令的问题,因此 MediaSession 现在会发送
RESULT_ERROR_PERMISSION_DENIED
(aosp/1204183) - 修复了与
MediaControllerView#setPlayer
有关的异常问题 (aosp/987004)
版本 1.0.1
版本 1.0.1
2019 年 10 月 9 日
发布了 androidx.media2:media2-*:1.0.1
。androidx.media2:media2-{player, session}:1.0.1
的版本 1.0.1 中包含这些提交内容,androidx.media2:media2-widget:1.0.1
的版本 1.0.1 中包含这些提交内容。
bug 修复
- 修复了跨进程发送 MediaItem 子类时出现的 RuntimeException (aosp/1098971)
- 修复了播放播放列表时 MediaPlayer 仅调用
onCurrentMediaItemChanged()
一次的问题 - 修复了 MediaPlayer 可以播放包含 2 个以上项目的播放列表的问题 (aosp/1108440)
- 修复了播放器即使不可见也继续在 SurfaceView 上播放的问题
- 修复了在调用
setPlayer
之前调用setViewType
时出现的 VideoView 播放的问题
版本 1.0.0
2019 年 9 月 5 日
发布了 androidx.media2:media2-*:1.0.0
。前者是 media2-{player, session}:1.0.0 中包含的提交,后者是 media2-widget:1.0.0 中包含的提交。
Media2 1.0.0 的主要功能
Media2 是下列 Media API 的新一代:MediaSession
、MediaController
、MediaBrowser
、MediaBrowserService
、VideoView
和 MediaControlView
。
media2.player.MediaPlayer
- API 主要与
android.media.MediaPlayer
匹配,底层引擎是 ExoPlayer - 内置音频焦点和噪声处理
- 实现 SessionPlayer
- API 主要与
media2.session.MediaSession
- 提供细粒度权限控制
- 支持自定义布局
- 易于使用 SessionPlayer,如
androidx.media2.player.MediaPlayer
- 可与
MediaControllerCompat
互操作
media2.session.MediaSessionService
- 轻量级版本的
MediaLibraryService
- 为后台播放提供服务生命周期管理
- 可与
MediaControllerCompat
和MediaBrowserServiceCompat
互操作
- 轻量级版本的
media2.session.MediaLibraryService
- 支持更好的分页,以便浏览媒体项或搜索包含大量项目的结果
- 可与
MediaControllerCompat
和MediaBrowserServiceCompat
互操作
media2.session.MediaController
- 可以连接到
MediaSession
、MediaSessionService
和MediaLibraryService
- 可与
MediaSessionCompat
和MediaBrowserServiceCompat
互操作
- 可以连接到
media2.session.MediaBrowser
- 继承
MediaController
- 可以连接到
MediaSession
、MediaSessionService
和MediaLibraryService
- 可与
MediaSessionCompat
和MediaBrowserServiceCompat
互操作
- 继承
media2.widget.VideoView
- 包含
android.widget.VideoView
的所有功能 - 能够在
TextureView
和SurfaceView
之间切换 - 可以与
MediaSession
配合使用
- 包含
media2.widget.MediaControlView
- 改善外观
- 包含
android.widget.MediaController
的所有功能 - 提供字幕轨道选择、播放速度选择和全屏模式
版本 1.0.0-rc02
2019 年 8 月 22 日
发布了 androidx.media2:media2-*:1.0.0-rc02
,点击此处可查看此版本中包含的更改。此版本包含 androidx.media2:media2-widget:1.0.0-rc02
,点击此处可查看此版本中包含的更改。
新功能
- 当
MediaControlView
属于VideoView
时,不再允许通过MediaControlView
(MCV) 调用setPlayer
或setController
bug 修复
MediaControlView
:仅当存在下一个或上一个媒体项时,下一个和上一个按钮才可点击。MediaControlView
:修复了调用onAttachedToWindow()
时的异常NullPointerException
- 现在,如果当前媒体项发生更改,Media2 Widget 能够正常处理新媒体项的元数据
Media2-Widget 版本 1.0.0-beta01
2019 年 7 月 2 日
发布了 androidx.media2:media2-widget:1.0.0-beta01
。点击此处可查看此版本中包含的提交内容。
新功能
- 后台播放:VideoView 可以获取 SessionPlayer 或 MediaController,以便应用无缝切换到后台播放模式,而不必在 VideoView 内部创建播放器。
- 移除了与 media2-player 库的依赖关系
- 添加了
onViewTypeChangedListener
API 变更
- 公开范围从公开更改为受保护:
VideoView.onMeasure(int, int)
VideoView.onAttachedToWindow()
VideoView.onDetachedFromWindow()
MediaControlView.onMeasure(int, int)
- 已移除:
VideoView.getSessionToken()
VideoView.setAudioAttributes(AudioAttributesCompat)
VideoView.setMedaItem(MediaItem)
MediaControlView.setSessionToken(SessionToken)
- 已添加:
VideoView.setMediaController(MediaController)
VideoView.getMediaControlView()
VideoView.setMediaController(MediaController)
VideoView.setPlayer(SessionPlayer)
VideoView.setOnViewTypeChangedListener()
MediaControlView.setPlayer(SessionPlayer)
MediaControlView.setMediaController(MediaContoller)
版本 1.0.0-rc01
2019 年 6 月 18 日
发布了 androidx.media2:media2-common:1.0.0-rc01
、androidx.media2:media2-player:1.0.0-rc01
和 androidx.media2:media2-session:1.0.0-rc01
。点击此处可查看此版本中包含的提交内容。
API 变更
对
ListenableFuture
的依赖项已迁移回到 Guava 的独立实现。请注意,如果您有测试目标依赖于完整 Guava 工件,在使用某些版本的 Android Gradle 插件时可能会遇到依赖关系解析冲突。如果遇到涉及
ListenableFuture
的Could not resolve all artifacts
错误,可以通过向项目编译配置添加android.dependency.useConstraints=false
来暂时解决这个问题。我们目前正在努力开发 Android Gradle 插件内的永久性修复方案,将于晚些时候发布。
版本 1.0.0-beta02
2019 年 6 月 5 日
发布了 androidx.media2:media2-common:1.0.0-beta02
、androidx.media2:media2-player:1.0.0-beta02
和 androidx.media2:media2-session:1.0.0-beta02
。点击此处可查看此版本中包含的提交内容。
bug 修复
- 在 androidx.media.player.MediaPlayer 上设置负播放速度将返回 RESULT_ERROR_BAD_VALUE。
- 将 Guava ListenableFuture 替换为 Jetpack 实现 (aosp/968828)
版本 1.0.0-beta01
2019 年 5 月 7 日
发布了 androidx.media2:media2-common:1.0.0-beta01
、androidx.media2:media2-player:1.0.0-beta01
和 androidx.media2:media2-session:1.0.0-beta01
。点击此处可查看此版本中包含的提交内容。
新功能
- 库拆分成 3 个部分:media2-common、media2-player、media2-session
- 对于标记为 @NonNull 的 null 参数,已将
IllegalPointerException
更改为NullPointerException
。
API 变更
- 引入了
MediaController.Builder
- 针对
FileMediaItem.Builder
的可选字段添加了 setter 方法 MediaController
和MediaBrowser
可以将应用的连接提示发送到MediaSession
、MediaSessionService
或MediaLibraryService
- 部分方法已经重命名以符合 Android 10 Media2 API
版本 1.0.0-alpha04
2018 年 12 月 17 日
API 变更
- 已重命名以下类:
MediaPlayer2
→MediaPlayer
MediaSession2
→MediaSession
MediaController2
→MediaController
MediaSessionService2
→MediaSessionService
MediaLibraryService2
→MediaLibraryService
MediaBrowser2
→MediaBrowser
MediaMetadata2
→MediaMetadata
Rating2
→Rating
SessionToken2
→SessionToken
SessionCommand2
→SessionCommand
SessionCommandGroup2
→SessionCommandGroup
- 已合并以下类:
DataSourceDesc2
和MediaItem2
已合并为MediaItem
MediaPlaylistAgent
和MediaPlayerConnector
已合并为SessionPlayer
- 添加了
Rating
的以下子类:HeartRating
、PercentageRating
、StarRating
和ThumbRating
Media2
现在将ListenableFuture
用于异步方法