Salida de audio para llamadas (web)
Web (nativa)
Lamentablemente, por el momento no es posible seleccionar el altavoz. Hay un propuesta para la API web, pero actualmente se encuentra en fase experimental y, por el momento, no cuenta con suficiente compatibilidad con los navegadores móviles.
Web (JS) (ordenador de sobremesa/portátil)
Una vez establecida la llamada, si deseas cambiar la salida de audio, puedes hacerlo mediante la API web del navegador.
Paso 1: Acceder a las opciones del dispositivo de salida de audio
Antes de poder configurar la salida de audio de la llamada en el dispositivo de salida deseado, necesitamos obtener una lista de todos los dispositivos de salida de audio del usuario a los que tiene acceso el navegador. El enumerarDispositivos El método devolverá una promesa con un array de MediaDeviceInfo. El usuario final necesitará una forma de seleccionar el dispositivo que desee de esta lista.
const audioOutputDevices = await navigator.mediaDevices.enumerateDevices().then(devices => devices.filter(d => d.kind == "audiooutput"))
Paso 2: Seleccionar el elemento de audio HTML
Cuando se crea una llamada, el Vonage Client SDK creará una HTMLAudioElement y adjunta el flujo de salida de la llamada a su srcObject. Puedes acceder al elemento de audio de la siguiente manera:
const audioOutputElement = client.getAudioOutputElement()
Paso 3: Actualizar la fuente del elemento HTMLAudioElement
Una vez que el usuario haya indicado qué dispositivo de salida de audio desea utilizar para la llamada, el deviceId habrá que extraerlo de MediaDeviceInfo. El HTMLAudioElement tiene un método llamado setSinkId que tomará el «deviceId» y lo utilizará para configurar el dispositivo de salida de audio deseado como fuente del elemento «HTMLAudioElement».
// Use the device selected by the user (e.g. from a dropdown)
const selectedDevice = audioOutputDevices[selectedIndex]
audioOutputElement.setSinkId(selectedDevice.deviceId)
El setSinkId Este método no es compatible con algunas versiones antiguas del navegador. Consulta la tabla siguiente para conocer las versiones mínimas.
Compatibilidad de los navegadores con SetSinkId()
| Navegador | Versión mínima | Nivel de asistencia |
|---|---|---|
| Chrome | 49 | Apoyo total |
| Borde | 17 | Apoyo total |
| Firefox | 116 | Apoyo total |
| Ópera | 36 | Apoyo total |
| Safari | 16.4 | Apoyo total |
Uso de «Promises» en lugar de «async-await»
Si quieres hacer lo anterior utilizando «promises» en lugar de «async await», puedes hacerlo de la siguiente manera:
navigator.mediaDevices.enumerateDevices().then(devices => {
// Get the Audio Output Device Options
const audioOutputDevices = devices.filter(d => d.kind == "audiooutput")
// Get the html audio element used by the client to attach the stream output
const audioOutputElement = client.getAudioOutputElement()
// Set the desired audio output device to be used by the audioElement
const selectedDevice = audioOutputDevices[selectedIndex]
audioOutputElement.setSinkId(selectedDevice.deviceId)
})