Я использую AUAudioUnit для воспроизведения аудио, которое приложение транслирует с сервера. Мой код отлично работает на переднем плане. Но когда я создаю фоновое приложение, оно не воспроизводит звук. Я получил следующую ошибку.
[aurioc] AURemoteIO. cpp: 1590: Пуск: сбой AUIOClient_StartIO (561145187)
Код ошибки 561145187 означает AVAudioSessionErrorCodeCannotStartRecording
Этот тип ошибки обычно возникает, когда приложение запускает микшируемую запись из фона, и оно не настроено как приложение Inter-App Audio.
Именно так я настраиваю AVAudioSession в Swift:
try AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .voiceChat, options: [.allowBluetooth])
Вот как я настраивал AUAudioUnit в Objective- C:
AudioComponentDescription description;
description.componentType = kAudioUnitType_Output;
description.componentSubType = kAudioUnitSubType_VoiceProcessingIO;
description.componentManufacturer = kAudioUnitManufacturer_Apple;
description.componentFlags = 0;
description.componentFlagsMask = 0;
self.format = [[AVAudioFormat alloc] initWithSettings: @{
AVFormatIDKey: @(kAudioFormatLinearPCM),
AVSampleRateKey: @16000,
AVNumberOfChannelsKey: @1,
AVLinearPCMIsFloatKey: @NO,
AVLinearPCMBitDepthKey: @16,
AVLinearPCMIsBigEndianKey: @NO
}];
self.audioUnit = [[AUAudioUnit alloc] initWithComponentDescription:description options:0 error:nil];
Когда я вызываю метод startHardwareAndReturnError
, именно тогда я получаю эту ошибку сообщение.
[self.unit startHardwareAndReturnError:outError];
Я уже установил фоновые режимы - возможность аудио. И я почти уверен, что настроил AVAudioSession, чтобы он не смешивался. Я даже не записываю. Я просто пытаюсь воспроизвести аудио. Что еще мне не хватает?