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 - GitHub

  • Có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.

Referencia