오디오

Android 오디오 HAL 아이콘

Android의 오디오 HAL(하드웨어 추상화 계층)은 android.media 의 상위 수준, 오디오별 프레임워크 API를 기본 오디오 드라이버 및 하드웨어에 연결합니다. 이 섹션에는 성능 향상을 위한 구현 지침과 팁이 포함되어 있습니다.

Android 오디오 아키텍처는 오디오 기능이 구현되는 방식을 정의하고 구현과 관련된 관련 소스 코드를 가리킵니다.

오디오 아키텍처

그림 1. Android 오디오 아키텍처

애플리케이션 프레임워크
애플리케이션 프레임워크에는 android.media API를 사용하여 오디오 하드웨어와 상호작용하는 앱 코드가 포함되어 있습니다. 내부적으로 이 코드는 해당 JNI 글루 클래스를 호출하여 오디오 하드웨어와 상호 작용하는 기본 코드에 액세스합니다.
JNI
android.media 와 연결된 JNI 코드는 오디오 하드웨어에 액세스하기 위해 하위 수준의 기본 코드를 호출합니다. JNI는 frameworks/base/core/jni/frameworks/base/media/jni 에 있습니다.
기본 프레임워크
기본 프레임워크는 android.media 패키지와 동일한 기본 기능을 제공하며, 바인더 IPC 프록시를 호출하여 미디어 서버의 오디오 관련 서비스에 액세스합니다. 기본 프레임워크 코드는 frameworks/av/media/libmedia 에 있습니다.
바인더 IPC
바인더 IPC 프록시는 프로세스 경계를 ​​통한 통신을 용이하게 합니다. 프록시는 frameworks/av/media/libmedia 에 있으며 문자 "I"로 시작합니다.
미디어 서버
미디어 서버에는 HAL 구현과 상호작용하는 실제 코드인 오디오 서비스가 포함되어 있습니다. 미디어 서버는 frameworks/av/services/audioflinger 에 있습니다.
HAL은 오디오 서비스가 호출하고 오디오 하드웨어가 올바르게 작동하기 위해 구현해야 하는 표준 인터페이스를 정의합니다. 자세한 내용은 해당 HAL 버전 디렉토리의 *.hal 파일에 있는 오디오 HAL 인터페이스 및 주석을 참조하십시오.
커널 드라이버
오디오 드라이버는 하드웨어 및 HAL 구현과 상호 작용합니다. ALSA(Advanced Linux Sound Architecture), OSS(Open Sound System) 또는 사용자 지정 드라이버(HAL은 드라이버에 구애받지 않음)를 사용할 수 있습니다.

참고 : ALSA를 사용하는 경우 호환되는 라이선스(표준 사용자 모드 라이브러리는 GPL 라이선스) 때문에 드라이버의 사용자 부분에 대해 external/tinyalsa 를 권장합니다.

Open SL ES 기반 Android 네이티브 오디오 (표시되지 않음)
이 API는 Android NDK 의 일부로 노출되며 android.media 와 동일한 아키텍처 수준에 있습니다.