首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CallKit干扰WebRTC视频

CallKit干扰WebRTC视频
EN

Stack Overflow用户
提问于 2017-06-25 09:53:41
回答 3查看 1.9K关注 0票数 1

当我使用CallKit应答WebRTC呼叫时,视频聊天在大多数情况下都可以正常工作。有时,我本地iPhone上的摄像头会因为CallKit而无法正确访问。当我删除CallKit时,视频聊天始终正常工作。另外,如果我在接听CallKit电话后设置了1.5秒的延迟,然后开始视频聊天,它似乎一直都工作得很好。这是什么原因呢?

EN

回答 3

Stack Overflow用户

发布于 2017-06-25 12:09:02

Callkit仅用于音频呼叫,因此callkit将仅激活AudioSession。

只有在导航到应用程序后,视频才会被激活。

试着在手机锁屏上接听来电,然后你就会被理解。

测试Facebook或其他流行的应用程序。

票数 2
EN

Stack Overflow用户

发布于 2018-07-20 15:26:58

尝试在providerDidReset(_ provider: CXProvider)中实现您的(重新)连接逻辑。您可能还希望在此方法中提供检查,以确保您没有重置成功的连接。

票数 0
EN

Stack Overflow用户

发布于 2020-02-27 20:34:29

我在我的应用中使用WebRTC + CallKit。我开始了一个呼叫,当我按下锁定/电源按钮时,CallKit呼叫将断开,而我的Voip呼叫音频路由将更改为接收器并保持不变。

为什么要锁定iPhone来终止呼叫。

这是我的代码。

代码语言:javascript
复制
    var callUUID: UUID?

extension AppDelegate {
    func initiateCallKitCall() {
        let config = CXProviderConfiguration(localizedName: "Huddl.ai")
        config.includesCallsInRecents = false;
        config.supportsVideo = true;
        config.maximumCallsPerCallGroup = 1
        provider = CXProvider(configuration: config)
        guard let provider = provider else { return }
        provider.setDelegate(self, queue: nil)
        callController = CXCallController()
        guard let callController = callController else { return }
        callUUID = UUID()
        let transaction = CXTransaction(action: CXStartCallAction(call: callUUID!, handle: CXHandle(type: .generic, value: "Huddl.ai")))
        callController.request(transaction, completion: { error in
            print("Error is : \(String(describing: error))")
        })

    }

    func endCallKitCall(userEnded: Bool) {
        self.userEnded = userEnded
        guard provider != nil else { return }
        guard let callController = callController else { return }
        if let uuid = callUUID {
            let endCallAction = CXEndCallAction(call: uuid)
            callController.request(
                CXTransaction(action: endCallAction),
                completion: { error in
                    if let error = error {
                        print("Error: \(error)")
                    } else {
                        print("Success")
                    }
                })
        }
    }

    func isCallGoing() -> Bool {
        let callController = CXCallController()
        if callController.callObserver.calls.count != 0 {
            return true
        }
        return false
    }
}

extension AppDelegate: CXProviderDelegate {

    func providerDidReset(_ provider: CXProvider) {
        print("-Provider-providerDidReset")
    }

    func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {
        print("-Provider-perform action: CXAnswerCallAction")
        action.fulfill()
    }

    func provider(_ provider: CXProvider, perform action: CXEndCallAction) {
        action.fulfill()
        print("-Provider: End Call")
    }

    func provider(_ provider: CXProvider, perform action: CXStartCallAction) {
        action.fulfill()

        DispatchQueue.main.asyncAfter(wallDeadline: DispatchWallTime.now() + 3) {
            provider.reportOutgoingCall(with: action.callUUID, startedConnectingAt: Date())
            DispatchQueue.main.asyncAfter(wallDeadline: DispatchWallTime.now() + 1.5) {
                provider.reportOutgoingCall(with: action.callUUID, connectedAt: Date())
            }
        }
    }

    func provider(_ provider: CXProvider, perform action: CXSetHeldCallAction) {
        action.fulfill()
    }

    func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) {
        RTCAudioSession.sharedInstance().audioSessionDidActivate(audioSession)
        RTCAudioSession.sharedInstance().isAudioEnabled = true
    }

    func provider(_ provider: CXProvider, didDeactivate audioSession: AVAudioSession) {
        RTCAudioSession.sharedInstance().audioSessionDidDeactivate(audioSession)
        RTCAudioSession.sharedInstance().isAudioEnabled = false
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44742497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档