我使用通话套件启动从用户A到用户B的voip通话,声音正确路由。我收到用户A上的其他voip呼叫(用户C呼叫A)。用户A选择" Hold&回答"选项,因此B用户呼叫将设置为保持,同时C用户呼叫将正确路由。 在某个时间点,C用户结束通话,因此我将结束正在进行的B用户呼叫,此时此呼叫处于暂停状态。当C用户调用结束时," didDeactivateAudioSession"叫做。 当我不知道拨打电话时,我做了下一步行动:
let matrix (h::t) =
let l = List.length h in
let rec f = function
| [] -> true
| h::t -> if List.length h = l then f t
else false in
f t
Reinvite工作正常,但AVAudiosession没有激活,当然在A和B之间的通话中声音不再工作了。
此外,当我在用户A上收到C用户呼叫断开连接时,想象下一步操作以结束C用户呼叫:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord mode:AVAudioSessionModeVoiceChat options:AVAudioSessionCategoryOptionMixWithOthers error:nil];
// unhold call
pjsua_call_reinvite([self identifier], PJSUA_CALL_UNHOLD, NULL);
我注意到当我调用请求事务时,也会调用didDeactivateAudioSession,即使我有其他调用处于活动状态。
答案 0 :(得分:0)
经过一番调查,我意识到我也必须保留pjsip和call kit中的呼叫。我只在pjsip中保留了呼叫,但这不是必需的,因为呼叫工具包控制AVAudioSession并在呼叫保持时禁用声音。
CXSetHeldCallAction *unholdAction = [[CXSetHeldCallAction alloc] initWithCallUUID:callUUID onHold:NO];
CXTransaction *transaction = [[CXTransaction alloc] initWithAction:unholdAction];
// perform transaction
[self.callController requestTransaction:transaction completion:^(NSError * _Nullable error) {
// finished unhold call
}];