오디오

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 인터페이스는 hardware/libhardware/include/hardware에 있습니다. 자세한 내용은 audio.h를 참조하세요.
커널 드라이버
오디오 드라이버는 하드웨어 및 HAL 구현과 상호작용합니다. ALSA(Advanced Linux Sound Architecture), OSS(Open Sound System) 또는 맞춤 드라이버를 사용할 수 있습니다(HAL은 드라이버에 구속받지 않음).

참고: ALSA를 사용하는 경우 드라이버의 사용자 부분에 호환 가능한 라이선스가 있는 external/tinyalsa를 권장합니다(일반 사용자 모드 라이브러리는 GPL 라이선스임).

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