0

我正在编写一个通过 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。

问题:

  1. 有谁知道什么可能导致此设备上报告的错误?
  2. 有没有办法确定哪些设备与 OpenSL ES 兼容?
  3. ARMv6 设备是否必然与 OpenSL ES 不兼容?

编辑 查看我对 HerrLip 的评论

  • NDK 文件夹中的 NativeAudio 示例在此设备上运行,并且 slCreateEngine 成功执行。这消除了我对该设备和其他 ARMv6 设备不受支持的怀疑。
  • 在 NativeAudio 示例中仍然无法加载 libmmparser.so 和 libmmparser_lite.so 库,但这似乎不是问题,因为它可以在设备上运行。
  • 我的应用程序比 NativeAudio 示例要多得多。也许内存限制会阻止 slCreateEngine 函数调用获取所需的资源。
4

1 回答 1

0
  1. 根据文档,该错误代码的意思是“由于缺乏资源而导致操作失败(通常是对象实现的结果)。” 所以,我假设你对约束是正确的。

  2. 你可以试试别人的应用程序,看看会发生什么。(尝试https://code.google.com/p/high-performance-audio/source/browse/audio-buffer-size

  3. 我不知道

于 2013-10-02T06:16:35.050 回答