Sortie audio pour les appels (iOS)
Pour permettre une commutation fluide de la sortie audio au sein de votre application, nous vous recommandons d'intégrer le framework CallKit d'Apple, particulièrement performant. CallKit permet à votre application de gérer efficacement les services d'appel, garantissant ainsi une expérience utilisateur fluide. Veuillez vous reporter à la documentation officielle d'Apple sur CallKit. ici.
Intégration de CallKit
Pour obtenir des conseils détaillés sur l'intégration de CallKit dans votre projet et sur la manière d'exploiter pleinement son potentiel, veuillez consulter Notifications push.
Itinéraires actuels de sortie audio
Pour récupérer les sources de sortie audio actuellement disponibles, vous pouvez utiliser AVAudioSession's currentRoute.outputs propriété. Vous obtiendrez ainsi la liste de toutes les sources de sortie actuellement disponibles.
let outputs = AVAudioSession.sharedInstance().currentRoute.outputs
outputs.forEach { audioSource in
switch audioSource.portType {
case .headphones:
print("headphones are used")
case .bluetoothA2DP:
print("Bluetooth audio is connected")
case .builtInSpeaker:
print("speaker is used")
case .builtInReceiver:
print("earpiece is used")
default:
print("other output: \(audioSource.portType.rawValue)")
}
}
Vous pouvez également redéfinir la source de sortie audio à l'aide de l'extrait de code suivant :
// highlight-next-line
AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker)
Nous vous recommandons d'éviter de définir ou de modifier les paramètres audio via CallKit pour une meilleure expérience.
Observation des modifications de la sortie audio
Vous pouvez vous abonner à la AVAudioSession.routeChangeNotification notification permettant de suivre les changements au niveau de la sortie audio. Voici comment procéder :
var cancelable: AnyCancellable?
func observeAudioRouteChanges() {
self.cancelable = NotificationCenter.default.publisher(for: AVAudioSession.routeChangeNotification).sink { notification in
/// process notification's user Info, to get audio change information
}
}
func removeAudioRouteChangesObserver() {
cancelable?.cancel()
}