Android API Guide for Media Apps(一)——概览(Overview)

Media Apps Overview

播放器和用户界面(Player and UI)

一个播放音频或视频的多媒体应用程序通常有两部分:

  • 一个将数字媒体作为视频或音频呈现的播放器。

  • 一个带有传输控件的UI来运行播放器并选择性地显示播放器的状态。

这里写图片描述

在Android中你可以从0开始构建你自己的播放器,或者你可以从以下两种方式选择一种实现:

  • MediaPlayer类为播放器的架构提供了基本的功能,这些功能支持常见的音频/视频格式和数据源。

  • ExoPlayer是一个支持相对低版本Android音频APIs的开源库。ExoPlayer支持高性能的功能,如DASH和HLS流,这些功能在MediaPlayer是不可用的。你可以自定义ExoPlayer的代码,并且可以很容易的添加新的组件。ExoPlayer只能使用在Android4.1或更高的版本中。

媒体会话和媒体控制器(Media session and media controller)

所有媒体播放器app基本的相同点就是用户界面的接口和播放器的之间是可以任意,自由的交互。Android架构定义了两个类,media session(媒体会话)和media controller(媒体控制器),这两个类为构建媒体播放器app添加了一个明确的架构。

媒体会话和媒体控制器之间使用预定义的回调函数进行通信,这些回调函数符合标准的播放器行为(播放,暂停,停止等等),你还可以在你的app上扩展自定义特有的回调行为。

这里写图片描述

媒体会话(Media session)

媒体会话用于响应播放器所有的通信。它隐藏了app播放器的API,播放器只需从媒体会话中调用接口来控制它。

媒体会话维护一个播放器状态(正在播放/暂停)代理和正在播放的音频/视频信息。一个媒体会话可以接收一个或多个媒体控制器的回调函数。这使得你的播放器可以被app的用户界面控制,也可以被其他衍生设备,如Android可穿戴设备或Android Auto控制。

媒体控制器(Media controller)

一个媒体控制器分离了你的UI。用户界面的代码只需要与媒体控制器通信,而不需要与播放器本身。媒体控制器传送控制事件到回调函数中(添加在媒体会话中的回调函数)。无论何时媒体会话的状态发生改变,媒体控制器也会接收到媒体会话的回调函数。所以它提供了一个自动更新关联的UI机制。媒体控制器一次只能连接一个媒体会话。

当你使用媒体控制器和媒体会话时,你可以在运行期间使用不同的接口或不同的播放器。你可以独立地改变应用程序的外观或性能,不过这取决于app所运行设备的能力。

视频应用与音频应用(Video apps versus audio apps)

当播放视频时,眼睛和耳朵一般都是同时集中注意力的。当播放音频时,你只需聆听,还可以在这期间使用其它app。因为这些使用情况的不同,所以app有不同的设计。

视频应用(Video app)

视频app需要一个窗口展示视图内容。因为这个原因视频app通常作为一个单一的Android Activtiy来实现。屏幕所出现的视频只不过activity的一部分。

这里写图片描述

音频应用(Audio app)

音频播放器不是总需要让用户界面显示的。一旦它开始播放音频后,播放器就可以作为一个后台任务运行。用户可以在聆听的时候切换到另外一个应用。

为了在Android中实现这个设计,你可以使用两个组件构建一个音频app:一个UI activity和一个service来实现播放器。如果用户切换为另外一个应用,service可以在后台运行。通过将音频应用程序的两个部分分解成单独的组件,每个组件都可以更高效的工作。当然,音频的用户界面相对与播放器一般都是比较短时间的,用户更多是在没有UI的情况下长时间运行音频。

这里写图片描述

支持库提供了两个类来实现client/server的设计:MediaBrowserService and MediaBrowser。service组件作为MediaBrowserService子类的实现,它包含了媒体会话和播放器。activity的UI和媒体控制器包含在 MediaBrowser中,它与 MediaBrowserService进行通信。

使用MediaBrowserService让衍生设备(比如Android Auto和Wear)更容易发现你的应用,并通过连接你的应用,来浏览app的内容以及在不需要访问用户界面的情况下控制播放音频。

媒体应用和Android音频基础(Media apps and the Android audio infrastruture)

一个不错的媒体应用应该能兼容其他播放音频的app。它应该做好共享手机资源的准备并与设备上其它使用音频的app进行协作,它也应该能响应设备上硬件控件。

这里写图片描述

所有这些行为都在 Handling Changes in Audio Output描述。

媒体兼容库(The media-compat libaray)

media-compat libaray包含了构建播放音频和视频应用程序的类。这些类兼容Android 2.3(API级别9)或更高版本的设备。

推荐使用MediaSessionCompat类和MediaControllerCompat类实现的媒体会话和媒体控制器。他们替换了早期在Android 5.0引入的MediaSession类和MediaController 类。这些兼容类提供了同样的功能,但使用它开发程序更简单,因为你只需要写一个API。使用该库要注意使用转换的媒体会话方法来向前兼容旧版本的方法。

如果你的app已经使用了旧的接口类,我们推荐你更新到兼容类。当你使用兼容版本的接口,你可以删除所有调用 registerMediaButtonReceiver() 的地方以及删除任何RemoteControlClient的方法。

猜你喜欢

转载自blog.csdn.net/u014011112/article/details/54849362