当前位置: 首页 >>APP动态

Android MediaSession框架简析

时间:2020-09-06 10:09:55 点击:905次

一、简介

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

媒体控制器会隔离UI,将控制操作转换为对媒体会话的回调。当会话状态发生变化时,它也会接收来自媒体会话的回调。媒体控制器一次只能连接到一个媒体会话。
媒体会话负责与播放器的所有通信,它会对应用隐藏播放器的API,只能从控制播放器的媒体会话中调用播放器。它可以接收来自一个或多个媒体控制器的回调。


二、应用

1. 音频播放

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

2. 视频播放

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


三、原理

1. 核心成员类

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

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

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

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

2. 辅助成员类

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

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

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

3. 连接订阅

4. 数据加载

5. 媒体控制


相关阅读
猜您喜欢

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的产品开发保驾护航!

在线客服
联系方式

热线电话

18020301823

上班时间

周一到周五

公司电话

13400001823

二维码
线
在线留言