2011-05-23 48 views
2

当我运行使用Android的OpenSL ES API的应用程序时出现错误。当我运行该应用程序时,出现以下错误:尝试使用OpenSL ES录制音频时出错

05-23 16:18:19.355: ERROR/AudioHardwareALSA(84): ALSALib device/samsung/GT-I9000/alsa-lib/src/pcm/pcm.c:7244:(snd_pcm_recover) overrun occured. 

但是,我一直未能找到原因。也许这个调试信息与它有关?

05-23 16:18:19.339: DEBUG/dalvikvm(1409): JIT unchain all for threadid=11 

我怀疑第一个是由第二个引起的。但是,我该如何预防呢?我还在我的日志中看到了几个GC_EXPLICIT和GC_CONCURRENT调试消息。

无论如何,我使用OpenSL ES来录制和播放音频数据。数据通过Java层通过WiFi发送和/或接收。但为了流畅使用,我不希望GC来和干扰...有没有办法阻止虚拟机限制使用GC?


编辑

我发现了JIT unchain all for threadid=11不是问题。我已经在一个新的干净的手机上运行了该应用程序,并且该错误一开始并未显示,但DEBUG消息仍然显示。那么它对性能没有影响。然而,几天后,这个错误开始显现,我的音频数据中出现了一些小问题。

我试着增加分配给我的刻录机的缓冲区的数量,现在是4,但这并没有帮助。我查看了pcm.c的源代码,但这并不能帮助我进一步处理这个问题。有人有关于这个问题的想法吗?

回答

1

看来我有另一个问题运行导致这个问题。看起来我有另一个线程由于错误的代码子句而消耗很多周期。这导致线程跳过大部分代码并且什么都不做。随着线程忙于等待,音频被压制,我得到了上面提到的错误。

+0

对于迟到的回复感到抱歉,但请查看此视频以优化使用OpendSLES apis。 https://www.youtube.com/watch?v=d3kfEeMZ65c希望它可以帮助某人。 – Shrish 2015-01-18 17:09:02