오디오 지연 시간을 최소화하려면 Oboe를 사용하는 것이 좋습니다.
Oboe
Oboe는 네이티브 오디오를 사용하며, Android 8.1 이상의 경우 AAudio를 기반으로 하고 그 이전 Android의 경우 OpenSL ES를 기반으로 합니다. 기기의 지연 시간을 최소화하려면 setPerformanceMode(oboe::PerformanceMode::LowLatency)
및 setSharingMode(oboe::SharingMode::Exclusive)
를 설정하세요.
Oboe에 대한 자세한 내용은 시작 가이드, README.md
, 전체 가이드를 참고하세요. Oboe를 사용하는 샘플 앱에 관해서는 Soundboard 앱을 참고하세요.
참고: Java로 지연 시간에 민감한 출력 오디오 스트림을 생성하기 위해 AudioTrack을 사용하는 경우 PERFORMANCE_MODE_LOW_LATENCY
모드를 사용하세요.
구현 체크리스트
Android 네이티브 오디오를 사용하는 방법:
- Android NDK를 다운로드한 후 설치합니다.
- Oboe의 시작 가이드를 따릅니다.
-
Oboe 빌더에서
setPerformanceMode(oboe::PerformanceMode::LowLatency)
및setSharingMode(oboe::SharingMode::Exclusive)
를 호출합니다. -
android.media.AudioManager.getProperty(java.lang.String)에서 반환되는 권장 네이티브 버퍼 사이즈와 샘플링 레이트를 사용합니다.
참고: 입력에도 동일한 버퍼 사이즈와 샘플링 레이트를 사용해야 합니다.
- 콜백 핸들러를 짧게 유지하고, 과도한 CPU 사용이나 무제한 차단을 피합니다. 우선순위 역전을 피합니다.
- 비차단 알고리즘을 사용하여 입력 콜백 핸들러와 출력 콜백 핸들러, 그리고 콜백 핸들러와 애플리케이션의 나머지 간에 통신하는 방식을 고려합니다.
기타 자료
source.android.com
source.android.com 사이트는 주로 Android 기기를 구축 중인 OEM, 그리고 이러한 OEM을 대상으로 구성요소를 공급하는 SoC 공급업체를 위해 마련되었습니다.
하지만 이 사이트에는 지연 시간에 관한 유용한 정보가 많이 있으므로 검토해 보는 것이 좋습니다. 오디오 지연 시간의 문서를 참고하세요.
android-ndk
Android 네이티브 오디오 사용 방법에 관한 질문이 있는 경우 토론 그룹인 android-ndk에 문의할 수 있습니다.
Oboe 버그 신고
Oboe 사용 관련 문제가 있는 경우 버그를 신고할 수 있습니다.
동영상
- Oboe 시작하기
- 짧은 오디오 지연 시간 - 당신의 귀는 소중하니까요
- Android Dev Summit 2018.
- Android에서 성공하기 - Android 오디오 앱을 최적화하는 방법
- Android Developer Challenge 2018.
- Android의 고성능 오디오(Google I/O 2013)
- 동영상 전체가 지연 시간에 관한 내용을 담고 있습니다.
- Android에 최고의 멀티미디어 환경 구축(Google I/O 2014)
- 처음 14분 동안은 오디오에 관한 일반적인 내용과 특히 입력 지연 시간에 관한 내용을 다룹니다.
- 오디오 지연 시간: 버퍼 사이즈(100일 동안의 Google 개발자)
- 오디오 지연 시간, 버퍼 크기와 작업 스케줄링 간의 관계에 관해 설명합니다.