We have identified following audio interruption scenarios by a PSTN call when there is an active VOIP call.
Initial Steps:
- Voip call is active.
- Incoming PSTN call.
- CallKit displays the option to
Hold & Accept
(Hold
the Voip call andAccept
the PSTN call). - Select the
Hold & Accept
options, PSTN call is now active and Voip call is in hold.
Scenario 1:
User action
End the PSTN call from CallKit.
CallKit action
CallKit automatically resumes the Voip call and audio is flowing.
Result - Pass
didActivateAudioSession
is invoked we know exactly when to start audio again.
Scenario 2:
User action
While the PSTN call is active manually switch to the Voip app and Resume
the call.
CallKit action
PSTN call is put on hold by CallKit and Voip call is active.
Result - Pass
didActivateAudioSession
is invoked we know exactly when to start audio again.
Scenario 3:
User action
In CallKit menu use the Swap button to switch between the Voip call and PSTN call.
CallKit action
CallKit switches between the calls by putting the active call on hold.
Result - Fail
didActivateAudioSession
is invoked we know exactly when to start audio again and audio flows properly but sometimes when siwtching between call the CallKit just sends the performEndCallaction
to the Voip app instead of putting the Voip call on Hold
.
Not sure if this is because Hold action by the Voip app taking more than x amount of time which leads to CallKit ending the Voip call.
Scenario 4:
User action
Let the PSTN call end on its own.
CallKit action
CallKit launches the Voip app and call is in hold. User is expected to manually resume the call from the Voip app.
Result - Fail
No audio is flowing as didActivateAudioSession
is not invoked at all. There was a previous call to didDeactivateAudioSession
. Even if we manually resume the call without waiting for didActivateAudioSession
we fail to get the audio device instance audio::apple::deviceResumeFailed
.
Can this be fixed by Apple to invoke the didActivateAudioSession or am i doing something wrong here ?
Tested on
- Model : iPhone SE2
- iOS Version: 16.1