智能手机音频系统(三 媒体播放后台)

为了方便管理音频资源和降低应用对音频控制的复杂性,使用媒体播放后台
来管理对声音的播放和音频资源的访问。媒体播放后台要求具有以下的功能:

1. 基于优先级的抢占、恢复处理。
2. 支持多个应用的同时对音频资源的访问,以及混合、交替式的播放。
3. 支持对发音设备的控制。
4. 具有消息上报机制。播放结束、播放停止、播放暂停、当前位置等。
5. 应用可以主动查询当前的状态。

   媒体播放后台由播放对象管理器、播放服务接口两部份组成。播放对象对应于不同的播放需求,
其包含了当前播放请求的优先级、回复处理机制、设备要求等信息。播放服务接口是基于媒体播放库
实现,为播放对象提供播放功能的。分离了媒体播放后台同实际播放库的联系。

   媒体播放后台采用了DBUS服务的方式为应用提供播放接口。应用通过DBUS接口向媒体播放后台
申请自己的播放对象。在播放请求时若其优先级低于当前的播放对象,则会播放失败。反之,则会抢占

当前的播放对象,并在自己结束后恢复其抢占的播放对象。采用了播放对象链表的方式,实现了此
功能。每一个播放对象都会有一个指向其抢占的播放对象的指针,为恢复做准备。

   只有同优先级的播放对象,才允许混合和交替的播放方式。这里一个比较复杂的例子就是
多路通话时,要求每路通话都有独立的通话背景音和通话录音。在这里每一路通话都会为自己分别
创建一个背景音播放对象,和录音对象。在切换通路时,播放对象也会跟着切换,并保持原有的到
暂停状态。

  耳机和蓝牙耳机的链接监控也是在媒体播放后台里实现的。耳机通过监控IO实现,蓝牙耳机通过
BLUEZ-AUIDO DBUS上报信号实现。每次有设备更新,或者播放对象更新时,都需要重新查询
当前播放对象的设备要求情况和当前设备情况来配置、更新设备状态。
 
  媒体播放后态的消息继承了GObject的信号机制实现。其步骤如下:
 应用程序向播放器API注册回调函数。
 播放器API向DbusProxy注册回调函数。
 当有事件发生时:
 播放器后台把事件上报给客户端的DbusProxy。
 DbusProxy把事件上报给播放器API。
 播放器API把事件上报给应用程序


    一些和媒体播放后台打交道的应用都是通过媒体播放客户端来实现的。



你可能感兴趣的:(api,IO,手机)