2011-05-23 152 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