Ошибка AudioUnitInitialize с кодом ошибки 1701737535 'ent?' после прерывания тревоги

Я работаю с приложением VOIP. Приложение отлично работает с CallKit.

Я столкнулся с проблемой, если во время разговора сработает сигнал тревоги. Каждый раз, когда тревога перестает срабатывать (прекращается прерывание звука), мы пытаемся установить Active: на AVAudioSession. Но всегда выдает ошибку с кодом 1701737535 т.е. 'ent?'.

Та же ошибка возникает, когда я пытаюсь инициализировать аудиоустройство. Без использования CallKit работает нормально.

Кто-нибудь сталкивался с проблемой активации аудиосеанса по окончании прерывания звука.

Я получаю другую ошибку "! Pri" 561017449 в том же сценарии, но на этот раз прерывание произошло из-за приложения Native Phone.

Проблемы на 100% воспроизводимы. пробовал со многими хитами и следами, такими как поток, задержка или вызов setActive: YES и без вызова setActive: YES. Но не повезло.

Резюмируя здесь:

  1. Получение ошибки 1701737535 т.е. 'ent?' если прерывание из-за ТРЕВОГИ.

  2. Получение ошибки 561017449 т.е. '! pri', если прерывание из-за Native Call

Репликация только при использовании CallKit с VIOP.

Кто-нибудь поможет.


person Raju Panwar    schedule 17.04.2018    source источник
comment
Все звуковые прерывания обрабатываются callkit. Думаю, нам не нужно уделять особого внимания.   -  person RJV Kumar    schedule 18.04.2018
comment
CallKit не обрабатывает прерывания звука автоматически. Если есть специальная реализация CallKit, дайте мне знать.   -  person Raju Panwar    schedule 19.04.2018
comment
что произойдет, если вы удалите код прерывания звука (setActive и т. д.) и выполните код, проверьте, воспроизводится ли звуковой сигнал? Звук вызова продолжается или вызов находится на удержании?   -  person RJV Kumar    schedule 19.04.2018
comment
Я не использую какой-либо специальный код для прерывания звука для callkit.   -  person RJV Kumar    schedule 19.04.2018
comment
Просто хочу подтвердить, нужно попробовать, включив сигнал тревоги во время разговора. и выключить будильник?   -  person Raju Panwar    schedule 20.04.2018
comment
да. Я пытался. У меня нет таких ошибок, как указано выше.   -  person RJV Kumar    schedule 20.04.2018
comment
Спасибо за повтор.   -  person Raju Panwar    schedule 23.04.2018
comment
Кто-нибудь еще, кто сталкивался с проблемой при инициализации аудиоустройства вместе с CallKit?   -  person Raju Panwar    schedule 23.04.2018
comment
@RajuPanwar ты починил ???   -  person Jeeva    schedule 22.01.2019
comment
Исправить не удалось.   -  person Raju Panwar    schedule 07.03.2019
comment
любое решение @RajuPanwar   -  person Uttam Panchasara    schedule 12.09.2020
comment
Февраль 2021 года, какие-нибудь исправления? сталкиваясь с тем же, используя PJSIP   -  person K_Mohit    schedule 03.02.2021


Ответы (2)


Я столкнулся с той же проблемой, решение, которое я нашел и работал со мной, - это включить аудиосеанс, прежде чем сообщать о своем новом звонке.

// Activate audio session
  do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, mode: AVAudioSessionModeVoiceChat, options: [.mixWithOthers, .allowBluetoothA2DP])
    try AVAudioSession.sharedInstance().setActive(true)
  } catch {
  }
  provider.reportNewIncomingCall(with: currentCallID, update: update, completion: { error in })
person Elsammak    schedule 25.09.2018
comment
Да, я сделал то же самое для первого звонка, о котором сообщили. НО что, если звонок уже запущен, и мы получаем другой звонок из другого приложения, такого как Skype или собственный звонок. - person Raju Panwar; 07.03.2019
comment
Вы можете проверить документацию Apple по этой части здесь developer.apple.com/library/archive/documentation/Audio/ - person Elsammak; 11.03.2019
comment
Привет, братан, у меня все еще появляется ошибка Error Domain = NSOSStatusErrorDomain Code = 561017449 при настройке типа u, можете ли вы помочь? - person famfamfam; 06.02.2021
comment
вот ошибка: не удалось настроить AVAudioSession: Error Domain = NSOSStatusErrorDomain Code = 561017449 (null) Настройка ошибки Категория AVAudioSession: Error Domain = NSOSStatusErrorDomain Code = 561017449 \ (null) \ - person famfamfam; 06.02.2021

Я исправил это следующим образом. Надеюсь, это поможет.

  1. Зарегистрируйтесь в AVAudioSessionInterruptionNotification (Objective-C):

  2. Когда началось прерывание, переведите вызов в режим удержания, а когда прерывание закончится, установите активный аудиосеанс и снимите вызов с удержания.

    - (void)interruption:(NSNotification*)notification {
      // get the user info dictionary
      NSDictionary *interuptionDict = notification.userInfo;
     // get the AVAudioSessionInterruptionTypeKey enum from the dictionary
     NSInteger interuptionType = [[interuptionDict valueForKey:AVAudioSessionInterruptionTypeKey] integerValue];
    // decide what to do based on interruption type here...
     switch (interuptionType) {
         case AVAudioSessionInterruptionTypeBegan: {
           NSLog(@"Audio Session Interruption case started.");
           // hold call using callkit CXTransaction
           [[CallManager shared] setHold:YES];
         }
         break;
    
         case AVAudioSessionInterruptionTypeEnded: {
          NSLog(@"Audio Session Interruption case ended.");
          AVAudioSession *audioSession = [AVAudioSession sharedInstance];
          NSError *error = nil;
          [audioSession setActive:YES error:&error];
         // unhold call using callkit CXTransaction
          [[CallManager shared] setHold:NO];
       }
       break;
    
       default:
         NSLog(@"Audio Session Interruption Notification case default.");
         break;
      }
    }
    
person K_Mohit    schedule 03.02.2021