Android MediaSession框架简析

一、简介

Google官方在 Android 5.0 引入的媒体应用框架,分为媒体控制器(用于UI)和媒体会话(用于播放器),主要目的是解耦UI和播放器(MediaPlayer、ExoPlayer等)。

Android MediaSession框架简析_第1张图片

媒体控制器会隔离UI,将控制操作转换为对媒体会话的回调。当会话状态发生变化时,它也会接收来自媒体会话的回调。媒体控制器一次只能连接到一个媒体会话。

媒体会话负责与播放器的所有通信,它会对应用隐藏播放器的API,只能从控制播放器的媒体会话中调用播放器。它可以接收来自一个或多个媒体控制器的回调。

 

二、应用

1. 音频播放

音频应用对UI使用Activity,对播放器使用Service。如果用户切换到其他App,该服务可以在后台运行,响应一些媒体控制事件。通过将音频应用的UI和播放分解为单独的组件,每个组件都可以更高效地独立运行。

Android MediaSession框架简析_第2张图片

2. 视频播放

视频应用需要一个窗口来查看内容,通常使用单个Activity来实现。由于视频不需要在后台播放,所以不需要MediaBrowser、MediaBrowserService等类。

Android MediaSession框架简析_第3张图片

 

三、原理

1. 核心成员类

  • MediaBrowserCompat媒体浏览器客户端类。用于连接MediaBrowserServiceCompat和订阅媒体数据,在回调了连接成功的方法后,通过获取的token得到MediaControllerCompat对象。

Android MediaSession框架简析_第4张图片

  • MediaBrowserServiceCompat浏览器服务服务端类。作为承载实际的播放器和MediaSessionCompat的容器,一般在onCreate()方法中,用setSessionToken(...)来设置token。在重写的onGetRoot(…)方法中判断是否允许连接,在onLoadChildren(…)方法中处理订阅信息。

Android MediaSession框架简析_第5张图片

  • MediaControllerCompat媒体控制器客户端类。可以通过getMetadata()的方式主动获取媒体信息,也可以通过getTransportControls().xxx()的方式发送控制指令,在MediaControllerCompat.Callback中接收媒体的状态,从而刷新界面UI。

Android MediaSession框架简析_第6张图片

  • MediaSessionCompat媒体会话服务端类。通过MediaSessionCompat.Callback来接收MediaControllerCompat发送的指令,然后调用实际的播放器执行相应的操作,如播放、暂停等。在媒体信息或状态发生变化后,通过setMetadata(mediaMetadata)的方式通知客户端,即MediaControllerCompat.Callback中的onMetadataChanged(metadata)方法 。

Android MediaSession框架简析_第7张图片

2. 辅助成员类

  • PlaybackStateCompat: 播放状态类。封装了媒体的各类状态信息,主要是: 状态、进度。

Android MediaSession框架简析_第8张图片

  • MediaMetadataCompat: 构建媒体信息类。主要是:标题、作者、专辑名、总时长等。注意与MediaSessionCompat.QueueItem、MediaBrowserCompat.MediaItem之间的差异。

Android MediaSession框架简析_第9张图片

  • MediaDescriptionCompat: 解析媒体信息类。与MediaMetadataCompat的作用相对应。

Android MediaSession框架简析_第10张图片

3. 连接订阅

Android MediaSession框架简析_第11张图片

4. 数据加载

Android MediaSession框架简析_第12张图片

5. 媒体控制

Android MediaSession框架简析_第13张图片

 

 

参考:

https://developer.android.google.cn/guide/topics/media

https://www.jianshu.com/p/a6c2a3ed842d

https://blog.csdn.net/weixin_42229694/article/details/89315026

https://www.jianshu.com/p/dae43c1eb7ab

你可能感兴趣的:(Android)