我制作了VOIP App。因为我正在使用PushKit和Callkit和pjsip。
当应用程序在后台获得呼叫通知并基于此我打开callkit屏幕并在点击接受呼叫连接后使用pjsip。
1)致电最终问题
但是当调用hangout pjsip成功调用hangout但是callkit会给我以下错误:
错误域名= com.apple.callkit.error.requesttransaction代码= 4
对于我检查的答案和结束通话uuid也相同但又没有结束通话。我花了很多时间但没有得到任何解决方案。
任何人都有解决方案,请帮助我。
2)接听电话后的音频问题
接受后,呼叫音频未配置。音频会话给出以下错误:
音频会话错误:错误域= NSOSStatusErrorDomain代码= 561017449“(null)” [aurioc] 892:失败:'!pri'(启用3,outf< 1 ch,44100 Hz,Int16> inf< 1 ch,44100 Hz,Int16>)
对于上述错误,任何人都有解决方案然后给我。
谢谢。
答案 0 :(得分:3)
1)调用结束问题
com.apple.callkit.error.requesttransaction code = 4 表示UUID未知。
CXErrorCodeRequestTransactionErrorUnknownCallUUID = 4
要在CallKit框架中正确结束通话,您必须使用您的唯一CXEndCallAction
初始化UUID
并使用"结束通话操作请求交易"来自您的CXCallController
。
CXEndCallAction *action = [[CXEndCallAction alloc] initWithCallUUID:c_UUID];
[self.callController requestTransaction:[CXTransaction transactionWithActions:@[action]] completion:completion];
在提供商方法中,您应该通过pjsip结束通话,不要忘记拨打[action fulfill]
。
- (void)provider:(CXProvider *)provider performEndCallAction:(nonnull CXEndCallAction *)action {
// get your current pjsip call object
...
// make hangup - something like:
pj_status_t status = pjsua_call_hangup([self identifier], 0, NULL, NULL);
if (status != PJ_SUCCESS) {
NSString *errStr = [NSString stringWithFormat:@"Error hanging up call %@", self];
ALog(@"%@", errStr);
}
[action fulfill];
}
2)接听电话后的音频问题
接受调用时,会触发以下方法- (void)provider:(CXProvider *)provider didActivateAudioSession:(AVAudioSession *)audioSession
,当您结束通话时,此方法称为(void)provider:(CXProvider *)provider didDeactivateAudioSession:(AVAudioSession *)audioSession
。
- (void)provider:(CXProvider *)provider didActivateAudioSession:(AVAudioSession *)audioSession{
// start audio and configure pjsip sound
pj_status_t status = pjsua_set_snd_dev(input, output); // '0' for input and output
}
按以下方法停用pjsip调用的声音。
- (void)provider:(CXProvider *)provider didDeactivateAudioSession:(AVAudioSession *)audioSession{
// end audio
pj_status_t status = pjsua_set_null_snd_dev();
}
答案 1 :(得分:2)
仅维护Provider,Configuration和CXCallController的一个实例即可解决结束呼叫问题。
答案 2 :(得分:1)
我通过将包含CallKit函数的类作为单例来修复它,并且从不为它分配新的实例。 你可以看一下这个助手类:
https://github.com/naandonov-mm/iOS-10-Sampler/tree/master/CallKit