zoukankan      html  css  js  c++  java
  • Android底层开发之Audio HAL Android Audio Overview

    http://blog.csdn.net/kangear/article/details/44939429

    Android底层开发之Audio HAL

    Android音频底层调试-基于tinyalsa中以「抛开Android的天生复杂,回归嵌入式Linux的本质」的方式介绍如何调试Linux内核中的音频驱动。
    这里向上再伸展一下进入HAL层,看是如何将tinyalsa封装给Frameworks使用的。

    基于4.2.2版本源码进行讨论。Android官方教程是Audio Implementing the HAL.

    一个完整的Android音频系统架构如图所示:

    Android Audio Overview

    http://blog.csdn.net/tjy1985/article/details/9942637

    音乐播放器是手机中重要的娱乐应用,我们在开发播放器有可能用到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流,指向安排好的输出设备去输出

  • 相关阅读:
    分页插件PageHelper
    持久层的具体实现
    SSM框架搭建
    mysql库中建立存储过程
    安装python2.7
    Spark应用程序第三方jar文件依赖解决方案
    spark2.0.1源码编译
    Hadoop2.7.3源码编译
    Hadoop2.x伪分布式环境搭建(一)
    Linux基础环境的各项配置(三)
  • 原文地址:https://www.cnblogs.com/pengxinglove/p/5469559.html
Copyright © 2011-2022 走看看