ExtAudioFileRead崩溃,代码为-40

时间:2014-12-29 17:05:11

标签: core-audio audiounit ios8.1

我的应用在后台播放音乐。我在后台模式中有音频 ,我的音频会话如下:

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *err = NULL;
[audioSession setCategory:AVAudioSessionCategoryPlayback error:&err];
if( err ){
    NSLog(@"There was an error creating the audio session");
}
[audioSession setMode:AVAudioSessionModeDefault error:&err];
if( err ){
    NSLog(@"There was an error setting mote to the audio session");
}
[[AVAudioSession sharedInstance] setActive:YES error:&err];
if( err ){
    NSLog(@"There was an error setting mote to the audio session");
}

我正在通过配置有2个节点的AUGraph播放:远程I / O和混音器:

AudioComponentDescription outputcd;
outputcd.componentFlags        = 0;
outputcd.componentFlagsMask    = 0;
outputcd.componentManufacturer = kAudioUnitManufacturer_Apple;
outputcd.componentSubType      = kAudioUnitSubType_RemoteIO;
outputcd.componentType         = kAudioUnitType_Output;

// Multichannel mixer unit
AudioComponentDescription MixerUnitDescription;
MixerUnitDescription.componentType          = kAudioUnitType_Mixer;
MixerUnitDescription.componentSubType       = kAudioUnitSubType_AU3DMixerEmbedded;
MixerUnitDescription.componentManufacturer  = kAudioUnitManufacturer_Apple;
MixerUnitDescription.componentFlags         = 0;
MixerUnitDescription.componentFlagsMask     = 0;

同样根据Technical QA我添加了

UInt32 maxFPS = 4096;
AudioUnitSetProperty(_mixerUnit, kAudioUnitProperty_MaximumFramesPerSlice,kAudioUnitScope_Global, 0, &maxFPS,sizeof(maxFPS));

但仍然没有运气,我的应用程序在Render回调函数中持续崩溃 ExtAudioFileRead 大约10秒,因为我锁定了iPhone。有什么建议? 重要的是要提到这个错误不会在ios 7上重现。

1 个答案:

答案 0 :(得分:1)

问题在于在应用功能中启用了数据保护。因此,当设备被锁定时,文件已加密,无法在后台播放。因此崩溃。 更改音频文件的加密属性可以解决此问题。