我正在使用AVAssetReader從iPod庫中讀取音頻。 (see here)然後我讀取緩衝區並通過AudioUnit播放。我正在嘗試摺疊代碼以在播放音頻時在音頻中進行流式傳輸。但是,如果AVAssetReader正在運行,AudioUnit會停止接收對其kAudioUnitProperty_SetRenderCallback的調用。正在啓動AVAssetReader,將回調停止到遠程I/O AudioUnit
我簡化了我的代碼只有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設置爲上市here
是否AVAssetReader使用AudioUnit系統?沒有辦法讓他們一起工作嗎?
我正在使用'kAudioSessionProperty_AudioCategory - kAudioSessionCategory_MediaPlayback',所以我需要確保'kAudioSessionProperty_OverrideCategoryMixWithOthers'被設置爲true。 – TurqMage 2011-06-21 16:20:46