Android의 오디오 하드웨어 추상화 계층(HAL)은 android.media에 있는 상위 수준의 오디오별 프레임워크 API를 기본 오디오 드라이버 및 하드웨어에 연결합니다. 이 섹션에는 구현 안내와 성능 향상에 관한 팁이 포함되어 있습니다.
Android 오디오 아키텍처는 오디오 기능이 구현되는 방식을 정의하고 구현에 관여하는 관련성이 높은 소스 코드를 나타냅니다.
- 애플리케이션 프레임워크
- 애플리케이션 프레임워크에는 android.media API를 사용하여 오디오 하드웨어와 상호작용하는 앱 코드가 포함되어 있습니다. 내부적으로 이 코드는 상응하는 JNI glue 클래스를 호출하여 오디오 하드웨어와 상호작용하는 네이티브 코드에 액세스합니다.
- 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
파일에 있는 주석을 참고하세요. - 커널 드라이버
-
오디오 드라이버는 하드웨어 및 HAL 구현과 상호작용합니다. ALSA(Advanced Linux Sound Architecture), OSS(Open Sound System) 또는 맞춤 드라이버를 사용할 수 있습니다(HAL은 드라이버에 구속받지 않음).
참고: ALSA를 사용하는 경우 드라이버의 사용자 부분에 호환 가능한 라이선스가 있는
external/tinyalsa
를 권장합니다(일반 사용자 모드 라이브러리는 GPL 라이선스임). - OpenSL ES 기반의 Android 네이티브 오디오(표시되지 않음)
- 이 API는 Android NDK의 일부로 노출되며 android.media와 아키텍처 수준이 동일합니다.