Media2

与其他应用共享媒体内容和控件。
最新更新时间 当前稳定版 下一候选版本 Beta 版 Alpha 版
2020 年 2 月 19 日 1.0.3 - - -

声明依赖项

如需添加 Media2 的依赖项,您必须将 Google Maven 代码库添加到项目中。如需了解详情,请参阅 Google 的 Maven 代码库

在应用或模块的 build.gradle 文件中添加所需工件的依赖项:

    dependencies {
        def media2_version = "1.0.3"

        // 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"
    }
    

如需详细了解依赖项,请参阅添加构建依赖项

反馈

您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库的改进有自己的见解,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击加注星标按钮,为现有问题投票。

创建新问题

如需了解详情,请参阅问题跟踪器文档

版本 1.0.3

版本 1.0.3

2020 年 2 月 19 日

发布了 androidx.media2:media2-*:1.0.3media2-{common,player,session} 的版本 1.0.3 中包含这些提交内容media2-widget 的版本 1.0.3 中包含这些提交内容

问题修复

  • 修复了使用 null 回调创建 MediaController 时的 NullPointerException
  • 修复了在 MediaPlayer.setMediaItem 之后未调用 onPlaylistChanged() 的问题

版本 1.0.2

版本 1.0.2

2020 年 2 月 5 日

发布了 androidx.media2:media2-*:1.0.2media2-{common,player,session} 的版本 1.0.2 中包含这些提交内容media2-widget 的版本 1.0.2 中包含这些提交内容

问题修复

  • 修复了 MediaPlayer#getSelectedTrack() 中的 IndexOutOfBoundsException。(aosp/987003)
  • 改进了以下情况的处理方式:ExoPlayer 调用 getDuration(),而媒体内容不存在 (aosp/987484)
  • 修复了当在 IDLE 状态调用 getDuration() 时,ExoPlayer 不会抛出 IllegalStateException 的错误 (aosp/987246)
  • 不允许 media2 的自定义 Parcelable (aosp/1091056)
  • 修复了导致 close() 中断的问题 (aosp/1096455)
  • MediaBrowser:改进了使用 MediaBrowserServicesubscribe() 中处理错误的方式 (aosp/1158057)
  • 修复了与框架 MediaSession 有关的 MediaController 崩溃问题 (aosp/1177663)
  • 建立连接后,不通过回调提供会话信息(aosp/1195030b/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.1androidx.media2:media2-{player, session}:1.0.1 的版本 1.0.1 中包含这些提交内容androidx.media2:media2-widget:1.0.1 的版本 1.0.1 中包含这些提交内容

问题修复

  • 修复了跨进程发送 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 的新一代:MediaSessionMediaControllerMediaBrowserMediaBrowserServiceVideoViewMediaControlView

  • media2.player.MediaPlayer
    • API 主要与 android.media.MediaPlayer 匹配,底层引擎是 ExoPlayer
    • 内置音频焦点和噪声处理
    • 实现 SessionPlayer
  • media2.session.MediaSession
    • 提供细粒度权限控制
    • 支持自定义布局
    • 易于使用 SessionPlayer,如 androidx.media2.player.MediaPlayer
    • 可与 MediaControllerCompat 互操作
  • media2.session.MediaSessionService
    • 轻量级版本的 MediaLibraryService
    • 为后台播放提供服务生命周期管理
    • 可与 MediaControllerCompatMediaBrowserServiceCompat 互操作
  • media2.session.MediaLibraryService
    • 支持更好的分页,以便浏览媒体项或搜索包含大量项目的结果
    • 可与 MediaControllerCompatMediaBrowserServiceCompat 互操作
  • media2.session.MediaController
    • 可以连接到 MediaSessionMediaSessionServiceMediaLibraryService
    • 可与 MediaSessionCompatMediaBrowserServiceCompat 互操作
  • media2.session.MediaBrowser
    • 继承 MediaController
    • 可以连接到 MediaSessionMediaSessionServiceMediaLibraryService
    • 可与 MediaSessionCompatMediaBrowserServiceCompat 互操作
  • media2.widget.VideoView
    • 包含 android.widget.VideoView 的所有功能
    • 能够在 TextureViewSurfaceView 之间切换
    • 可以与 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) 调用 setPlayersetController

问题修复

  • 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-rc01androidx.media2:media2-player:1.0.0-rc01androidx.media2:media2-session:1.0.0-rc01。点击此处可查看此版本中包含的提交。

API 变更

  • ListenableFuture 的依赖项已迁移回到 Guava 的独立实现。

  • 请注意,如果您有测试目标依赖于完整 Guava 工件,在使用某些版本的 Android Gradle 插件时可能会遇到依赖关系解析冲突。如果遇到涉及 ListenableFutureCould not resolve all artifacts 错误,可以通过向项目编译配置添加 android.dependency.useConstraints=false 来暂时解决这个问题。我们目前正在努力开发 Android Gradle 插件内的永久性修复方案,将于晚些时候发布。

版本 1.0.0-beta02

2019 年 6 月 5 日

发布了 androidx.media2:media2-common:1.0.0-beta02androidx.media2:media2-player:1.0.0-beta02androidx.media2:media2-session:1.0.0-beta02。点击此处可查看此版本中包含的提交。

问题修复

  • 在 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-beta01androidx.media2:media2-player:1.0.0-beta01androidx.media2:media2-session:1.0.0-beta01。点击此处可查看此版本中包含的提交。

新功能

  • 库拆分成 3 个部分:media2-common、media2-player、media2-session
  • 对于标记为 @NonNull 的 null 参数,已将 IllegalPointerException 更改为 NullPointerException

API 变更

  • 引入了 MediaController.Builder
  • 针对 FileMediaItem.Builder 的可选字段添加了 setter 方法
  • MediaControllerMediaBrowser 可以将应用的连接提示发送到 MediaSessionMediaSessionServiceMediaLibraryService
  • 部分方法已经重命名以符合 Android 10 Media2 API

版本 1.0.0-alpha04

2018 年 12 月 17 日

API 变更

  • 已重命名以下类:
    • MediaPlayer2MediaPlayer
    • MediaSession2MediaSession
    • MediaController2MediaController
    • MediaSessionService2MediaSessionService
    • MediaLibraryService2MediaLibraryService
    • MediaBrowser2MediaBrowser
    • MediaMetadata2MediaMetadata
    • Rating2Rating
    • SessionToken2SessionToken
    • SessionCommand2SessionCommand
    • SessionCommandGroup2SessionCommandGroup
  • 已合并以下类:
    • DataSourceDesc2MediaItem2 已合并为 MediaItem
    • MediaPlaylistAgentMediaPlayerConnector 已合并为 SessionPlayer
  • 添加了 Rating 的以下子类:HeartRatingPercentageRatingStarRatingThumbRating
  • Media2 现在将 ListenableFuture 用于异步方法