【发布时间】:2013-11-25 13:30:14
【问题描述】:
我正在启动一个简单的音频记录实例,并以 44.1kHz 的频率从缓冲区(minbufsize 的 10 倍)读取,平均为 441Hz,这对于 48 小时的录音来说很好。
在 48 小时后的某个随机时间,recoredr 停止(而不是崩溃)并显示消息
E/AudioFlinger(128): TrackBase::getBuffer 缓冲区超出范围: E/AudioFlinger(128):开始:0x42242844,结束0x42256044,mBuffer 0x4224c044 mBufferEnd 0x42256044 E/AudioFlinger(128):服务器-3072,服务器基础16384,用户-4096,用户基础-4096 W/AudioFlinger(128):RecordThread:缓冲区溢出
我认为操作系统可能正在检查某些内容并且缓冲区溢出,但是当我将循环放在较小的缓冲区中以尝试使其失败时,我得到的只是警告
W/AudioFlinger(128):RecordThread:缓冲区溢出
应用程序按预期运行。
48 小时后我看不到问题出在哪里,我不能强迫问题在更短的时间范围内重复,以便我可以调试。帮忙!
【问题讨论】:
-
可能有一个或多个内部使用的 32 位计数器在未正确处理的情况下回绕。
-
嗨,迈克尔。谢谢 - 它确实看起来像这样。 2^32= 4.29497e+09 并且在长计数器达到 4.2949397E7 后程序失败。每次这个长计数器增加 1 时,就有一个 100 循环,但没有使用计数器...
-
但我每次都在创建一个简短的 [100]。这可能是内存泄漏吗?
-
迈克尔,谢谢,你是对的。录音机必须有一个内部 32 位计数器。它不在我的代码中,但通过偶尔关闭和重新打开 Audiorecorder 来解决。
标签: android buffer-overflow audiorecord