2017-05-19 4 views
0

Ich arbeite an einer App, die Videoanrufe mit einem SDK ermöglicht, das webRTC auf iOS verwendet.Wie erkennen Sie andere VOIP-Anrufe (iOS)?

Vorgesehene Funktion ist, dass, wenn ein anderer Anruf instanziiert wird, nachdem meine App einen Anruf instanziiert hat, möchte ich meine Audio in beide Richtungen in meinem Anruf stummschalten, bis dieser Anruf beendet ist, in diesem Fall wird Audio wiederhergestellt.

Ich habe ein Problem festgestellt, wo ich andere Anrufe erkennen, die VOIP-Anrufe (zum Beispiel WeChat und Facebook Messenger) machen.

Im Fall von WeChat habe ich das dadurch gelöst, dass es die geteilte Audiositzung (von AVAudioSession) unterbricht. Der Code, der das handhabt, ist wie folgt:

Diese Methode wird jedoch für Facebook Messenger nie aufgerufen. Ich spekuliere daraus, dass WeChat möglicherweise exklusiven Zugriff auf die geteilte Audiositzung verlangt (und somit eine Unterbrechung der Audiositzung mit meiner App verursacht), während Facebook Messenger seine Audiodaten mischt oder eine separate Audiositzung verwendet, wenn ein Anruf instanziiert wird .

Meine Frage ist, gibt es eine andere Möglichkeit, andere VOIP-Anrufe zu erkennen, möglicherweise mit dem CallKit-Framework? Meine App verwendet CallKit, um den Benutzer nach eingehenden Anrufen zu fragen und eingehende/ausgehende Anrufe im iOS-Telefonprotokoll aufzuzeichnen.

Antwort

0

Ich würde empfehlen, alle aktuellen nativen Anrufe zu überprüfen. Alle Anrufe, die durch CallKit registriert sind, werden auch einheimische Anrufe und lösen einen Anruf auf dieses Objekt, von CoreTelephony betrachtet:

CTCallCenter *callCenter = [[CTCallCenter alloc] init]; 
callCenter.callEventHandler = ^(CTCall* call) { 
    //Native call changes are triggered here 
}; 

für VoIP-Gespräche von Anwendungen erkennen, die CallKit nicht unterstützen, ist dies schwieriger. Eine Möglichkeit ist, Änderungen an der AVAudioUnit zu hören.

Verwandte Themen