Android Audio Overview

http://blog.csdn.net/u010025003/article/details/52725919

 

音乐播放器是手机中重要的娱乐应用,我们在开发播放器有可能用到mediaplayer,或者AudioTrack来播放音频文件,对应应用开发者来说,我们只要了解了暴露出来的API就可以了,但是光了解API还是不能全面的理解设计者的理念和思路,无法清楚音频如何选择什么的设备进行输出。下面我们本着探讨的目的来了解下audio的架构,完善我们对audio的了解。

首先看下整个audio的框架结构。

 

从上图我们可以大概了解了audio的整个架构,各个部分分工明确,下面我们来具体看下他们的具体作用。

Java API 

Mediaplayer , Audiotrack, AudioService, AudioManager

Mediaplayer 和AudioTrack是我们播放音频时供应用选择的接口,这两者有什么区别呢?mediaplayer运用比较广泛了,它可以把未解码的媒体文件进行解码,然后交给设备去输出,而AudioTrack的功能就比较单一了,它只能播放PCM流的文件(即解码后的文件)。

AudioService监听来自HDMI, FM等应用的intent,通知audiosystem,它其实也监控者音量,实现音量在UI上的同步。

AudioManger给上层提供了访问音量的接口,并控制ringer  mode。

AudioSystem 相当于AudioManager 和AudioService的内部类,只供他俩调,设置phone的状态。

 

User space C++

Multimedia framework – StageFright/AwesomePlayer

1)       player的选择,媒体文件的解析

2)       选择解码器,跟OpenMAX IL打交道,解码

 

AudioFlinger

1)       管理者整个audio的输入输出设备

2)       把多个audiostream整合成一个PCM audio流,指向安排好的输出设备去输出

 

class AudioFlinger : public BinderService<AudioFlinger>, public BnAudioFlinger

 

    // server side of the client's IAudioTrack
    class TrackHandle : public android::BnAudioTrack {

 

    // server side of the client's IAudioRecord
    class RecordHandle : public android::BnAudioRecord {

 

audiosink(AudioOutput)--》AudioTrack--》AudioFlinger::TrackHandle(sp<IAudioTrack> track = audioFlinger->createTrack)--》

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值