앱 개발자를 위한 오디오 지연 시간

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

오디오 지연 시간을 최소화하려면 OpenSL ES 1.0.1 기반의 Android 네이티브 오디오를 사용하는 것이 좋습니다.

구현 체크리스트

Android 네이티브 오디오를 사용하는 방법:

  1. Android NDK를 다운로드하여 설치합니다. 문서의 나머지 부분에서는 NDKroot가 NDK를 설치한 디렉터리라고 가정합니다.
  2. 지원 문서를 참고합니다.
  3. API 수준 9 이상인지 확인합니다.
  4. android.hardware.audio.low_latency 기능을 확인합니다.
  5. android.media.AudioManager.getProperty(java.lang.String)에서 반환되는 권장 네이티브 버퍼 크기와 샘플링 레이트를 사용합니다.

    참고: 입력에도 동일한 버퍼 크기와 샘플링 레이트를 사용해야 합니다.

  6. 일반적으로는 OpenSL ES 버퍼 수 1개로도 충분합니다.
  7. 콜백 핸들러를 짧게 유지하고, 과도한 CPU 사용이나 무제한 차단을 피합니다. 우선순위 역전을 피합니다.
  8. 비차단 알고리즘을 사용하여 입력 콜백 핸들러와 출력 콜백 핸들러, 그리고 콜백 핸들러와 애플리케이션의 나머지 간에 통신하는 방식을 고려합니다.

지원 문서

OpenSL ES 1.0.1

PDF 뷰어를 사용하여 OpenSL 1.0.1 사양을 검토하세요. 이는 다소 긴 참조 자료이며, 일부는 개발자와 관련이 없습니다. 하지만 API에 관한 세부정보를 확인하려면 사양을 참고해야 합니다.

참고: 이 문서는 전체 OpenSL ES 1.0.1을 설명하지만 사실 Android 네이티브 오디오는 Android 관련 확장 프로그램을 포함하는 OpenSL ES 1.0.1의 하위 집합에 기반합니다.

OpenSL ES의 최신 버전을 설명하는 1.1 등의 문서는 Android와 관련이 없습니다.

Android용 OpenSL ES

'Android용 OpenSL ES' 문서는 NDK 설치 시 제공되며, 현재는 온라인에서 제공되지 않습니다. 브라우저에서 이 링크를 엽니다.

NDKroot/docs/Additional_library_docs/opensles/index.html

문서 전체를 살펴보는 것이 좋지만 '프로그램 참고사항' 섹션의 하위 섹션인 '성능'을 특히 주의 깊게 살펴보세요.

'OpenSL ES 1.0.1에서 지원되는 기능' 섹션에서는 Android에 의해 지원되는 하위 집합에 대해 설명합니다.

'Android 확장 프로그램' 섹션에서는 기본 OpenSL ES 1.0.1에 포함되지 않는 Android 관련 확장 프로그램에 대해 설명합니다.

OpenSL ES 1.0.1과의 관계

아래의 벤다이어그램은 Android 네이티브 오디오와 OpenSL ES 1.0.1의 관계를 보여줍니다.

벤다이어그램

그림 1. 벤다이어그램

기타 자료

source.android.com

source.android.com 사이트는 주로 Android 기기를 구축 중인 OEM, 그리고 이러한 OEM을 대상으로 구성요소를 공급하는 SoC 공급업체를 위해 마련되었습니다.

하지만 이 사이트에는 지연 시간에 관한 유용한 정보가 많이 있으므로 검토해 보는 것이 좋습니다. 오디오 지연 시간의 문서를 참고하세요.

android-ndk

Android 네이티브 오디오 사용 방법에 관한 질문이 있는 경우 토론 그룹인 android-ndk에 문의할 수 있습니다.

동영상

Android의 고성능 오디오(Google I/O 2013)
동영상 전체가 지연 시간에 관한 내용을 담고 있습니다.
Android에 최고의 멀티미디어 환경 구축(Google I/O 2014)
처음 14분 동안은 오디오에 관한 일반적인 내용과 특히 입력 지연 시간에 관한 내용을 다룹니다.
오디오 지연 시간: 버퍼 크기(100일 동안의 Google 개발자)
오디오 지연 시간, 버퍼 크기와 작업 스케줄링 간의 관계에 관해 설명합니다.