我正在编写一个通过 OpenSL ES 使用缓冲区队列音频播放器的 Android 应用程序。我的应用程序在最近的设备上运行良好,但我在使用 HTC Wildfire S 时遇到了问题。
特别是,调用 slCreateEngine 函数会产生 SL_RESULT_RESOURCE_ERROR。文档中没有太多关于此错误的信息。
在调用 slCreateEngine 之前,我还在 LogCat 中看到了这些错误:
- 无法打开 MM_PARSER_LIB,dlerror = 无法加载库:load_library[1105]:未找到库“libmmparser.so”
- 无法打开 MM_PARSER_LITE_LIB,dlerror = 无法加载库:load_library[1105]:找不到库“libmmparser_lite.so”
我有一些理论:
- 设备内存受限,无法实例化引擎对象
- 该设备不支持 OpenSL ES 音频接口(此线程表明并非所有设备都支持它: https ://groups.google.com/forum/#!topic/android-ndk/Px-7NvaLmjo )
HTC Wildfire S 的规格如下:
- Android 2.3.4(据我所知,通过运营商更新)
- 高通 MSM7227(ARMv6 处理器)
- 512MB 内存
我知道从 Gingerbread 开始支持 Open SL ES,但这并不意味着所有设备都具有此功能。由于此应用程序的其他要求,我必须使用 NDK 进行音频处理和播放,不能使用 Media Player 或 AudioTrack。
问题:
- 有谁知道什么可能导致此设备上报告的错误?
- 有没有办法确定哪些设备与 OpenSL ES 兼容?
- ARMv6 设备是否必然与 OpenSL ES 不兼容?
编辑 查看我对 HerrLip 的评论
- NDK 文件夹中的 NativeAudio 示例在此设备上运行,并且 slCreateEngine 成功执行。这消除了我对该设备和其他 ARMv6 设备不受支持的怀疑。
- 在 NativeAudio 示例中仍然无法加载 libmmparser.so 和 libmmparser_lite.so 库,但这似乎不是问题,因为它可以在设备上运行。
- 我的应用程序比 NativeAudio 示例要多得多。也许内存限制会阻止 slCreateEngine 函数调用获取所需的资源。