Android媒体应用(二)--综述

原文地址:https://developer.android.google.cn/guide/topics/media-apps/media-apps-overview.html

播放器和UI

播放音频或视频的多媒体应用通常有两个部分:
  • 将数字媒体作为视频和/或音频呈现的播放器
  • 具有传输控制作用的UI,用于运行播放器和展示播放器播放状态
在Android中,你可以从头开始构建自己的播放器,也可以选择:
  • MediaPlayer类为支持最常见的音频/视频格式和数据源的纯粹的播放器提供基本功能。
  • ExoPlayer是暴露低版本Android的音频API的开源库。 ExoPlayer支持在MediaPlayer中不可用的高性能功能,如DASH和HLS流。可以自定义ExoPlayer代码,使添加新组件变得容易。 ExoPlayer只能与Android 4.1及更高版本一起使用。

Media session and media controller

虽然UI和播放器的API可以是任意的,但是对于所有媒体播放器应用程序来说,这两个部分之间的交互性质基本相同。 Android框架定义了两个类,MediaSession和 MediaController,它们对构建媒体播放器应用程序施加了明确的结构。

MediaSession和MediaController使用预定义回调来互通信,这些回调用来回应播放器的动作(播放,暂停,停止等)以及你在你的app中单独设置的行为


Media session

Media session负责与播放器的所有通信。它隐藏了您应用程序其余部分的播放器API。播放器只能从控制它的媒体会话中调用。
该会话保持播放器状态(播放/暂停)的表示以及正在播放的内容的信息。Media session可以接收来自一个或多个  media controllers的回调。这使得您的播放器可以由您的应用程序的UI以及运行Android Wear和Android Auto的随播设备进行控制。

Media controller

media controllers隔离您的UI。您的UI代码仅与  media controller,通信,而不是播放器本身。 media controller将传输控制动作转换为回调到 media session。每当会话状态改变时,它也会从  media session中接收回调。这提供了一种自动更新关联的UI的机制。  media controller一次只能连接到一个 media session
使用 media controllermedia session时,您可以在运行时部署不同的接口和播放器。您可以根据运行的设备的功能,独立地更改应用程序的外观和性能。


视频应用与音频应用


当播放视频时,你的眼睛和耳朵都在接收信息。播放音频时,你可以在听的同时使用其他应用程序。每个用例都有不同的设计。

视频应用

视频应用程序需要一个用于查看内容的窗口。因此,视频应用程序通常实现为单个Android活动。视频出现的屏幕是活动的一部分。

音频应用

音频播放器并不总是需要使其UI可见。一旦开始播放音频,播放器就可以作为后台任务运行。用户可以切换到另一个应用程序,并继续听。
要在Android中实现这一设计,您可以使用两个组件构建一个音频应用程序: activity(展示所用) 和播放器service。如果用户切换到另一个应用程序,则该service可以在后台运行。通过将音频应用程序的两个部分分解为单独的组件,每个组件可以独立运行。与播放器相比,UI通常是短暂的,可能会在没有UI的情况下运行很长时间。


支持库提供了两个类来实现此客户端/服务器方法:MediaBrowserService和MediaBrowser。该服务组件被实现为包含媒体会话及其播放器的MediaBrowserService的子类。使用UI和媒体控制器的活动应包括与MediaBrowserService进行通信的MediaBrowser。
使用MediaBrowserService可以让随身设备(如Android Auto and Wear)轻松发现您的应用,连接到它,浏览内容和控制播放,而无需访问您的Activity。


媒体应用和Android音频基础架构


一款好的设计的媒体应用程序应该与播放音频的其他应用程序一起正常运行。它应该可以分享手机内容,并与使用音频的设备上的其他应用程序配合使用。它还应该响应设备上的硬件控制。


所有这些行为都在“ 处理音频输出中的更改”中有所描述。


媒体兼容库

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

media sessions and media controllers的推荐实现是MediaSessionCompat和MediaControllerCompat,它们在media-compat支持库中定义。它们替代Android 5.0(API级别21)中引入的MediaSession和MediaController类的早期版本。 compat类提供相同的功能,但是您可以轻松地开发应用程序,因为您只需要写入一个API。通过将媒体会话方法转换为可用的较旧平台版本上的等效方法,该库负责向后兼容性。
如果您已经有一个正在使用较旧类的工作应用程序,我们建议您更新到compat类。当您使用compat版本时,可以删除对RegisterMediaButtonReceiver()的所有调用以及RemoteControlClient中的所有方法。


测量性能


在Android 8.0(API级别26)及更高版本中,getMetrics()方法适用于某些媒体类。它返回一个包含配置和性能信息的Bundle对象,表示为属性和值的映射。为这些媒体类定义了getMetrics()方法:
  • MediaPlayer.getMetrics()
  • MediaRecorder.getMetrics()
  • MediaCodec.getMetrics()
  • MediaExtractor.getMetrics()
Metrics  为每个实例分别收集指标,并在实例的生命周期中持续使用。如果没有 metrics 可用,则该方法返回null。返回的实际度量取决于具体的类。
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值