Поддерживает ли OpenSL ES PerformanceMode::LowLatency?
Когда я создаю свое приложение на Pixel 2 (Oreo 8.0), я получаю PerformanceMode:: LowLatency:
2019-06-30 15:04:15,560 8506-8506/? D/AUDIO-APP: HearSightEngine - Stream PlayStream имеет низкую задержку
2019-06-30 15:04:15,572 8506-8506/? D/AUDIO-APP: HearSightEngine - потоковая запись с низкой задержкой
Когда я создаю свое приложение на приложении Samsung S7 (Nougat 7.0), я не получаю его:
2019-06-30 14:49:30,874 20025-20025/? W/AUDIO-APP: HearSightEngine - Stream PlayStream НЕ имеет низкой задержки. Проверьте ваш запрошенный формат, частоту дискретизации и количество каналов
2019-06-30 14:49:30,896 20025-20025/? W/AUDIO-APP: HearSightEngine - потоковая запись НЕ имеет низкой задержки. Проверьте ваш запрошенный формат, частоту дискретизации и количество каналов
Два существенных различия
- AAudio используется в первом случае, а OpenSL ES используется во втором.
- Пиксель 2 используется в первом случае, Samsung S7 - во втором.
Поддерживает ли OpenSL ES PerformanceMode::LowLatency? Или Samsung S7 его не поддерживает? Или что-то другое? Я прочитал FAQ [1] и там упоминалось AudioAttributes.FLAG_LOW_LATENCY для API < 26, может ли что-то подобное мне помочь?
1 ответ
Только с нуга 7.1 и выше. На предыдущих версиях Android запрос режима производительности вернется PerformanceMode::None
, Вот код
Не существует программного способа узнать, есть ли у вас поток с низкой задержкой на Android 7.0 и ниже. Вы можете проверить это вручную, используя adb shell dumpsys media.audio_flinger
и ищет F
(для быстрой дорожки) рядом с потоком вашего приложения.
Вы можете максимально увеличить свой шанс получения потока с низкой задержкой, следуя приведенным здесь инструкциям.