Android alsa snd_pcm_open по умолчанию нет такого файла или каталога
Я пытаюсь реализовать Baresip для Android, он использует кастом alsa
модуль для управления аудио устройствами.
Этот модуль использует этот код для открытого обработчика устройства:
err = snd_pcm_open(&st->write, device, SND_PCM_STREAM_PLAYBACK, 0);
Я попытался передать 'default', 'plug:hw:0,0', 'hw:0,0', 'hw:00,0' в эту функцию. Все результаты возвращают ошибку -2, что означает отсутствие такого файла.
У меня два вопроса. Есть ли возможность передать некоторую строку в эту функцию для правильной обработки аудио устройства? И вообще, реально ли взаимодействовать со звуковыми устройствами напрямую из jni, используя эту функцию?
Спасибо всем!
2 ответа
Вы можете использовать ALSA в Android только на рутованных устройствах.
Если вы хотите воспроизводить аудио из собственного кода на стандартном устройстве, у вас есть как минимум два варианта:
- Используйте официальный стабильный API:
OpenSL ES
(для этого требуется версия Android 2.3+) - Есть родной
OpenAL
реализация для Android, которая использует JNI для вызова JavaAudioTrack
: https://github.com/AerialX/openal-soft-android (это будет работать на Android версии 2.1+)
Я бы порекомендовал использовать OpenAL
только если у вас есть существующий код, который необходимо перенести на Android, или, по какой-то причине, вы должны поддерживать Android версии 2.1. В других случаях OpenSL ES
это правильный выбор.
Я не думаю, что ALSA поддерживается Android. API ALSA недоступен для нативного кода Android (NDK)
для Android следует использовать модуль "opensles", который предоставляет Audio-драйвер для нативного интерфейса.
Baresip поддерживает несколько аудио-драйверов, например, модуль "alsa" для Linux или "opensles" для Android NDK. Пожалуйста, смотрите здесь для получения подробной информации о модуле opensles:
http://www.creytiv.com/doxygen/baresip-dox/html/opensles_8c.html