当concurent呼叫处于活动状态且其中一个呼叫结束时,AVAudiosession不会激活

时间:2017-09-22 09:56:49

标签: ios iphone avaudiosession callkit

我使用通话套件启动从用户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,即使我有其他调用处于活动状态。

1 个答案:

答案 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
 }];