Cambiar la salida de audio de la llamada
Esta guía explica cómo cambiar la salida de audio de la llamada con el Vonage Client SDK. Antes de comenzar, asegúrate de haber agregado el SDK a tu aplicación y (Android, iOS, JS) y podrá escriba a o reciba llamadas.
NOTA: Actualmente no hay soporte para el enrutamiento de salida de audio en los navegadores móviles y Safari, por lo que los siguientes ejemplos de JavaScript sólo son aplicables a los navegadores de escritorio como se detalla en este tabla de compatibilidad.
Android
Para permitir el cambio de salida de audio sin problemas dentro de su aplicación Android, usted querrá integrar ConnectionService. Esto permite que el sistema operativo gestione el enrutamiento de la salida de audio a través de la interfaz de usuario de llamada predeterminada con la que los usuarios estarán familiarizados.
Android ConnectionService Recursos:
- Aplicación de referencia por voz con
ConnectionService- GitHub
Detección de cambios en las rutas de salida de audio
Puede suscribirse al onCallAudioStateChanged o onCallEndpointChanged métodos delegados en función de su nivel de API para observar los cambios en la salida de audio:
// Android API 34 and above
override fun onCallEndpointChanged(callEndpoint: CallEndpoint) {
state ?: return
println("New Callendpoint ${callEndpoint}")
}
// Android API 33 and below
override fun onCallAudioStateChanged(state: CallAudioState?) {
state ?: return
println("is curent audio state route ${state.route == ROUTE_BLUETOOTH}")
}
iOS
Para permitir el cambio de salida de audio sin problemas dentro de su aplicación de iOS, usted querrá integrar CallKit. Esto permite a los respectivos sistemas operativos gestionar el enrutamiento de la salida de audio a través de la interfaz de usuario de llamada predeterminada con la que los usuarios estarán familiarizados.
iOS CallKit Recursos:
Aplicación de referencia por voz con
CallKit- GitHubCómo manejar las notificaciones push de VoIP utilizando iOS Callkit - Blog
Hacer llamadas salientes usando iOS CallKit - Blog
Obtener rutas de salida de audio
let outputs = AVAudioSession.sharedInstance().currentRoute.outputs
Detección de cambios en las rutas de salida de audio
Puede suscribirse al AVAudioSession.routeChangeNotification notificación para observar los cambios en la salida de audio:
// myRouteChangeHandler is a function you need to create
NotificationCenter.default.addObserver(self, selector: #selector(myRouteChangeHandler), name: AVAudioSession.routeChangeNotification, object: nil)
Cambio de las rutas de salida de audio
Puedes anular la salida de audio al altavoz:
AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker)
Más información en Documentación de Apple.
JavaScript (escritorio)
No hay soporte para el enrutamiento de salida de audio en los navegadores móviles, por lo que los siguientes ejemplos de JavaScript sólo son aplicables a los navegadores de escritorio. Existe una propuesta para añadir soporte a la Web API.
Obtener rutas de salida de audio
Antes de intentar cambiar las rutas de salida de audio, debes comprobar qué rutas tienes disponibles:
const audioOutputDevices = await navigator.mediaDevices.enumerateDevices().then(devices => devices.filter(d => d.kind == "audiooutput"));
Cambio de las rutas de salida de audio
Cuando se crea una llamada, el Vonage Client SDK creará una HTMLAudioElement y adjuntar el flujo de salida de la llamada a su srcObject. Puede acceder al elemento de audio con lo siguiente:
const audioOutputElement = client.getAudioOutputElement();
En HTMLAudioElement tiene un método llamado setSinkId que tomará el deviceId y utilícelo para establecer el Dispositivo de Salida de Audio deseado en el HTMLAudioElement fuente:
audioElement.setSinkId(audioOutputDevices[2].deviceId);
NOTA setSinkId no es compatible con Safari y algunas versiones antiguas de navegadores. Ver la tabla de compatibilidad para conocer las versiones exactas.