Alteração da saída de áudio das chamadas

Este guia explica como alterar a saída de áudio das chamadas usando o Vonage Client SDK. Antes de começar, certifique-se de ter adicionado o SDK ao seu aplicativo e (Android, iOS, JS) e você consegue fazer ou receber chamadas.

NOTA: Atualmente, não há suporte para o roteamento de saída de áudio em navegadores móveis e no Safari; portanto, os exemplos de JavaScript abaixo se aplicam apenas a navegadores de desktop, conforme detalhado neste tabela de compatibilidade.

Android

Para permitir a alternância contínua da saída de áudio em seu aplicativo Android, você precisará integrar ConnectionService. Isso permite que o sistema operacional gerencie o roteamento da saída de áudio por meio da interface de usuário padrão com a qual os usuários já estão familiarizados.

Android ConnectionService Recursos:

  • Aplicativo de referência de voz utilizando ConnectionService - GitHub

Detecção de alterações nas rotas de saída de áudio

Você pode se inscrever no onCallAudioStateChanged ou onCallEndpointChanged Delegue métodos, dependendo do seu nível de API, para monitorar alterações na saída de áudio:

// 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 a alternância contínua da saída de áudio em seu aplicativo iOS, você deve integrar CallKit. Isso permite que os respectivos sistemas operacionais gerenciem o roteamento da saída de áudio por meio da interface de usuário padrão de chamadas, com a qual os usuários já estão familiarizados.

iOS CallKit Recursos:

  • Aplicativo de referência de voz utilizando CallKit - GitHub

  • Como lidar com notificações push de VoIP usando o CallKit do iOS - Blog

  • Fazer chamadas de saída usando o CallKit do iOS - Blog

Obtendo as rotas de saída de áudio

let outputs = AVAudioSession.sharedInstance().currentRoute.outputs

Detecção de alterações nas rotas de saída de áudio

Você pode se inscrever no AVAudioSession.routeChangeNotification notificação para observar alterações na saída de áudio:

// myRouteChangeHandler is a function you need to create

NotificationCenter.default.addObserver(self, selector: #selector(myRouteChangeHandler), name: AVAudioSession.routeChangeNotification, object: nil)

Alteração das rotas de saída de áudio

Você pode redirecionar a saída de áudio para o alto-falante:

AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker)

Mais informações estão disponíveis no Documentação da Apple.

JavaScript (computador)

Não há suporte para o direcionamento da saída de áudio em navegadores móveis; portanto, os exemplos em JavaScript abaixo se aplicam apenas a navegadores de desktop. Há um proposta para adicionar suporte à API da Web.

Obtendo as rotas de saída de áudio

Antes de tentar alterar as rotas de saída de áudio, você deve verificar quais rotas estão disponíveis:

const audioOutputDevices = await navigator.mediaDevices.enumerateDevices().then(devices => devices.filter(d => d.kind == "audiooutput"));

Alteração das rotas de saída de áudio

Quando uma chamada é criada, o Vonage Client SDK criará um HTMLAudioElement e anexar o fluxo de saída da chamada ao seu srcObject. Você pode acessar o elemento de áudio da seguinte maneira:

const audioOutputElement = client.getAudioOutputElement();

O HTMLAudioElement possui um método chamado setSinkId o que levará ao deviceId e use isso para definir o dispositivo de saída de áudio desejado como o HTMLAudioElement fonte:

audioElement.setSinkId(audioOutputDevices[2].deviceId);

NOTA: O setSinkId Esse método não é compatível com o Safari e com algumas versões mais antigas do navegador. Veja o tabela de compatibilidade para saber as versões exatas.

Referência