如何检测其他VOIP呼叫(iOS)?

时间:2017-05-19 10:16:27

标签: ios objective-c webrtc voip callkit

我正在开发一款应用,允许使用在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手机日志中记录进出呼叫。

1 个答案:

答案 0 :(得分:0)

我建议检查所有当前的原生电话。通过CallKit注册的所有调用也被视为本机调用,并从CoreTelephony触发对此对象的调用:

$(...)

为了检测来自不支持CallKit的应用程序的VOIP调用,这会更难。可能是听AVAudioUnit的更改。