![](/img/trans.png)
[英]AudioUnit inputCallback with AudioUnitRender -> mismatch between audioBufferList.mBuffers[0].mDataByteSize != inNumberFrames
[英]What causes ExtAudioFileRead to make ioData->mBuffers[0].mDataByteSize negative?
當我經常停止並開始音頻播放,並通過ExtAudioFileRef
對象在AAC音頻文件中來回查找很多內容時,就會出現問題。 在少數情況下, ExtAudioFileRead
會顯示這種奇怪的行為:
有時,它們將這些數字分配給mDataByteSize
的唯一AudioBuffer
的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);
輸出:
s=0 d=0x16668bd0 d.nb=1, d.b.d=0x30de000, d.b.dbs=1024, d.b.nc=2 // good (usual)
s=0 d=0x16668bd0 d.nb=1, d.b.d=0x30de000, d.b.dbs=-51240960, d.b.nc=2 // misbehaving
該問題發生在iOS 7的iPhone 4S上。我無法在模擬器中重現該問題。
當從兩個不同的線程/隊列中為同一個ExtAudioFileRef
同時調用ExtAudioFileRead()
和ExtAudioFileSeek()
時,會發生此問題。
read函數直接從AURenderCallback
,因此它是在AudioUnit的實時線程上執行的,而查找是在我自己的串行隊列上完成的。
我已經修改了渲染回調的代碼,也將dispatch_sync()分配到與查找相關的序列隊列。 那解決了問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.