android音视频指南-媒体应用架构概述

翻译自Media app architecture overview

本节将解释如何将媒体播放器应用程序分离为媒体控制器(用于UI)和媒体会话(用于实际播放器)。它描述了两种媒体应用程序架构:一种客户端/服务器设计,适用于音频应用程序,另一种是视频播放器的单活动设计。它还展示了如何使媒体应用程序响应硬件控制并与使用音频输出流的其他应用程序合作。

播放器和用户界面

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

  • 一种将数字媒体带入并将其呈现为视频和/或音频的播放器
  • 一个带有传输控件的UI,可以运行播放器并显示播放器的状态
image

在Android中,你可以从头开始构建自己的播放器,或者你可以从以下选项中选择:

  • MediaPlayer类为支持最常见的音频/视频格式和数据源的基本播放器提供了基本功能。
  • ExoPlayer是一个开源库,可以公开底层的Android音频api。ExoPlayer支持诸如DASH和HLS流等在MediaPlayer中不可用的高性能特性。您可以自定义ExoPlayer代码,使添加新组件变得容易。ExoPlayer只能在Android 4.1及更高版本下使用。

媒体会话media session和媒体控制器media controller

虽然UI和播放器的api可以是任意的,但是对于所有媒体播放器应用程序来说,这两部分之间的交互本质上是相同的。Android框架定义了两个类,一个媒体会话和一个媒体控制器,它们为构建媒体播放器应用程序强加了定义良好的结构。

媒体会话和媒体控制器使用与标准播放器动作(播放、暂停、停止等)对应的预定义回调进行通信,以及可扩展的定制调用,您可以使用这些调用定义应用程序特有的特殊行为。

image

媒体会话media session

媒体会话负责与播放器的所有交流。它会将播放器的API隐藏到应用程序的其他部分。播放器只能从控制它的媒体会话中调用。

该会话维护播放器状态(播放/暂停)和关于正在播放内容的信息的表示。会话可以从一个或多个媒体控制器接收回调。这使得你的播放器能够被你的应用程序的UI以及运行Wear OS和Android Auto的配套设备所控制。

媒体控制器media controller

媒体控制器隔离你的UI。你的UI代码只与媒体控制器通信,而不是播放器本身。媒体控制器将传输控制操作转换为对媒体会话的回调。当会话状态发生变化时,它还从媒体会话接收回调。这提供了一种自动更新关联UI的机制。媒体控制器一次只能连接到一个媒体会话。

当您使用媒体控制器和媒体会话时,您可以在运行时部署不同的接口和/或播放器。你可以改变你的应用的外观和/或性能独立取决于设备运行的能力。

视频应用和音频应用

当播放视频时,你的眼睛和耳朵都在工作。播放音频时,你是在听,但你也可以同时使用不同的应用程序。每个用例都有不同的设计。

视频应用

视频应用程序需要一个窗口来查看内容。由于这个原因,视频应用程序通常被实现为一个单一的Android活动。视频显示的屏幕是活动的一部分。

image

音频应用程序

音频播放器并不总是需要其UI可见。一旦开始播放音频,播放器就可以作为后台任务运行。用户可以切换到另一个应用程序,一边听一边工作。

要在Android中实现这个设计,您可以使用两个组件构建一个音频应用程序:一个用于UI的活动,一个用于播放器的服务。如果用户切换到另一个应用程序,服务可以在后台运行。通过将音频应用程序的两个部分分解成单独的组件,每个组件都可以更高效地独立运行。与没有UI的播放器相比,UI通常是很短暂的,因为播放器在没有UI的情况下可能会运行很长时间。


image

支持库提供了两个类来实现这种客户机/服务器方法:MediaBrowserServiceMediaBrowser。服务组件作为包含媒体会话及其播放器的MediaBrowserService的子类实现。带有UI和媒体控制器的活动应该包括一个MediaBrowser,它与MediaBrowserService通信。

使用MediaBrowserService可以让配套设备(如Android Auto和Wear)很容易地发现你的应用程序,连接到它,浏览内容和控制回放,而不需要访问你的UI活动。

媒体应用和Android音频基础设施

一个设计良好的媒体应用程序应该和其他播放音频的应用程序“一起玩得很好”。它应该准备好与使用音频的设备上的其他应用程序共享手机和合作。它还应该对设备上的硬件控件做出响应。

image

上述行为查看Controlling Audio Output.

media-compat库

media-compat库包含的类有助于构建播放音频和视频的应用程序。这些类与运行Android 2.3 (API level 9)及更高版本的设备兼容。他们还与其他Android特性一起工作,以创建一个舒适的、熟悉的Android体验。

媒体会话和媒体控制器的推荐实现是MediaSessionCompatMediaControllerCompat类,它们在media-compat支持库中定义。它们替换了Android 5.0 (API级别21)中引入的类MediaSessionMediaController的早期版本。compat类提供了相同的功能,但使开发应用程序更容易,因为只需要编写一个API。库通过将媒体会话方法转换为旧平台版本上的等效方法来处理向后兼容性。

如果您已经有了一个使用旧类的工作应用程序,我们建议更新到compat类。使用compat版本时,可以删除对registerMediaButtonReceiver()RemoteControlClient的任何方法的所有调用。

测量性能

在Android 8.0 (API级别26)和更高版本中,有些媒体类可以使用getMetrics()方法。它返回一个包含配置和性能信息的PersistableBundle对象,表示为属性和值的映射。getMetrics()方法用于这些媒体类:

为每个实例分别收集指标,并为实例的生命周期持久保存。如果没有可用的指标,该方法返回null。返回的实际指标取决于类。


下一篇:android音视频指南-使用媒体会话media session

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容