Android Audio System.doc.doc


文档分类:资格/认证考试 | 页数:约8页 举报非法文档有奖
1/8
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/8
文档列表 文档介绍
Android 音频系统 1. 系统架构 Android 的音频系统拥有一个比较标准和健全的架构, 从上层应用, java framework 服务 AudioMananger , 本地服务 AudioFlinger , 抽象层 AlsaHAL , 本地库, 再调用 external 的 tinyalsa 外部支持库,最后到底层驱动的 codec 。 Jav a服务 AudioManage r 作为服务端, 本地服务 AudioFlinge r 作为客户端, 两者通过 Binde r 机制交互。 AudioFlinger 对硬件功能的具体实现交给硬件抽象层 AlsaHAL 完成。抽象层可以调用本地标准接口,或者直接调用 Tinyalsa 库去操作底层驱动。详细调用过程如下图: 简单说来,轨迹如下: Java 端发起调用, MediaPlayer 会转至 MediaPlayerService , 然后会调用相应的解码工具解码后创建 AudioTrack , 所有待输出的 AudioTrack 在 AudioFlinger::AudioMixer 里合成, 然后通过 AudioHAL(AudioHardwareInterface 的实际实现者) 传至实际的硬件来实现播放。2. AudioFlinger AudioFlinger 是 android 中的一个 service ,在 android 启动时就已经被加载。 AudioFlinge r 向下访问 AudioHardware , 实现输出音频数据, 控制音频参数。同时, AudioFlinger 向上通过 IAudioFinger 接口提供服务。所以, AudioFlinger 在 Android 的音频系统框架中起着承上启下的作用,地位相当重要。 AudioFlinger 的类结构下面的图示描述了 AudioFlinger 类的内部结构和关系: ? IAudioFlinger 接口这是 AudioFlinger 向外提供服务的接口,例如 openOutput , openInput , createTrack , openRecord 等等,应用程序或者其他 service 通过 ServiceManager 可以获得该接口。该接口通过继承 BnAudioFlinger 得到。? ThreadBase 在 AudioFlinger 中, Android 为每一个放音/ 录音设备均创建一个处理线程, 负责音频数据的 I/O 和合成, ThreadBase 是这些线程的基类, 所有的播放和录音线程都派生自 ThreadBase ? TrackBase 应用程序每创建一个音轨( AudioTrack/AudioRecord ),在 AudioFlinger 中都会创建一个对应的 Track 实例, TrackBase 就是这些 Track 的基类,他的派生类有: PlaybackTread::Track // 用于普通播放,对应于应用层的 AudioTrack PlaybackThread::OutputTrack // 用于多重设备输出,当蓝牙播放开启时使用 RecordThread::RecordTrack // 用于录音,对应于应用层的 AudioRecord ?播放默认的播放线程是 MixerT

Android Audio System.doc 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数8
  • 收藏数0 收藏
  • 顶次数0
  • 上传人yinjiong623147
  • 文件大小0 KB
  • 时间2016-03-09
最近更新