我正在启动一个简单的audiorecord实例,并从44.1kHz的缓冲区读取(10次minbufsize),平均为441 Hz,这对于48小时的录制来说是好的。
48小时后的一些随机时间,记录器停止(而不是崩溃)消息
E / AudioFlinger(128):TrackBase :: getBuffer缓冲区超出范围: E / AudioFlinger(128):start:0x42242844,end 0x42256044,mBuffer 0x4224c044 mBufferEnd 0x42256044 E / AudioFlinger(128):server -3072,serverBase 16384,user -4096,userBase -4096 W / AudioFlinger(128):RecordThread:缓冲区溢出
我认为操作系统可能正在检查某些内容并且缓冲区溢出,但是当我将循环放在较小的缓冲区中以尝试使其失败时,我得到的只是警告
W / AudioFlinger(128):RecordThread:缓冲区溢出
并且应用程序按预期继续进行。
48小时后我看不出有什么问题,我不能强迫问题在更短的时间内重复,所以我可以调试。帮助!
答案 0 :(得分:0)
很棒的问题和评论。我将audioplayer 24h / 7d作为前台服务运行,但两天后停止工作。 Mediaplayer没有抛出userlevel异常,没有触发onError,player.isRunning()返回true。这是adb logcat显示 AudioFlinger TrackBase :: getBuffer缓冲区超出范围,它给了我谷歌关键字。
我的解决方案是运行预定的看门狗10秒间隔工作人员任务。任务读取player.getCurrentPosition()毫秒,然后
这种简单的业务逻辑具有魔力。我的设备是华为智能手机Android 2.3.6