我正在开发一款应用,允许使用在iOS上使用webRTC的SDK进行视频通话。
预期的功能是,如果在我的应用程序实例化呼叫后实例化了另一个呼叫,我希望我的应用程序在我的呼叫中双向静音,直到该呼叫结束,在这种情况下音频将被恢复。
我遇到了一个问题,我想检测其他拨打VOIP电话的电话(例如WeChat和Facebook Messenger)。
在WeChat的情况下,我已经解决了这个问题,它中断了共享音频会话(AVAudioSession)。处理此问题的代码如下:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector
(audioSessionInterrupted:)
...
name:AVAudioSessionInterruptionNotification object:nil];
- (void) audioSessionInterrupted:(NSNotification*)notification
{
if(notification.name == AVAudioSessionInterruptionNotification)
{
NSDictionary* userInfo = notification.userInfo;
int result = userInfo[AVAudioSessionInterruptionTypeKey];
if(result == AVAudioSessionInterruptionTypeBegan)
{
[[AVAudioSession sharedInstance] setActive:NO error:nil];
[self setAudioEnabled:NO];
}
else if (result == AVAudioSessionInterruptionTypeEnded)
{
[[AVAudioSession sharedInstance] setActive:YES error:nil];
[self setAudioEnabled:YES];
}
}
}
但是,对于Facebook Messenger,从不调用此方法。我从中推测微信可能要求独占访问共享音频会话(从而导致我的应用程序中断音频会话)而Facebook Messenger选择混合其音频,或者在实例化呼叫时使用单独的音频会话
我的问题是,是否存在另一种检测其他VOIP调用的方法,可能使用CallKit框架?我的应用程序使用CallKit提示用户接听来电,并在iOS手机日志中记录进出呼叫。
答案 0 :(得分:0)
我建议检查所有当前的原生电话。通过CallKit注册的所有调用也被视为本机调用,并从CoreTelephony触发对此对象的调用:
$(...)
为了检测来自不支持CallKit的应用程序的VOIP调用,这会更难。可能是听AVAudioUnit的更改。