Can reproduce in SpeakerBox that CallKit doesn't activate audiosession when call finished by remote caller

I can reproduce the bug that CallKit doesn't active audiosession after the outgoing call put on hold because of an incoming call.

VoIP calling with CallKit

Steps to reproduce:

  1. Download SpeakerBox example app from the link above and start it with XCode
  2. Start a new outgoing call
  3. Call your phone from other phone
  4. Hold and Accept the call
  5. After a few secs finish the call from the other phone
  6. The outgoing call will be still on hold
  7. Click on the call and click Toggle Hold

The call won't be active again because the audiosession is activated.

Logs:

Received provider(_:didDeactivate:)
Received provider(_:didDeactivate:)
Received provider(_:didDeactivate:)
Received provider(_:didDeactivate:)
Received provider(_:didDeactivate:)
Requested transaction successfully
Starting audio
Type: stdio
           AURemoteIO.cpp:1162  failed: 561017449 (enable 3, outf< 1 ch,  44100 Hz, Float32> inf< 1 ch,  44100 Hz, Float32>)
Type: Error | Timestamp: 2024-08-15 12:20:29.949437+02:00 | Process: Speakerbox | Library: libEmbeddedSystemAUs.dylib | Subsystem: com.apple.coreaudio | Category: aurioc | TID: 0x19540d
           AVAEInternal.h:109   [AVAudioEngineGraph.mm:1344:Initialize: (err = PerformCommand(*outputNode, kAUInitialize, NULL, 0)): error 561017449
Type: Error | Timestamp: 2024-08-15 12:20:29.949619+02:00 | Process: Speakerbox | Library: AVFAudio | Subsystem: com.apple.avfaudio | Category: avae | TID: 0x19540d
Couldn't start Apple Voice Processing IO: Error Domain=com.apple.coreaudio.avfaudio Code=561017449 "(null)" UserInfo={failed call=err = PerformCommand(*outputNode, kAUInitialize, NULL, 0)}
Type: Notice | Timestamp: 2024-08-15 12:20:29.949730+02:00 | Process: Speakerbox | Library: Speakerbox | TID: 0x19540d
Route change:
Type: Notice | Timestamp: 2024-08-15 12:20:30.167498+02:00 | Process: Speakerbox | Library: Speakerbox | TID: 0x19540d
     ReasonUnknown
Type: Notice | Timestamp: 2024-08-15 12:20:30.167549+02:00 | Process: Speakerbox | Library: Speakerbox | TID: 0x19540d
Previous route:
Type: Notice | Timestamp: 2024-08-15 12:20:30.167568+02:00 | Process: Speakerbox | Library: Speakerbox | TID: 0x19540d
<AVAudioSessionRouteDescription: 0x302c00bc0, 
inputs = (
    "<AVAudioSessionPortDescription: 0x302c01330, type = MicrophoneBuiltIn; name = iPhone Mikrofon; UID = Built-In Microphone; selectedDataSource = (null)>"
); 
outputs = (
    "<AVAudioSessionPortDescription: 0x302c004d0, type = Receiver; name = Vev\U0151; UID = Built-In Receiver; selectedDataSource = (null)>"
)>
Type: Notice | Timestamp: 2024-08-15 12:20:30.167626+02:00 | Process: Speakerbox | Library: Speakerbox | TID: 0x19540d

A few more details:

  • Correction: The call won't be active again because the audiosession is not activated.
  • It is important that the call must be finished by the remote participant. Otherwise everything works fine.
  • Test device: iPhone 13 Pro, iOS 17.6.1

Actually on the UI the call will be active but you can see the error in the log:

Couldn't start Apple Voice Processing IO: Error Domain=com.apple.coreaudio.avfaudio Code=561017449 "(null)" UserInfo={failed call=err = PerformCommand(*outputNode, kAUInitialize, NULL, 0)}

Have you filed a bug on this? What's the bug number?

__
Kevin Elliott
DTS Engineer, CoreOS/Hardware

Can reproduce in SpeakerBox that CallKit doesn't activate audiosession when call finished by remote caller
 
 
Q