AirPods Pro issue during a VoIP call,

Case-ID: 10075936

PLATFORM AND VERSION iOS Development environment: Xcode Xcode15, macOS macOS 14.5 Run-time configuration: iOS iOS18.0.1

DESCRIPTION OF PROBLEM Our customer experienced an one-way audio issue when switching from the built-in microphone to AirPods Pro (model: A2084, version: 6F21) during a VoIP call. The issue occurred when the customer's voice could not be heard by the other party, but the customer could hear the other party's voice.

STEPS TO REPRODUCE

Here are the details:

  1. After the issue occurred, subsequent VoIP calls experienced the same issue when using AirPods Pro, but the issue did not occur when using the built-in microphone. The issue could only be resolved by restarting the system, and killing the app did not work.
  2. Log and code analysis:
  3. In WebRTC, it listens for AVAudioSessionRouteChangeNotification. In the above scenario, when webrtc receives the route change notification, it will print the audio session configuration information. At this point, the input channel count was 0, which was abnormal:
[Webrtc] (RTCLogging.mm:33): (audio_device_ios.mm:535 HandleValidRouteChange): RTC_OBJC_TYPE(RTCAudioSession):
{
category: AVAudioSessionCategoryPlayAndRecord
categoryOptions: 128
mode: AVAudioSessionModeVoiceChat
isActive: 1
sampleRate: 48000.00
IOBufferDuration: 0.020000
outputNumberOfChannels: 2
inputNumberOfChannels: 0
outputLatency: 0.021500
inputLatency: 0.005000
outputVolume: 0.600000
isPreferredSpeaker: 0
isCallkit: 0
}
  1. If app tries to call API, setPreferredInputNumberOfChannels at this point, it will fail with an error code of -50:
setConfiguration:active:shouldSetActive:error:]): Failed to set preferred input number of channels(1): The operation couldn’t be completed. (OSStatus error -50.)

Our questions:

  1. When AVAudioSession is active, the category and mode are as expected. Why is the input channel count 0?
  2. Assuming that the AVAudioSession state is abnormal at this point, why does killing the app not resolve the issue, and why does the system need to be restarted to resolve the issue?
  3. Is it possible that the category and mode of the AVAudioSession fetched by the app is currently wrong? Does it need to be reset again each time the callkit is started if the category and mode fetched are the same as the values to be set?

Hello @WillWei,

Thanks for reaching out about this!

Are you able to provide a focused sample project that reproduces this issue?

Best regards,

Greg

We understand the importance of providing a focused sample project to reproduce the issue. However, this appears to be a rare and intermittent case, and we have not been able to reproduce it consistently in our testing environment.

Here are the reproduction steps provided by the affected user:

  1. Make a VoIP call using our app.
  2. Switch the audio route from the built-in microphone to AirPods Pro (model: A2084, version: 6F21) during the call.

Could you please provide further insight into the above questions?

AirPods Pro issue during a VoIP call,
 
 
Q