Android Audio 1:Android Audio概述

来源:互联网 发布:社交媒体数据分析 编辑:程序博客网 时间:2024/06/07 15:29

注:本系列开始的一些文章主要是以翻译Google官方的文档为主。

1. Android Audio

Android的音频HAL(硬件抽象层)连接着更上层的, 在android.media包中的音频专属的API和更下层的驱动与硬件,粗略的分,可以将HAL分为一层,用户空间和内核空间分一层。
这里写图片描述

本系列主要讲述Audio的实现以及提高性能的一些tips.

2. Audio架构及代码分布

Android audio架构定义了audio是如何实现的,同时也指明这个实现涉及到的相关代码。

Android audio架构图:
这里写图片描述

下面简单介绍一下这个架构图:

  • Application framework
    这部分包括App的代码,App使用android.media中的API来和audio硬件交互。在内部,App是通过JNI调用对应的native代码。

  • JNI
    Framework的api需要通过JNI调用到更下层的实现。是一个中介的作用。JNI的代码位于:frameworks/base/core/jni 和 frameworks/base/media/jni.

  • Native framework
    它提供和Framework相对应的本地实现,通过调用Binder代理和media server交互。代码位于:frameworks/av/media/libmedia

  • Binder IPC
    通过Binder跨进程和media server交互。Binder Proxy一般是以I开头的文件。代码位于:frameworks/av/media/libmedia

  • Media server
    包括AudioFlinger和AudioPolicy, 它们是真正直接和HAL打交道的服务,代码位于:frameworks/av/services/audioflinger
    frameworks/av/services/audiopolicy

  • HAL
    HAL定义了标准的接口,必须实现这些接口才能让Audio正常工作起来。接口定义文件:
    hardware/libhardware/include/hardware/audio.h

  • Kernel driver
    Driver连接着HAL和硬件,厂商可以使用ALSA, OSS或者自定义的driver。

  • Android native audio based on Open SL ES
    这部分在结构图中没有展示出来,这部分API是Android NDK的一部分,它的结构位置和android.media相同。

0 0