Android alsa snd_pcm_open default no such file o 目录

标签 android c android-ndk alsa baresip

我尝试为 Android 实现 baresip,它使用自定义 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 与音频设备交互是真的吗?

谢谢大家!

最佳答案

您只能在获得 root 权限的设备上使用 Android 中的 ALSA。

如果您想在原装设备上通过 native 代码播放音频,您至少有两种选择:

  1. 使用官方稳定的API:OpenSL ES(这需要Android 2.3+版本)
  2. Android 有一个原生的 OpenAL 实现,它使用 JNI 调用 Java AudioTrack:https://github.com/AerialX/openal-soft-android (这适用于 Android 2.1+ 版本)

我建议仅当您拥有需要移植到 Android 的现有代码,或者出于某种原因必须支持 Android 2.1 版时才使用 OpenAL。在其他情况下,OpenSL ES 是正确的选择。

关于Android alsa snd_pcm_open default no such file o 目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19445832/

相关文章:

android - fragment 生命周期 Android

android - 同一列表的多个实例的 DiffUtil

c - 遍历数组元素会在数组计数器的最后一个值上产生奇怪的值

c - 服务器未通过 GTK+ 中的客户端 GUI 接收到文本消息

c++ - 发布版本中运行时间过长(调试版本正常)

java - Android 应用程序在调试中工作但不在发布中

java - 从 SDK 21 迁移到 SDK 28

Android Studio 构建 NDK 项目非零退出值失败

android - SIGBUS 仅在三星 Galaxy S2 上崩溃

android - 如何用NDK工具编译带源代码的库?