当并发呼叫处于活动状态并且其中一个结束时,AVAudiosession 不会激活
AVAudiosession is not activate when have concurent calls active and one of them is ended
我使用呼叫套件从用户 A 向用户 B 发起 voip 呼叫,声音路由正确。我收到用户 A 的其他 voip 呼叫(用户 C 呼叫 A)。用户 A 选择 "Hold & Answer" 选项,因此 B 用户呼叫将设置为保持状态,而 C 用户呼叫将被正确路由。
在某个时间点,C 用户结束通话,所以我最终将让 B 用户通话正在进行中,此时处于保留状态。当 C 用户调用结束时,也会调用 "didDeactivateAudioSession"。
当我取消保持 voip 呼叫时,我进行了下一步操作:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord mode:AVAudioSessionModeVoiceChat options:AVAudioSessionCategoryOptionMixWithOthers error:nil];
// unhold call
pjsua_call_reinvite([self identifier], PJSUA_CALL_UNHOLD, NULL);
Reinvite可以正常unhold了,但是AVAudiosession没有激活,当然A和B的通话声音也没有了。
此外,当我在用户 A 上收到 C 用户呼叫断开连接时,我将执行下一个操作以结束 C 用户呼叫:
CXEndCallAction *endAction = [[CXEndCallAction alloc] initWithCallUUID:callUUID];
CXTransaction *transaction = [[CXTransaction alloc] initWithAction:endAction];
// perform transaction
[self.callController requestTransaction:transaction completion:^(NSError * _Nullable error) {
if (error != nil) {
NSLog(TALoggerLevelCritical, @"\n\n ***** ERROR: Faield to end call transaction ****** \n\n");
}
}];
我注意到当我调用请求事务时也会调用 didDeactivateAudioSession,即使我有其他调用处于活动状态。
经过一番调查后,我意识到我必须在 pjsip 中取消保持调用并调用工具包。我只取消了 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
}];
我使用呼叫套件从用户 A 向用户 B 发起 voip 呼叫,声音路由正确。我收到用户 A 的其他 voip 呼叫(用户 C 呼叫 A)。用户 A 选择 "Hold & Answer" 选项,因此 B 用户呼叫将设置为保持状态,而 C 用户呼叫将被正确路由。 在某个时间点,C 用户结束通话,所以我最终将让 B 用户通话正在进行中,此时处于保留状态。当 C 用户调用结束时,也会调用 "didDeactivateAudioSession"。 当我取消保持 voip 呼叫时,我进行了下一步操作:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord mode:AVAudioSessionModeVoiceChat options:AVAudioSessionCategoryOptionMixWithOthers error:nil];
// unhold call
pjsua_call_reinvite([self identifier], PJSUA_CALL_UNHOLD, NULL);
Reinvite可以正常unhold了,但是AVAudiosession没有激活,当然A和B的通话声音也没有了。
此外,当我在用户 A 上收到 C 用户呼叫断开连接时,我将执行下一个操作以结束 C 用户呼叫:
CXEndCallAction *endAction = [[CXEndCallAction alloc] initWithCallUUID:callUUID];
CXTransaction *transaction = [[CXTransaction alloc] initWithAction:endAction];
// perform transaction
[self.callController requestTransaction:transaction completion:^(NSError * _Nullable error) {
if (error != nil) {
NSLog(TALoggerLevelCritical, @"\n\n ***** ERROR: Faield to end call transaction ****** \n\n");
}
}];
我注意到当我调用请求事务时也会调用 didDeactivateAudioSession,即使我有其他调用处于活动状态。
经过一番调查后,我意识到我必须在 pjsip 中取消保持调用并调用工具包。我只取消了 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
}];