我正在使用 AVAssetReader 从 iPod 库中读取音频。(见这里)然后我获取读取缓冲区并通过 AudioUnit 播放它。我正在尝试在播放时折射代码以在音频中流式传输。但是,如果 AVAssetReader 正在运行,AudioUnit 将停止接收对其 kAudioUnitProperty_SetRenderCallback 的调用。
我已将代码简化为仅在 AudioUnits 回调中播放文件...
OSStatus UnitRenderCB(void* pRefCon, AudioUnitRenderActionFlags* flags, const AudioTimeStamp* timeStamp, UInt32 busNum, UInt32 numFrames, AudioBufferList* pData){
OSStatus tErr = noErr;
MySoundStream* pS = (MySoundStream*)pRefCon;
ExtAudioFileRead(pS->InRef, &numFrames, pData); // Here's the MP3/WAV/etc Data loaded...
if (numFrames <= 0){ // EOF?
ExtAudioFileSeek(pS->InRef, 0);
return 1;
}
return tErr;
}
然后我调用此代码并且 AudioUnit 停止播放,不再调用 UnitRenderCB。
NSError* error = nil;
AVAssetReader* reader = [[AVAssetReader alloc] initWithAsset:songURL error:&error];
{
AVAssetReaderTrackOutput* output = [[AVAssetReaderTrackOutput alloc] initWithTrack:songTrack outputSettings:outputSettingsDict];
[reader addOutput:output];
[output release];
}
[reader startReading];
[reader cancelReading];
[reader release];
我正在使用与此处列出的相同的 AudioUnit 设置
AVAssetReader 是否使用 AudioUnit 系统?有没有办法让它们一起工作?