ios 在另一个用户结束gsm呼叫后,音频不适用于短消息呼叫

wsxa1bj1  于 11个月前  发布在  iOS
关注(0)|答案(1)|浏览(114)

我正在进行音频/视频通话的实施,它工作正常.所以现在我正在工作的情况下,当我的GSM呼叫被GSM呼叫中断.当我收到任何GSM呼叫我得到结束/应答和持有/接受callkit选项.
当我选择保持/接受选项时,我的呼叫通过调用CXSetHeldCallAction方法保持,我暂停/静音了我的视频/音频,同时iOS通过调用didDeactivate audioSession方法停用音频会话,这是预期的行为。
现在,如果我从我的结束结束gsm呼叫通过点击结束呼叫按钮从callkit我的音频会话被自动激活,我也恢复我的视频和音频.但同样的是不会发生,如果另一个用户结束通话,没有音频会话被激活,所以音频在这种情况下不工作.
我检查了不同的堆栈溢出答案,并尝试了一切可能的方法,但仍然无法找出解决方案。我甚至试图手动激活会话,但得到会话激活失败错误。所以,如果有人面临同样的问题,并解决了这个问题,请给予我一个想法,我怎么能做到这一点。

jgwigjjp

jgwigjjp1#

经过几个小时的调试,我解决了这个问题。我实现了一个CXCallObserver委托callChanged,在那里我检查另一个调用是否在我的tagoncall id的帮助下结束。如果另一个调用结束,我调用CXSetHeldCallAction来取消保留我的tagoncall,这样,音频会话就自动恢复了。

func callObserver(_ callObserver: CXCallObserver, callChanged call: CXCall) {
    guard let callId = voipCallId else { return }
    //check if another call got ended. if yes then unhold voip call
    if call.uuid != callId && call.hasEnded {
        let callController = CXCallController()
        let update = CXCallUpdate()
        let endCallAction = CXSetHeldCallAction(call: callId, onHold: false)
        callController.request(
            CXTransaction(action: endCallAction),
            completion: { error in
                if let error = error {
                    debugPrint("call unheld Error: \(error.localizedDescription)")
                } else {
                    debugPrint("call unheld Success")
                    //restore original video and mute status of call.
                    CallManager.shared.isShowVideo = self.originalIsShowVideoStatus
                    CallManager.shared.isMuteAudio = self.originalIsMuteAudioStatus
                    self.provider?.reportCall(with: callId, updated: update)
                }
            })
    }
}

字符串

相关问题