2015-12-17 2 views
1

Я работаю над VoIP-приложением, которое использует MPVolumeView, чтобы пользователь мог настроить громкость системы. Все это отлично работало и денди, пока вышел iOS 9.1. Затем я обнаружил, что если бы я установил AVAudioSession в режим AVAudioSessionModeVoiceChat, то слот MPVolumeView сломался. (Это ползунок больше не регулирует громкость системы.) Если бы я изменил режим на AvAudioSessionModeDefault, то MPVolumeView работал бы так, как ожидалось, но я микрофон записывал звук, поступающий из динамика iPad. (Другими словами, голосовая обработка была отключена - что мне нужно для VoIP-звонков.) Предыдущий в iOS 9.1 Я мог установить режим AudioSession на AVAudioSessionModeDefault, а затем в AudioComponentDescription установить componentSubType на kAudioUnitSubType_VoiceProcessingIO, и все работает нормально. К сожалению, это уже не так. Кто-нибудь знает, как сохранить голосовую обработку и работать MPVolumeView после iOS 9.1?Переходы iOS MPVolumeView на основе режима AudioSession

Вот код, где я поставил AVAudioSession:

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 

    // Make sure the session on this thread matches. 
    AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionAllowBluetooth error:nil]; 

    // Here is the main connundrum: I want to set AVAudioSessionModeDefault so that the MPVolumeView will work, 
    // but when I do that the mic picks up the audio from the speaker and plays it back creating an unwanted feeback loop. 
    // If I set the mode to AVAudioSessionModeVoiceChat the voice processing (primarily the AEC) fixes the feeback loop, 
    // but then the MPVolumeView no longers works. (It no longer adjusts the system volume. 
    //Question: How can I have BOTH the voice processing AND the MPVolumeView adjust the system volume? 
    if(!appDelegate.viewController.voiceChatMode) 
     [audioSession setMode:AVAudioSessionModeDefault error:nil]; 
    else 
     [audioSession setMode:AVAudioSessionModeVoiceChat error:nil]; 

    [audioSession setPreferredIOBufferDuration:0.005 error:nil]; 
    [audioSession setActive:YES error:nil]; 
+0

Код в вашем вопросе отлично работает на iOS 9.2 («MPVolumeView» включен, когда установлен режим «AVAudioSessionModeVoiceChat»). Должна ли быть активная запись для воспроизведения проблемы? –

+0

Возможно. В моем примере проекта я записываю звук и воспроизвожу его обратно, но это также проблема, когда у меня есть голос VoIP, записывающий голос и воспроизведение звука от другого пользователя. У вас есть пример этого? Я спрашиваю, потому что мой простой тест не сработал. – CaptionCallDev

+0

Единственный пример, который у меня есть, - это то, что у вас есть в приведенном выше фрагменте кода, извините. –

ответ

0

После разговора с технической поддержкой Apple, это они отвечают прямо из первоисточника:

Согласно основным аудио технике, вопрос с MPVolumeView больше не регулирует громкость системы - это известная проблема (r. 17292753), которая в настоящее время зарегистрирована в нашей базе данных ошибок.

Боюсь, я ничего не знаю об этом. В противном случае, что касается поддержки VoIP, рекомендуется, чтобы в чат-приложениях не было ползунка громкости и вместо этого полагались на кнопки громкости телефона.

Итак, у вас оно есть. Надеюсь, они скоро это исправит ...

Смежные вопросы