2017-10-16 10 views
1

내 VoIP 응용 프로그램에서 CallKit을 사용할 때 여러 통화에 문제가 있습니다.두 번째 전화에 응답하고 첫 번째 통화를 보류 할 때 소리가 들리지 않습니다.

VOIP 전화가 1 대 1 일 때 소리가 잘 들립니다. 그러나 한 사람이 다른 VoIP 전화를 받고 홀드 및 수락 옵션을 선택하면 첫 번째 통화가 보류 상태가되고 두 ​​번째 통화에 응답합니다. 그러나 소리는 지금 닫힌다. 통화 간 스와핑도 작동하지 않습니다. 한 통화를 끊어도 작동하지 않습니다. 음성 용으로 RTP을 사용하고 있습니다.

중단 점을 넣고 AVAudioSession의 범주와 모드가 올바른지 확인하려고했습니다.

콘솔에서 하나 이상의 호출이있는 장치가 사운드 패킷을 보내는 것을 중지 할 수 있는지 확인할 수 있습니다. 내가 VOIP를 가능하게하고

직전 CXStartCallAction 제공자의을 reportNewIncomingCallWithUUID.

GSM 통화의 경우와 마찬가지입니다. 소리가있는 일대일 VOIP 통화가 있으면 한쪽에서 GSM 통화가 수신되고 사용자가 대기 및 수락 옵션을 선택하면 GSM 통화의 소리가 정상적으로 작동합니다. 그러나 사용자가 VOIP 전화를 활성 상태로 설정하고 통화를 스와핑하여 GSM 통화를 대기 상태로두면 VOIP 통화에 소리가 들리지 않습니다. 통화를 교환하고 GSM 통화를 활성화하면 사운드가 정상적으로 작동합니다. 하지만 VOIP 통화에는 소리가 들리지 않습니다. 이 경우

, 우리는 AVAudioSessionInterruptionTypeBegan하지만 가 호출되지 않습니다 AVAudioSessionInterruptionTypeEnded을 얻고있다. GSM 통화가 종료 된 후에도

비슷한 문제가있는 사람이 있습니까?

답변

0

같은 문제가있었습니다. 1 개의 활성 통화가 있고 새 통화가 수신되면 &을 수락합니다. 새 전화가 작동하지만 CallKit에서 스왑을 사용한 후 오디오가 작동을 멈 춥니 다.

오랫동안 디버그 한 후 Callkit 기본 인터페이스 (예 : CXProviderDelegate 프로토콜의 provider:performSetHeldCallAction: 메소드)를 통해 실제로 오디오가 비활성화/활성화되는 지점을 발견했습니다.

내 경우에는 호출이 OnHold에서 처리 중이기 때문에 [audioController deactivateAudioSession] 메서드를 사용했습니다.

그러나 CallKit을 통해 Swap 버튼을 누르면 활성 상태 (OnHold 상태에서)로 설정되어있는 다른 호출에 대해 동일한 방법 provider:performSetHeldCallAction:이 발생했습니다.

내 경우에는 먼저 통화 보류를 토글합니다 (통화를 보류 상태로 두거나 보류 상태로 전환). 그러면 통화 상태 (보류 여부)를 확인한 다음 오디오를 각각 비활성화하거나 활성화합니다. 일반적인 방법으로

은이 방법을 찾습니다

- (void)provider:(CXProvider *)provider performSetHeldCallAction:(CXSetHeldCallAction *)action { 
    SomeCallClass *call = [self.callManager callWithUUID:action.callUUID]; 
    if (!call) { 
     [action fail]; 
     return; 
    } 

    NSError *holdError; 
    [call toggleHold:&holdError]; 

    if (holdError) { 
     [action fail]; 
    } else { 

     if (call.onHold) 
      [self.audioController deactivateAudioSession]; 
     else 
      [self.audioController activateAudioSession]; 
     [action fulfill]; 
    } 
} 

이 코드는 CallKit 공급자의 대리인으로 작동 클래스에 있어야합니다.