【发布时间】:2014-08-06 23:58:02
【问题描述】:
我有一个在 Android 中使用 openSLES 的本机录音机。记录器可以工作,但是当调用 stop 方法时,它似乎继续写入缓冲区,因为我继续获取日志:
...
08-07 01:36:43.229: V/AudioRecord(6194): Overrun user: 61400, server: 61c00, flags 0001
08-07 01:36:43.239: V/AudioRecord(6194): Overrun user: 61400, server: 61c00, flags 0001
08-07 01:36:43.249: V/AudioRecord(6194): Overrun user: 61400, server: 61c00, flags 0001
...
我是用线程锁的方式来记录缓冲区的,但是为什么在停止记录器后得到这些日志如下:
typedef struct opensl_stream {
...
SLObjectItf recorderObject;
SLRecordItf recorderRecord;
SLAndroidSimpleBufferQueueItf recorderBufferQueue;
...
} OPENSL_STREAM;
OPENSL_STREAM *p;
//starting recorder
...
//stopping recorder
if (p->recorderObject != NULL) {
(*p->recorderObject)->Destroy(p->recorderObject);
p->recorderObject = NULL;
p->recorderRecord = NULL;
p->recorderBufferQueue = NULL;
}
在尝试停止上述记录器后,我仍然得到AudioRecord(6194): Overrun user 日志,这意味着缓冲区已读取但未使用。如何正确停止录制?
【问题讨论】:
标签: android android-ndk audiorecord opensl