Iphone 启动Avassetrader停止对远程I/O音频单元的回调

Iphone 启动Avassetrader停止对远程I/O音频单元的回调,iphone,objective-c,ios,audiounit,Iphone,Objective C,Ios,Audiounit,我正在使用Avassetrader读取iPod库中的音频。()然后我取出读取缓冲区,通过音频单元播放。我正在尝试折射代码,以便在播放音频时在音频中播放。但是,如果Avassetrader正在运行,AudioUnit将停止接收对其KaudioUnit属性_SetRenderCallback的呼叫 我简化了代码,只播放AudioUnits回调中的文件 OSStatus UnitRenderCB(void* pRefCon, AudioUnitRenderActionFlags* flags, con

我正在使用Avassetrader读取iPod库中的音频。()然后我取出读取缓冲区,通过音频单元播放。我正在尝试折射代码,以便在播放音频时在音频中播放。但是,如果Avassetrader正在运行,AudioUnit将停止接收对其KaudioUnit属性_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设置与列出的相同


Avassetrader是否使用AudioUnit系统?没有办法让它们一起工作吗?

确保您调用了“AudioSessionInitialize”,否则可能会发生奇怪的事情。

您必须创建一个AudioSession并设置一个可混合的类别,如“使用音乐播放器”中所述


本文档实际上描述了如何配置AudioSession以便与MediaPlayer框架一起使用,但它同样适用于Avassetrader。

我使用的是“kAudioSessionProperty\u AudioCategory-kAudioSessionCategory\u MediaPlayback”,因此我需要确保“kAudioSessionProperty\u OverrideCategyMixWithOthers”设置为true。
    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];