tchapgouv / tchap-ios

A Matrix client for iOS
https://apps.apple.com/fr/app/tchap/id1446253779
Apache License 2.0
59 stars 17 forks source link

VoIP : problème de routage de son de sortie #979

Open NicolasBuquet opened 5 months ago

NicolasBuquet commented 5 months ago

Dans un même appel VoIP, l'activation du rendu audio de l'appel (interne, haut-parleur, casque bluetooth) est différent suivant l'UI qu'on utilise :

Depuis un appel dans l'application, on peut passer à l'UI CallKit native en quittant l'application et en rentrant dans l'appel géré par iOS (icône verte dans la barre du haut de l'écran de l'iPhone).

Dans l'exemple ci-dessous du même appel, on voit que Tchap rapporte que la communication est routée sur le caseque bluetooth (ce qui n'est pas le cas en fait), alors qu'en passant sur l'UI CallKit native, il est rapporté que la communication est routée sur le haut-parleur du téléphone (ce qui est exact).

Dans Tchap : image

CallKit native : image

L'option cochée est au même index dans les 2 cas. Problème d'ordre d'affichage des options de sortie ?

Exemple de problème remonté au support : -https://app.crisp.chat/website/6dacc68e-de3a-4511-8177-1339616098de/inbox/session_990dbc3b-7a49-4efa-9521-c32bf1aee784/

NicolasBuquet commented 5 months ago

Lorsqu'on change le périphérique de sortie audio, voici ce qui est loggué :

[MXiOSAudioOutputRouter] updateRoute: to: <MXiOSAudioOutputRoute: identifier: BUILT_IN, type: builtIn, name: iPhone >
[WebRTC] (RTCLogging.mm:33): (RTCAudioSession.mm:855 -[RTCAudioSession observeValueForKeyPath:ofObject:change:context:]): OutputVolumeDidChange to 0.450000
[WebRTC] (RTCLogging.mm:33): (RTCAudioSession.mm:531 -[RTCAudioSession handleRouteChangeNotification:]): Audio route changed:
[WebRTC] (RTCLogging.mm:33): (RTCAudioSession.mm:544 -[RTCAudioSession handleRouteChangeNotification:]): Audio route changed: CategoryChange to :AVAudioSessionCategoryPlayAndRecord
[WebRTC] (RTCLogging.mm:33): (RTCAudioSession.mm:563 -[RTCAudioSession handleRouteChangeNotification:]): Previous route: <AVAudioSessionRouteDescription: 0x281583ae0, 
inputs = (
    "<AVAudioSessionPortDescription: 0x2815818a0, type = BluetoothHFP; name = EAH-AZ60; UID = B8:20:8E:51:86:F9-tsco; selectedDataSource = (null)>"
); 
outputs = (
    "<AVAudioSessionPortDescription: 0x281581940, type = BluetoothHFP; name = EAH-AZ60; UID = B8:20:8E:51:86:F9-tsco; selectedDataSource = (null)>"
)>
Current route:<AVAudioSessionRouteDescription: 0x2815bf260, 
inputs = (
    "<AVAudioSessionPortDescription: 0x2815bf520, type = MicrophoneBuiltIn; name = iPhone Micro; UID = Built-In Microphone; selectedDataSource = (null)>"
); 
outputs = (
    "<AVAudioSessionPortDescription: 0x2815bed50, type = Receiver; name = R\U00e9cepteur; UID = Built-In Receiver; selectedDataSource = (null)>"
)>
[WebRTC] (RTCLogging.mm:33): (audio_device_ios.mm:630 HandleOutputVolumeChange): Output volume change detected.
[WebRTC] (RTCLogging.mm:33): (audio_device_ios.mm:509 HandleValidRouteChange): RTC_OBJC_TYPE(RTCAudioSession): {
  category: AVAudioSessionCategoryPlayAndRecord
  categoryOptions: 0
  mode: AVAudioSessionModeVoiceChat
  isActive: 1
  sampleRate: 16000.00
  IOBufferDuration: 0.016000
  outputNumberOfChannels: 1
  inputNumberOfChannels: 4
  outputLatency: 0.002313
  inputLatency: 0.001750
  outputVolume: 0.450000
}
[WebRTC] (RTCLogging.mm:33): (audio_device_ios.mm:520 HandleSampleRateChange): Handling sample rate change.
[WebRTC] (RTCLogging.mm:33): (audio_device_ios.mm:549 HandleSampleRateChange): Handling playout sample rate change:
  Session sample rate: 16000.000000 frames_per_buffer: 256
  ADM sample rate: 16000.000000 frames_per_buffer: 256
[WebRTC] (RTCLogging.mm:33): (audio_device_ios.mm:554 HandleSampleRateChange): Ignoring sample rate change since audio parameters are intact.
NicolasBuquet commented 1 month ago

Piste : regarder comment cela est géré dans Signal qui fonctionne correctement.