diff --git a/Session/Calls/Call Management/SessionCallManager+CXProvider.swift b/Session/Calls/Call Management/SessionCallManager+CXProvider.swift index ab8954e08..84b0d2bb8 100644 --- a/Session/Calls/Call Management/SessionCallManager+CXProvider.swift +++ b/Session/Calls/Call Management/SessionCallManager+CXProvider.swift @@ -58,5 +58,19 @@ extension SessionCallManager: CXProviderDelegate { public func provider(_ provider: CXProvider, timedOutPerforming action: CXAction) { // TODO: handle timeout } + + public func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) { + print("[CallKit] Audio session did activate.") + AssertIsOnMainThread() + guard let call = self.currentCall else { return } + call.webRTCSession.audioSessionDidActivate(audioSession) + } + + public func provider(_ provider: CXProvider, didDeactivate audioSession: AVAudioSession) { + print("[CallKit] Audio session did deactivate.") + AssertIsOnMainThread() + guard let call = self.currentCall else { return } + call.webRTCSession.audioSessionDidDeactivate(audioSession) + } } diff --git a/SessionMessagingKit/Calls/WebRTCSession.swift b/SessionMessagingKit/Calls/WebRTCSession.swift index a3dbeab6d..05d17859d 100644 --- a/SessionMessagingKit/Calls/WebRTCSession.swift +++ b/SessionMessagingKit/Calls/WebRTCSession.swift @@ -94,6 +94,8 @@ public final class WebRTCSession : NSObject, RTCPeerConnectionDelegate { public static var current: WebRTCSession? public init(for contactSessionID: String, with uuid: String) { + RTCAudioSession.sharedInstance().useManualAudio = true + RTCAudioSession.sharedInstance().isAudioEnabled = false self.contactSessionID = contactSessionID self.uuid = uuid super.init() @@ -259,7 +261,7 @@ public final class WebRTCSession : NSObject, RTCPeerConnectionDelegate { print("[Calls] ICE connection state changed to: \(state).") if state == .connected { delegate?.webRTCIsConnected() -// configureAudioSession() + configureAudioSession() } } @@ -297,6 +299,17 @@ extension WebRTCSession { audioSession.unlockForConfiguration() } + public func audioSessionDidActivate(_ audioSession: AVAudioSession) { + RTCAudioSession.sharedInstance().audioSessionDidActivate(audioSession) + RTCAudioSession.sharedInstance().isAudioEnabled = true + configureAudioSession() + } + + public func audioSessionDidDeactivate(_ audioSession: AVAudioSession) { + RTCAudioSession.sharedInstance().audioSessionDidDeactivate(audioSession) + RTCAudioSession.sharedInstance().isAudioEnabled = false + } + public func mute() { audioTrack.isEnabled = false }