iOS audio not working when joining a call from CallKit when other Jitsi call is in progress

Hi everyone,
there’s an issue we’re experiencing using JitsiMeetSDK on iOS.

Our setup is working fine with the CallKit using JMCallKitProxy, we’re able to answer a call from system CallKit and connect to Jitsi, but the problem with lost audio (only audio, video is working) appears when user answers second call reported by JMCallKitProxy.reportNewIncomingCall while already participating in a call. Other participants can not hear user who has joined to a second call using iOS device, but they are able to see video from this user.

Here’s MRE:

// MARK: JitsiMeetProvider

class JitsiMeetProvider: JMCallKitListener {

    func reportIncomingCall(uuid: UUID, payload: MeetPayload, completion: ((Error?) -> Void)?) {
        guard !JMCallKitProxy.hasActiveCallForUUID(uuid.uuidString) else { return }
        JMCallKitProxy.reportNewIncomingCall(UUID: uuid, handle: handle, displayName: name, hasVideo: true) { [weak self] error in

    func configureAudioSession() {
        let session = AVAudioSession.sharedInstance()
        do {
            try session.setCategory(.playAndRecord)
            try session.setMode(.voiceChat)
            try session.setActive(true)
        } catch let error {
            Swift.print("configureAudioSession error: \(error)")
    func performAnswerCall(UUID: UUID) {
        let meetOptions = MeetOptions(payload: call.payload, answer: true)
        AppDelegate.shared.router?.answerCall(options: meetOptions) { [weak self] in
            // Call is answered and MeetingView is started showing, establish connection with our backend ...

// MARK: AppRouter

class AppRouter {
    func answerCall(options: MeetOptions, completion: (() -> Void)?) {
        cancelCall { [weak self] in
            let vc = meetingRouter.initializeMeetingView(options: options) // initialize MeetingViewController with JitsiMeetView inside
            rootViewController?.present(vc, animated: true, completion: completion)
    func cancelCall(completion: (() -> Void)?) {
        // What for view dismiss and return completion then or if no current meeting is active then just return immediately
        if let vc = rootViewController?.presentedViewController as? MeetingView {
            vc.close(completion: completion)
        } else {

// MARK: MeetingView

class MeetingView: UIViewController {

    @IBOutlet weak var meetView: JitsiMeetView!

    override func viewDidLoad() {

        let stringServerUrl = payload.meetingServerUrl // our server meeting url
        let jitsiOptions = JitsiMeetConferenceOptions.fromBuilder { [weak self] (builder) in
            builder.serverURL = URL(string: stringServerUrl)
        JitsiMeet.sharedInstance().defaultConferenceOptions = jitsiOptions
        meetView.delegate = self
        let roomId = payload.roomId // get it from ViewModel, doesn't actually matter
        let jitsiOptions = JitsiMeetConferenceOptions.fromBuilder { (builder) in
   = roomId
    func close(completion: (() -> Void)?) {
        if meetView != nil {
            meetView = nil
        self.dismiss(animated: true, completion: completion)

I can also share some other if needed. Or logs (but it appears as a really long log list that not looking informative for me).