是什么导致ExtAudioFileRead使ioData-> mBuffers [0] .mDataByteSize为负?

时间:2014-01-02 17:52:11

标签: ios objective-c aac audiobufferlist extaudiofileread

当我经常停止并开始音频播放并通过ExtAudioFileRef对象在AAC音频文件中来回寻找大量问题时,会出现问题。在少数情况下,ExtAudioFileRead显示这种奇怪的行为:

有时会将这些数字分配给mDataByteSize的唯一AudioBuffer的{​​{1}}:

AudioBufferList

以十六进制表示,这些数字的格式为-51604480 -51227648 -51350528 -51440640 -51240960

代码:

0xFC....00

输出:

status = ExtAudioFileRead(_file, &numberFramesRead, ioData);

printf("s=%li d=%p d.nb=%li, d.b.d=%p, d.b.dbs=%li, d.b.nc=%li\n", status, ioData, ioData->mNumberBuffers, ioData->mBuffers[0].mData, ioData->mBuffers[0].mDataByteSize, ioData->mBuffers[0].mNumberChannels);

问题出现在iOS 7上的iPhone 4S上。我无法在模拟器中重现该问题。

1 个答案:

答案 0 :(得分:0)

当从两个不同的线程/队列同时为ExtAudioFileRead()调用ExtAudioFileSeek()ExtAudioFileRef时,会出现问题。

read函数是直接从AURenderCallback调用的,所以它是在AudioUnit的实时线程上执行的,而搜索是在我自己的串行队列上完成的。

我已经将render回调的代码修改为dispatch_sync()到调度seek被调度到的同一个串行队列。这解决了这个问题。