Saída de áudio para chamadas (Web)
Web (Nativa)
Infelizmente, no momento, não há suporte para a seleção de alto-falantes. Há um proposta para a API da Web, mas, no momento, ela ainda está em fase experimental e não há suporte suficiente dos navegadores móveis para isso.
Web (JS) (Desktop/Laptop)
Depois que a chamada estiver estabelecida, se você quiser mudar a saída de áudio, isso é possível usando a API da Web do navegador.
Passo 1: Acesse as opções do dispositivo de saída de áudio
Antes de podermos definir a saída de stream da chamada para o dispositivo de saída desejado, precisamos obter uma lista de todos os dispositivos de saída de áudio do usuário aos quais o navegador tem acesso. O enumerarDispositivos O método retornará uma promessa com um array de MediaDeviceInfo. O usuário final precisará de uma maneira de selecionar o dispositivo desejado nessa lista.
const audioOutputDevices = await navigator.mediaDevices.enumerateDevices().then(devices => devices.filter(d => d.kind == "audiooutput"))
Etapa 2: Selecionar o elemento de áudio HTML
Quando uma chamada é criada, o Vonage Client SDK criará um HTMLAudioElement e anexe o fluxo de saída da chamada ao seu srcObject. Você pode acessar o elemento de áudio da seguinte forma:
const audioOutputElement = client.getAudioOutputElement()
Etapa 3: Atualizar a fonte do HTMLAudioElement
Assim que o usuário indicar qual dispositivo de saída de áudio deseja usar para a chamada, o deviceId precisará ser extraído do MediaDeviceInfo. O HTMLAudioElement possui um método chamado setSinkId que irá pegar o deviceId e usá-lo para definir o dispositivo de saída de áudio desejado como fonte do HTMLAudioElement.
// Use the device selected by the user (e.g. from a dropdown)
const selectedDevice = audioOutputDevices[selectedIndex]
audioOutputElement.setSinkId(selectedDevice.deviceId)
O setSinkId Esse método não é compatível com algumas versões mais antigas do navegador. Consulte a tabela abaixo para saber as versões mínimas.
Suporte dos navegadores à função SetSinkId()
| Navegador | Versão mínima | Nível de suporte |
|---|---|---|
| Chrome | 49 | Suporte completo |
| Borda | 17 | Suporte completo |
| Firefox | 116 | Suporte completo |
| Ópera | 36 | Suporte completo |
| Safári | 16.4 | Suporte completo |
Usando Promises em vez de async/await
Se você quiser fazer o que foi mostrado acima usando promessas em vez de `async await`, pode proceder da seguinte forma:
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)
})