Передача вызова GSM на вызов VOIP с помощью CallKit приводит к потере звука

Я реализовал CallKit в своем приложении VoIP, и все в порядке, кроме одного сценария:

Когда вызов VoIP прерывает телефонный вызов и пользователь выбирает «Завершить и ответить», телефонный вызов завершается, на вызов VoIP отвечает, но через несколько секунд звук пропадает.

Этого не происходит, когда телефонный звонок удерживается или если вызов VoIP прерывает другой вызов VoIP (даже из другого приложения VoIP).

Для восстановления звука необходимо приостановить и возобновить разговор.

Кто-нибудь воспроизводит эту проблему или есть идея?

Заранее спасибо !


person Benjamin REIS    schedule 17.01.2017    source источник


Ответы (1)


Когда вы отвечаете на звонок ... Проверьте, активирован ли аудиосеанс, после этого вам необходимо активировать состояние мультимедиа вашего звонка.

- (void)provider:(CXProvider *)provider performAnswerCallAction:(CXAnswerCallAction *)action {

   NSLog(@"Provider perform Answer Call Action");

   // Retrieve the instance corresponding to the action's call UUID
   SIPCall *call = [_callManager callWithUUID:action.callUUID];
   if (!call) {
       [action fail];
       return;
   }

   /*
   Configure the audio session, but do not start call audio here, since it must be done once
   the audio session has been activated by the system after having its priority elevated.
   */
   [[AudioManager sharedManager] configureAudioSession];

   // Trigger the call to be answered via the underlying network service.
   [call answer];

   // Signal to the system that the action has been successfully performed.
   [action fulfill];
}

Также проверьте метод завершения вызова.

- (void)provider:(CXProvider *)provider performEndCallAction:(CXEndCallAction *)action {
   NSLog(@"Provider perform End Call Action");
   // Retrieve the Voifinity PBX instance corresponding to the action's call UUID
   SIPCall *call = [_callManager callWithUUID:action.callUUID];
   if (!call) {
      [action fail];
      return;
   }

   // Stop call audio whenever ending the call.
   //[[AudioManager sharedManager] disableSoundDevices];

   // Trigger the call to be ended via the underlying network service.
   [call hangUp];

   // Signal to the system that the action has been successfully performed.
   [action fulfill];

   // Remove the ended call from the app's list of calls.
   [_callManager removeCall:call];

}

А также добавьте, чтобы проверить активацию или отключение аудиосессии. Звонок при звонке должен быть активирован только и только после активации аудиосеанса. Добавьте ниже делегата для отслеживания аудиосессий.

// Активируем сеанс

- (void)provider:(CXProvider *)provider didActivateAudioSession:(AVAudioSession *)audioSession {
   NSLog(@"Received: %s",__FUNCTION__);
}

// Деактивировать сеанс

- (void)provider:(CXProvider *)provider didDeactivateAudioSession:(AVAudioSession *)audioSession {
NSLog(@"Received: %s",__FUNCTION__);
}
person Irfan Khatik    schedule 07.02.2017