AUAudioUnit не может воспроизводить аудио в фоновом режиме с кодом ошибки 561145187 - PullRequest
0 голосов
/ 20 апреля 2020

Я использую 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, чтобы он не смешивался. Я даже не записываю. Я просто пытаюсь воспроизвести аудио. Что еще мне не хватает?

1 Ответ

1 голос
/ 21 апреля 2020

Для записи звука в фоновом режиме, вы должны запустить аудиоустройство на переднем плане. Затем аудиоустройство продолжит работать в фоновом режиме. Если у вас нет данных для воспроизведения, вы можете воспроизвести тишину.

Если вы не записываете звук, не используйте тип сеанса playAndRecord. Вместо этого используйте один из типов сеансов только для воспроизведения.

...