我尝试在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‘传入此函数。所有结果都返回error -2,这意味着没有这样的文件。
我有两个问题。是否有可能将一些字符串传入此函数以正确处理音频设备?一般来说,使用此功能直接从jni与音频设备交互是真的吗?
谢谢大家!
发布于 2013-10-20 22:05:22
我不认为Android支持ALSA。ALSA api不适用于原生Android代码(NDK)
对于Android,你应该使用"opensles“模块,它提供了一个本机接口的音频驱动程序。
Baresip支持多个音频驱动程序,例如Linux的"alsa“模块或Android NDK的"opensles”。有关opensles模块的详细信息,请参阅此处:
http://www.creytiv.com/doxygen/baresip-dox/html/opensles_8c.html
发布于 2013-10-21 04:50:14
在Android中,你只能在有根的设备上使用ALSA。
如果要在常用设备上播放本机代码中的音频,您至少有两个选择:
OpenSL ES (这需要安卓版本的2.3+)OpenAL实现,它使用JNI来调用Java AudioTrack:https://github.com/AerialX/openal-soft-android (这将适用于安卓版本的2.1+)<代码>G29
我建议仅当您有现有代码时才使用OpenAL,这些代码需要移植到安卓,或者出于某种原因,您必须支持安卓2.1版。在其他情况下,OpenSL ES是正确的选择。
https://stackoverflow.com/questions/19445832
复制相似问题