Callkit call End issue(error domain=com.apple.callkit.error.requesttransaction code=4) 和 Audio issue after Call accept
Callkit call End issue(error domain=com.apple.callkit.error.requesttransaction code=4) and Audio issue after Call accept
我制作了 VOIP App.For 我正在使用带有 pjsip 的 PushKit 和 Callkit。
当应用程序在后台收到呼叫通知并基于此我打开 callkit 屏幕并单击接受呼叫后使用 pjsip 连接。
1) 调用结束问题
但是当调用 hangout pjsip 成功调用 hangout 但随后 callkit 给我以下错误:
错误域=com.apple.callkit.error.requesttransaction代码=4
为此,我检查了答案并结束呼叫 uuid 也相同,但同样没有结束 call.I 花了很多时间但没有得到任何解决方案。
谁有解决办法请帮帮我
2) 接听电话后出现音频问题
接受呼叫音频后 configure.Audio 会话给我以下错误:
音频会话错误:错误域=NSOSStatusErrorDomain 代码=561017449“(null)”
[auurioc] 892:失败:'!pri'(启用 3,outf< 1 ch,44100 Hz,Int16> inf< 1 ch,44100 Hz,Int16>)
以上错误谁有解决办法再给我。
谢谢。
1) call End issue
com.apple.callkit.error.requesttransaction code=4 表示 UUID 未知。
CXErrorCodeRequestTransactionErrorUnknownCallUUID = 4
要在 CallKit 框架中正确结束通话,您必须使用您的唯一 UUID
初始化 CXEndCallAction
并从您的 CXCallController
.[=23= 请求使用 "end call action" 进行交易]
CXEndCallAction *action = [[CXEndCallAction alloc] initWithCallUUID:c_UUID];
[self.callController requestTransaction:[CXTransaction transactionWithActions:@[action]] completion:completion];
在 provider 方法中你应该通过 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) Audio issue After Accept call
当您接受调用时,将触发以下方法 - (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();
}
我通过将包含 CallKit 函数的 class 作为单例来修复它,并且从不分配它的新实例。
你可以看看这个帮手 class:
https://github.com/naandonov-mm/iOS-10-Sampler/tree/master/CallKit
仅维护 Provider、Configuration 和 CXCallController 的一个实例解决了结束调用问题。
我制作了 VOIP App.For 我正在使用带有 pjsip 的 PushKit 和 Callkit。
当应用程序在后台收到呼叫通知并基于此我打开 callkit 屏幕并单击接受呼叫后使用 pjsip 连接。
1) 调用结束问题
但是当调用 hangout pjsip 成功调用 hangout 但随后 callkit 给我以下错误:
错误域=com.apple.callkit.error.requesttransaction代码=4
为此,我检查了答案并结束呼叫 uuid 也相同,但同样没有结束 call.I 花了很多时间但没有得到任何解决方案。
谁有解决办法请帮帮我
2) 接听电话后出现音频问题
接受呼叫音频后 configure.Audio 会话给我以下错误:
音频会话错误:错误域=NSOSStatusErrorDomain 代码=561017449“(null)” [auurioc] 892:失败:'!pri'(启用 3,outf< 1 ch,44100 Hz,Int16> inf< 1 ch,44100 Hz,Int16>)
以上错误谁有解决办法再给我。
谢谢。
1) call End issue
com.apple.callkit.error.requesttransaction code=4 表示 UUID 未知。
CXErrorCodeRequestTransactionErrorUnknownCallUUID = 4
要在 CallKit 框架中正确结束通话,您必须使用您的唯一 UUID
初始化 CXEndCallAction
并从您的 CXCallController
.[=23= 请求使用 "end call action" 进行交易]
CXEndCallAction *action = [[CXEndCallAction alloc] initWithCallUUID:c_UUID];
[self.callController requestTransaction:[CXTransaction transactionWithActions:@[action]] completion:completion];
在 provider 方法中你应该通过 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) Audio issue After Accept call
当您接受调用时,将触发以下方法 - (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();
}
我通过将包含 CallKit 函数的 class 作为单例来修复它,并且从不分配它的新实例。 你可以看看这个帮手 class:
https://github.com/naandonov-mm/iOS-10-Sampler/tree/master/CallKit
仅维护 Provider、Configuration 和 CXCallController 的一个实例解决了结束调用问题。