Compartilhar via


Diagnóstico voltado para o usuário

Ao trabalhar com chamadas nos Serviços de Comunicação do Azure, você pode encontrar problemas que afetam seus clientes. Para ajudar nisso, os Serviços de Comunicação do Azure fornecem um recurso chamado "UFD (Diagnóstico Voltado para o Usuário") que pode ser usado para examinar várias propriedades de uma chamada para determinar qual pode ser o problema. Os Diagnósticos Voltados para o Usuário são eventos que são disparados e que podem indicar devido a algum problema subjacente (rede ruim, o usuário tem o microfone silenciado) que um usuário pode ter uma experiência ruim. Depois que um Diagnóstico Voltado para o Usuário for acionado, você deve considerar dar comentários a um usuário final de que ele pode estar tendo algum problema subjacente. No entanto, a saída do Diagnóstico Voltado para o Usuário é apenas informativa e a pilha de chamadas não faz alterações com base em um Diagnóstico Voltado para o Usuário que está sendo acionado.

Valores de diagnóstico

Os seguintes diagnósticos voltados para o usuário estão disponíveis:

Valores de rede

Nome Descrição Valores possíveis Casos de uso Etapas de mitigação
noNetwork Não há rede disponível. - Defina como True quando uma chamada não é iniciada porque não há rede disponível.
– Definido como False quando houver candidatos ICE presentes.
O dispositivo não está conectado a uma rede. Verifique se a chamada tenha uma conexão de Internet confiável que possa sustentar uma chamada de voz. Para obter mais informações, consulte a seção Otimização de rede.
networkRelaysNotReachable Problemas com uma rede. - Defina como True quando a rede tem alguma restrição que não está permitindo que você alcance retransmissões dos Serviços de Comunicação do Azure.
– Definido como False ao fazer uma nova chamada.
Durante uma chamada quando o sinal Wi-Fi liga e desliga. Verifique se as regras de firewall e o roteamento de rede permitem que o cliente alcance os servidores de turno da Microsoft. Para obter mais informações, confira a seção Configuração de firewall.
networkReconnect A conexão foi perdida e estamos nos reconectando à rede. - Definir paraBad quando a rede é desconectada
- Definido para Poorquando a conectividade de transporte de mídia é perdida
– Definido como Good quando uma nova sessão estiver conectada.
Baixa largura de banda, sem Internet Verifique se a chamada tenha uma conexão de Internet confiável que possa sustentar uma chamada de voz. Para obter mais informações, consulte a seção Requisito de largura de banda de rede.
networkReceiveQuality Um indicador sobre a qualidade do fluxo de entrada. - Defina paraBad quando há um problema grave com o recebimento do fluxo.
- Defina para Poor quando houver um problema leve com o recebimento do fluxo.
- Defina para Good quando não há nenhum problema com o recebimento do fluxo.
Baixa largura de banda Verifique se a chamada tenha uma conexão de Internet confiável que possa sustentar uma chamada de voz. Para obter mais informações, consulte a seção Requisito de largura de banda de rede. Sugira que o usuário final desligue a câmera para economizar a largura de banda de internet disponível.
networkSendQuality Um indicador sobre a qualidade do fluxo de saída. - Defina paraBad quando houver um problema grave com o envio do fluxo.
- Defina para Poor quando houver um problema leve com o envio do fluxo.
- Defina para Good quando não há problema com o envio do fluxo.
Baixa largura de banda Verifique se a chamada tenha uma conexão de Internet confiável que possa sustentar uma chamada de voz. Para obter mais informações, consulte a seção Requisito de largura de banda de rede. Além disso, sugira que o usuário final desligue sua câmera para economizar a largura de banda de internet disponível.

Valores de áudio

Nome Descrição Valores possíveis Casos de uso Etapas de mitigação
noSpeakerDevicesEnumerated Não há nenhum dispositivo de saída de áudio (alto-falante) no sistema do usuário. – Definido como True quando não há dispositivos de alto-falante no sistema e há suporte para a seleção de alto-falante.
- Defina para False quando há pelo menos um dispositivo de alto-falante no sistema, e a seleção de alto-falante é suportada.
Todos os alto-falantes estão desconectados Quando o valor definido como True, considere notificar visualmente o usuário final de que sua sessão de chamada atual não tem alto-falantes disponíveis.
speakingWhileMicrophoneIsMuted Falando enquanto o mudo está ativado. – Definido como True quando o microfone local está no mudo e o usuário local está falando.
– Definido como False quando o usuário local para de falar ou não desativa o mudo.
* Observação: atualmente, essa opção não tem suporte no Safari porque as amostras de nível de áudio são obtidas de estatísticas de WebRTC.
Durante uma chamada, ative o mudo e fale no microfone. Quando o valor definido para considerar a notificação visual para True o usuário final de que ele pode estar falando e não perceber que seu áudio está mudo.
noMicrophoneDevicesEnumerated Nenhum dispositivo de captura de áudio (microfone) no sistema do usuário – Definido como True quando não houver dispositivos de microfone no sistema.
- Defina como False quando houver pelo menos um dispositivo de microfone no sistema.
Todos os microfones são desconectados durante a chamada. Quando o valor definido para True considerar a notificação visual ao usuário final de que sua sessão de chamada atual não tem um microfone. Para obter mais informações, consulte a seção Habilitar microfone do manjedoura do dispositivo.
microphoneNotFunctioning O microfone não está funcionando. – Definido como True quando o envio de áudio local não for iniciado porque o dispositivo de microfone pode ter sido desabilitado no sistema ou está sendo usado por outro processo. Esse UFD leva cerca de 10 segundos para ser gerado.
- Definido como False quando o microfone começa a enviar o fluxo de áudio com êxito novamente.
Nenhum microfone disponível, acesso ao microfone desabilitado em um sistema Quando o valor definido para True notificar visualmente o usuário final de que há um problema com o microfone.
microphoneMuteUnexpectedly O microfone está no mudo - Definido como True quando o microfone ativa o mudo inesperadamente.
- Definido como False quando o microfone começa a enviar o fluxo de áudio com êxito
O microfone está mudo no sistema. A maioria dos casos acontece quando o usuário está em uma chamada dos Serviços de Comunicação do Azure em um dispositivo móvel e chega uma chamada telefônica. Na maioria dos casos, o sistema operacional silencia a chamada dos Serviços de Comunicação do Azure para que um usuário possa atender a chamada telefônica. Quando o valor é definido como True, notifica visualmente o usuário final de que sua chamada foi silenciada porque uma chamada telefônica foi recebida. Para obter mais informações, consulte a seção Como lidar melhor com o silenciamento do sistema operacional em uma chamada dos Serviços de Comunicação do Azure para obter mais detalhes.
microphonePermissionDenied há baixo volume do dispositivo ou é quase silencioso no macOS. - Defina como True quando a permissão de áudio é negada nas configurações do sistema (áudio).
- Definido como na False aquisição de fluxo bem-sucedida.
Observação: esse diagnóstico só funciona no macOS.
As permissões de microfone estão desabilitadas nas Configurações. Quando value é definido como True, notifique visualmente o usuário final de que ele não habilitou a permissão para usar o microfone para uma chamada dos Serviços de Comunicação do Azure.

Valores de câmera

Nome Descrição Valores possíveis Casos de uso Etapas de mitigação
cameraFreeze A câmera para de produzir quadros por mais de 5 segundos. - Definido como True quando o fluxo de vídeo local está congelado. Esse diagnóstico significa que o lado remoto está vendo seu vídeo congelado na tela ou significa que os participantes remotos não estão renderizando seu vídeo na tela.
– Definido como False quando o congelamento termina e os usuários podem ver seu vídeo normalmente.
A câmera foi perdida durante a chamada ou uma rede ruim fez com que a câmera congelasse. Quando o valor estiver definido como True, considere notificar o usuário final de que a rede de participantes remotos pode estar ruim - possivelmente sugira que eles desliguem a câmera para economizar largura de banda. Para obter mais informações, consulte Seção de requisito de largura de banda de rede sobre as habilidades necessárias da Internet para uma chamada dos Serviços de Comunicação do Azure.
cameraStartFailed Falha genérica de câmera. – Definido como True quando o envio de vídeo local não for iniciado porque o dispositivo de câmera pode ter sido desabilitado no sistema ou está sendo usado por outro processo.
– Definido como False quando o dispositivo de câmera selecionado envia novamente com êxito o vídeo local.
Falhas de câmera Quando o valor é definido como True, notifica o usuário final de que a câmera não foi iniciada.
cameraStartTimedOut Cenário comum em que a câmera está em mau estado. - Definido como True quando o dispositivo de câmera atingir tempo limite para começar a enviar o fluxo de vídeo.
– Definido como False quando o dispositivo de câmera selecionado envia novamente com êxito o vídeo local.
Falhas de câmera Quando o valor é definido como True, notifique o usuário final de que sua câmera possivelmente está tendo problemas. (Quando o valor é definido de volta para False remover a notificação).
cameraPermissionDenied As permissões da câmera foram negadas nas configurações. - Defina como True quando a permissão da câmera é negada nas configurações do sistema (vídeo).
- Definido como na False aquisição de fluxo bem-sucedida.
Observação: esse diagnóstico só funciona no macOS Chrome.
As permissões de câmera estão desabilitadas nas configurações. Quando value é definido como True, notifique visualmente o usuário final de que ele não habilitou a permissão para usar a câmera para uma chamada dos Serviços de Comunicação do Azure.
cameraStoppedUnexpectedly Mau funcionamento da câmera – Definido como True quando a câmera entra em estado parado inesperadamente.
– Definido como False quando a câmera começa a enviar o fluxo de vídeo com êxito novamente.
Verificar se a câmera está funcionando corretamente. Quando o valor é definido como True, notifique o usuário final de que sua câmera possivelmente está tendo problemas. (Quando o valor é definido de volta para False remover a notificação).

Valores diversos

Nome Descrição Valores possíveis Casos de uso Etapas de mitigação
screenshareRecordingDisabled O compartilhamento de tela do sistema foi negado nas preferências em Configurações. - Defina para True quando a permissão de compartilhamento de tela é negada nas configurações do sistema (compartilhamento).
- Definido como na False aquisição de fluxo bem-sucedida.
Observação: esse diagnóstico só funciona no macOS.Chrome.
A gravação de tela está desabilitada nas Configurações. Quando value é definido como True, notifique visualmente o usuário final de que ele não habilitou a permissão para compartilhar sua tela para uma chamada dos Serviços de Comunicação do Azure.
capturerStartFailed Falha no compartilhamento da tela do sistema. – Definido como True quando há falha ao iniciar a captura da tela.
– Definido como False quando a captura da tela pode ser iniciada com êxito.
Quando o valor é definido como True, notifica visualmente o usuário final de que possivelmente houve um problema ao compartilhar a tela. (Quando o valor é definido de volta para False, remova a notificação).
capturerStoppedUnexpectedly Mau funcionamento do compartilhamento da tela do sistema – Definido como True quando o capturador de tela entra em estado parado inesperadamente.
– Definido como False quando o capturador de tela começa a capturar com êxito novamente.
Verificar se o compartilhamento de tela está funcionando corretamente Quando value é definido como True, notifique o usuário final de que possivelmente há um problema que faz com que o compartilhamento da tela pare. (Quando o valor é definido de volta para False remover a notificação).

Acessar diagnóstico

O diagnóstico voltado para o usuário é um recurso estendido da API Call principal e permite diagnosticar uma chamada ativa.

const userFacingDiagnostics = call.feature(Features.UserFacingDiagnostics);

Eventos de diagnóstico voltado para o usuário

  • Assine o evento diagnosticChanged para monitorar quando qualquer diagnóstico voltado ao usuário for alterado.
/**
 *  Each diagnostic has the following data:
 * - diagnostic is the type of diagnostic, e.g. NetworkSendQuality, DeviceSpeakWhileMuted, etc...
 * - value is DiagnosticQuality or DiagnosticFlag:
 *     - DiagnosticQuality = enum { Good = 1, Poor = 2, Bad = 3 }.
 *     - DiagnosticFlag = true | false.
 * - valueType = 'DiagnosticQuality' | 'DiagnosticFlag'
 */
const diagnosticChangedListener = (diagnosticInfo: NetworkDiagnosticChangedEventArgs | MediaDiagnosticChangedEventArgs) => {
    console.log(`Diagnostic changed: ` +
        `Diagnostic: ${diagnosticInfo.diagnostic}` +
        `Value: ${diagnosticInfo.value}` +
        `Value type: ${diagnosticInfo.valueType}`);

    if (diagnosticInfo.valueType === 'DiagnosticQuality') {
        if (diagnosticInfo.value === DiagnosticQuality.Bad) {
            console.error(`${diagnosticInfo.diagnostic} is bad quality`);

        } else if (diagnosticInfo.value === DiagnosticQuality.Poor) {
            console.error(`${diagnosticInfo.diagnostic} is poor quality`);
        }

    } else if (diagnosticInfo.valueType === 'DiagnosticFlag') {
        if (diagnosticInfo.value === true) {
            console.error(`${diagnosticInfo.diagnostic}`);
        }
    }
};

userFacingDiagnostics.network.on('diagnosticChanged', diagnosticChangedListener);
userFacingDiagnostics.media.on('diagnosticChanged', diagnosticChangedListener);

Obter os mais recentes diagnósticos voltados para o usuário

  • Obtenha os valores de diagnóstico mais recentes gerados. Se um diagnóstico for indefinido, é porque ele nunca foi gerado.
const latestNetworkDiagnostics = userFacingDiagnostics.network.getLatest();

console.log(
  `noNetwork: ${latestNetworkDiagnostics.noNetwork.value}, ` +
    `value type = ${latestNetworkDiagnostics.noNetwork.valueType}`
);

console.log(
  `networkReconnect: ${latestNetworkDiagnostics.networkReconnect.value}, ` +
    `value type = ${latestNetworkDiagnostics.networkReconnect.valueType}`
);

console.log(
  `networkReceiveQuality: ${latestNetworkDiagnostics.networkReceiveQuality.value}, ` +
    `value type = ${latestNetworkDiagnostics.networkReceiveQuality.valueType}`
);

const latestMediaDiagnostics = userFacingDiagnostics.media.getLatest();

console.log(
  `speakingWhileMicrophoneIsMuted: ${latestMediaDiagnostics.speakingWhileMicrophoneIsMuted.value}, ` +
    `value type = ${latestMediaDiagnostics.speakingWhileMicrophoneIsMuted.valueType}`
);

console.log(
  `cameraStartFailed: ${latestMediaDiagnostics.cameraStartFailed.value}, ` +
    `value type = ${latestMediaDiagnostics.cameraStartFailed.valueType}`
);

console.log(
  `microphoneNotFunctioning: ${latestMediaDiagnostics.microphoneNotFunctioning.value}, ` +
    `value type = ${latestMediaDiagnostics.microphoneNotFunctioning.valueType}`
);

Valores de diagnóstico

Os seguintes diagnósticos voltados para o usuário estão disponíveis:

Valores de rede

Nome Descrição Valores possíveis Casos de uso Etapas de mitigação
redeIndisponível Não há rede disponível. - Defina como True quando uma chamada não é iniciada porque não há rede disponível.
– Definido como False quando houver candidatos ICE presentes.
O dispositivo não está conectado a uma rede. Verifique se a chamada tenha uma conexão de Internet confiável que possa sustentar uma chamada de voz. Para obter mais informações, consulte a seção Otimização de rede.
networkRelaysInalcançável Problemas com uma rede. - Defina como True quando a rede tem alguma restrição que não está permitindo que você alcance retransmissões dos Serviços de Comunicação do Azure.
– Definido como False ao fazer uma nova chamada.
Durante uma chamada quando o sinal Wi-Fi liga e desliga. Verifique se as regras de firewall e o roteamento de rede permitem que o cliente alcance os servidores de turno da Microsoft. Para obter mais informações, confira a seção Configuração de firewall.
redeReconexãoQualidade A conexão foi perdida e estamos nos reconectando à rede. - Definir paraBad quando a rede é desconectada
- Definido para Poorquando a conectividade de transporte de mídia é perdida
– Definido como Good quando uma nova sessão estiver conectada.
Baixa largura de banda, sem Internet Verifique se a chamada tenha uma conexão de Internet confiável que possa sustentar uma chamada de voz. Para obter mais informações, consulte a seção Requisito de largura de banda de rede.
networkReceiveQuality Um indicador sobre a qualidade do fluxo de entrada. - Defina paraBad quando há um problema grave com o recebimento do fluxo.
- Defina para Poor quando houver um problema leve com o recebimento do fluxo.
- Defina para Good quando não há nenhum problema com o recebimento do fluxo.
- Só é visível se houver um fluxo de áudio ativo na chamada, o que significa que um participante está falando ativamente por um período de tempo.
Baixa largura de banda Verifique se a chamada tenha uma conexão de Internet confiável que possa sustentar uma chamada de voz. Para obter mais informações, consulte a seção Requisito de largura de banda de rede. Sugira que o usuário final desligue a câmera para economizar a largura de banda de internet disponível.
networkSendQuality Um indicador sobre a qualidade do fluxo de saída. - Defina paraBad quando houver um problema grave com o envio do fluxo.
- Defina para Poor quando houver um problema leve com o envio do fluxo.
- Defina para Good quando não há problema com o envio do fluxo.
- Semelhante ao diagnóstico de qualidade, ele só é visível se houver um fluxo de áudio ativo na chamada, o que significa que um participante está falando ativamente por um período de tempo. Mas, ele só funciona em uma chamada 1:1, pois depende de informações do outro lado para verificar a qualidade. Onde o outro lado tem que sinalizar os dados que foram recebidos.
Baixa largura de banda Verifique se a chamada tenha uma conexão de Internet confiável que possa sustentar uma chamada de voz. Para obter mais informações, consulte a seção Requisito de largura de banda de rede. Além disso, sugira que o usuário final desligue sua câmera para economizar a largura de banda de internet disponível.

Valores de áudio

Nome Descrição Valores possíveis Casos de uso Etapas de mitigação
noSpeakerDevicesAvailable Não há nenhum dispositivo de saída de áudio (alto-falante) no sistema do usuário. – Definido como True quando não há dispositivos de alto-falante no sistema e há suporte para a seleção de alto-falante.
- Defina para False quando há pelo menos um dispositivo de alto-falante no sistema, e a seleção de alto-falante é suportada.
Todos os alto-falantes estão desconectados Quando o valor definido como True, considere notificar visualmente o usuário final de que sua sessão de chamada atual não tem alto-falantes disponíveis.
speakingWhileMicrophoneIsMuted Falando enquanto o mudo está ativado. – Definido como True quando o microfone local está no mudo e o usuário local está falando.
– Definido como False quando o usuário local para de falar ou não desativa o mudo.
- Este evento de diagnóstico pode ser desativado automaticamente se for acionado por um determinado período de vezes sem qualquer ação do usuário para evitar ruídos e proporcionar uma melhor experiência ao usuário. Ele será reativado novamente quando ocorrer uma nova ação de mudo.
Durante uma chamada, ative o mudo e fale no microfone. Quando o valor definido para considerar a notificação visual para True o usuário final de que ele pode estar falando e não perceber que seu áudio está mudo.
noMicrophoneDevicesAvailable Nenhum dispositivo de captura de áudio (microfone) no sistema do usuário – Definido como True quando não houver dispositivos de microfone no sistema.
- Defina como False quando houver pelo menos um dispositivo de microfone no sistema.
Todos os microfones são desconectados durante a chamada. Quando o valor definido para True considerar a notificação visual ao usuário final de que sua sessão de chamada atual não tem um microfone. Para obter mais informações, consulte a seção Habilitar microfone do manjedoura do dispositivo.
microphoneNotFunctioning O microfone não está funcionando. - Defina como True quando não conseguimos iniciar o envio de fluxo de áudio local porque o dispositivo de microfone pode ter sido desativado no sistema ou está sendo usado por outro processo. Esse UFD leva cerca de 10 segundos para ser gerado.
- Definido como False quando o microfone começa a enviar o fluxo de áudio com êxito novamente.
Nenhum microfone disponível, acesso ao microfone desabilitado em um sistema Quando o valor definido para True notificar visualmente o usuário final de que há um problema com o microfone.
microphoneMuteUnexpectedly O microfone está no mudo - Definido como True quando o microfone ativa o mudo inesperadamente.
- Definido como False quando o microfone começa a enviar o fluxo de áudio com êxito
O microfone está mudo no sistema. A maioria dos casos acontece quando o usuário está em uma chamada dos Serviços de Comunicação do Azure em um dispositivo móvel e chega uma chamada telefônica. Na maioria dos casos, o sistema operacional silencia a chamada dos Serviços de Comunicação do Azure para que um usuário possa atender a chamada telefônica. Quando o valor é definido como True, notifica visualmente o usuário final de que sua chamada foi silenciada porque uma chamada telefônica foi recebida. Para obter mais informações, consulte a seção Como lidar melhor com o silenciamento do sistema operacional em uma chamada dos Serviços de Comunicação do Azure para obter mais detalhes.
microphonePermissionDenied há baixo volume do dispositivo ou é quase silencioso no macOS. - Defina como True quando a permissão de áudio é negada nas configurações do sistema (áudio).
- Definido como na False aquisição de fluxo bem-sucedida.
Observação: esse diagnóstico só funciona no macOS.
As permissões de microfone estão desabilitadas nas Configurações. Quando value é definido como True, notifique visualmente o usuário final de que ele não habilitou a permissão para usar o microfone para uma chamada dos Serviços de Comunicação do Azure.

Valores de câmera

Nome Descrição Valores possíveis Casos de uso Etapas de mitigação
câmeraFrozen A câmera para de produzir quadros por mais de 5 segundos. - Definido como True quando o fluxo de vídeo local está congelado. Esse diagnóstico significa que o lado remoto está vendo seu vídeo congelado na tela ou significa que os participantes remotos não estão renderizando seu vídeo na tela.
– Definido como False quando o congelamento termina e os usuários podem ver seu vídeo normalmente.
A câmera foi perdida durante a chamada ou uma rede ruim fez com que a câmera congelasse. Quando o valor estiver definido como True, considere notificar o usuário final de que a rede de participantes remotos pode estar ruim - possivelmente sugira que eles desliguem a câmera para economizar largura de banda. Para obter mais informações, consulte Seção de requisito de largura de banda de rede sobre as habilidades necessárias da Internet para uma chamada dos Serviços de Comunicação do Azure.
cameraStartFailed Falha genérica de câmera. - Definido para True quando não conseguimos iniciar o envio de vídeo local porque o dispositivo da câmera pode ter sido desativado no sistema ou está sendo usado por outro processo ~.
– Definido como False quando o dispositivo de câmera selecionado envia novamente com êxito o vídeo local.
Falhas de câmera Quando o valor é definido como True, notifica o usuário final de que a câmera não foi iniciada.
cameraStartTimedOut Cenário comum em que a câmera está em mau estado. - Definido como True quando o dispositivo de câmera atingir tempo limite para começar a enviar o fluxo de vídeo.
– Definido como False quando o dispositivo de câmera selecionado envia novamente com êxito o vídeo local.
Falhas de câmera Quando o valor é definido como True, notifique o usuário final de que sua câmera possivelmente está tendo problemas. (Quando o valor é definido de volta para False remover a notificação).
cameraPermissionDenied As permissões da câmera foram negadas nas configurações. - Defina como True quando a permissão da câmera é negada nas configurações do sistema (vídeo).
- Definido como na False aquisição de fluxo bem-sucedida.
Observação: esse diagnóstico só funciona no macOS Chrome.
As permissões de câmera estão desabilitadas nas configurações. Quando value é definido como True, notifique visualmente o usuário final de que ele não habilitou a permissão para usar a câmera para uma chamada dos Serviços de Comunicação do Azure.
cameraStoppedUnexpectedly Mau funcionamento da câmera – Definido como True quando a câmera entra em estado parado inesperadamente.
– Definido como False quando a câmera começa a enviar o fluxo de vídeo com êxito novamente.
Verificar se a câmera está funcionando corretamente. Quando o valor é definido como True, notifique o usuário final de que sua câmera possivelmente está tendo problemas. (Quando o valor é definido de volta para False remover a notificação).

Apenas nativo

Nome Descrição Valores possíveis Casos de uso Etapas de mitigação
alto-falanteVolumeIsZero Volume zero em um dispositivo (alto-falante). - Defina para True quando o volume do alto-falante é zero.
- Defina como False quando o volume do alto-falante não for zero.
Não ouvir o áudio dos participantes de plantão. Quando o valor é definido como True, você pode ter acidentalmente o volume em lowest(zero).
alto-falanteMudo O dispositivo de alto-falante está mudo. - Defina para True quando o dispositivo de alto-falante estiver mudo.
- Defina como False quando o dispositivo de alto-falante não estiver mudo.
Não ouvir o áudio dos participantes de plantão. Quando value é definido como True, você pode ter silenciado acidentalmente o alto-falante.
alto-falanteOcupado Alto-falante já está em uso. Ou o dispositivo está sendo usado no modo exclusivo, ou o dispositivo está sendo usado no modo compartilhado e o chamador pediu para usar o dispositivo no modo exclusivo. - Defina para True quando a aquisição de fluxo do dispositivo de alto-falante expira (áudio).
- Defina para quando a False aquisição do alto-falante for bem-sucedida.
Não ouvir áudio dos participantes de plantão através de alto-falante. Quando value estiver definido como True, notifique o usuário visual para que ele possa verificar se outro aplicativo está usando o alto-falante e tentar fechá-lo.
speakerNotFunctioning O alto-falante não está funcionando (falha ao inicializar o dispositivo de áudio, o cliente ou o dispositivo ficou inativo por mais de 5 segundos) - Defina como quando o True alto-falante não estiver disponível ou o tempo limite de aquisição de fluxo do dispositivo (áudio).
- Defina para quando a False aquisição do alto-falante for bem-sucedida.
Não ouvir áudio dos participantes de plantão através de alto-falante. Tente verificar o estado do dispositivo de alto-falante.
microfoneOcupado O microfone já está em uso. Ou o dispositivo está sendo usado no modo exclusivo, ou o dispositivo está sendo usado no modo compartilhado e o chamador pediu para usar o dispositivo no modo exclusivo. - Defina para True quando a aquisição de fluxo do dispositivo de microfone expira (áudio).
- Defina para quando a False aquisição do microfone for bem-sucedida.
Seu áudio não alcança outros participantes da chamada. Quando o valor é definido como True, notifique o usuário final para que ele possa verificar se outro aplicativo está usando o microfone e tentar fechá-lo.

Acessar diagnóstico

O diagnóstico voltado para o usuário é um recurso estendido da API Call principal e permite diagnosticar uma chamada ativa.

DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);

Eventos de diagnóstico voltado para o usuário

  • Obtenha o objeto de recurso e adicione ouvintes aos eventos de diagnóstico.
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);

/* NetworkDiagnostic */
FlagDiagnosticChangedListener listener = (FlagDiagnosticChangedEvent args) -> {
  Boolean mediaValue = args.getValue();
  // Handle new value for no network diagnostic.
};

NetworkDiagnostics networkDiagnostics = diagnosticsCallFeature.getNetworkDiagnostics();
networkDiagnostics.addOnNetworkUnreachableChangedListener(listener);

// To remove listener for network quality event
networkDiagnostics.removeOnNetworkUnreachableChangedListener(listener);

// Quality Diagnostics
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);
QualityDiagnosticChangedListener listener = (QualityDiagnosticChangedEvent args) -> {
  DiagnosticQuality diagnosticQuality = args.getValue();
  // Handle new value for network reconnect diagnostic.
};

NetworkDiagnostics networkDiagnostics = diagnosticsCallFeature.getNetworkDiagnostics();
networkDiagnostics.addOnNetworkReconnectionQualityChangedListener(listener);

// To remove listener for media flag event
networkDiagnostics.removeOnNetworkReconnectionQualityChangedListener(listener);

/* MediaDiagnostic */
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);
FlagDiagnosticChangedListener listener = (FlagDiagnosticChangedEvent args) -> {
  Boolean mediaValue = args.getValue();
  // Handle new value for speaker not functioning diagnostic.
};

MediaDiagnostics mediaDiagnostics = diagnosticsCallFeature.getMedia();
mediaDiagnostics.addOnIsSpeakerNotFunctioningChangedListener(listener);

// To remove listener for media flag event
mediaDiagnostics.removeOnIsSpeakerNotFunctioningChangedListener(listener);

Obter os mais recentes diagnósticos voltados para o usuário

  • Obtenha os valores de diagnóstico mais recentes que foram gerados na chamada atual. Se ainda não recebemos um valor para o diagnóstico, uma exceção é lançada.
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);
NetworkDiagnostics networkDiagnostics = diagnosticsCallFeature.getNetwork();
MediaDiagnostics mediaDiagnostics = diagnosticsCallFeature.getMedia();

NetworkDiagnosticValues latestNetwork = networkDiagnostics.getLatestDiagnostics();
Boolean lastNetworkValue = latestNetwork.isNetworkUnavailable(); // null if there isn't a value for this diagnostic.
DiagnosticQuality lastReceiveQualityValue = latestNetwork.getNetworkReceiveQuality(); //  UNKNOWN if there isn't a value for this diagnostic.

MediaDiagnosticValues latestMedia = networkDiagnostics.getLatestDiagnostics();
Boolean lastSpeakerNotFunctionValue = latestMedia.isSpeakerNotFunctioning(); // null if there isn't a value for this diagnostic.

// Use the last values ...

Valores de diagnóstico

Os seguintes diagnósticos voltados para o usuário estão disponíveis:

Valores de rede

Nome Descrição Valores possíveis Casos de uso Etapas de mitigação
redeIndisponível Não há rede disponível. - Defina como True quando uma chamada não é iniciada porque não há rede disponível.
– Definido como False quando houver candidatos ICE presentes.
O dispositivo não está conectado a uma rede. Verifique se a chamada tenha uma conexão de Internet confiável que possa sustentar uma chamada de voz. Para obter mais informações, consulte a seção Otimização de rede.
networkRelaysInalcançável Problemas com uma rede. - Defina como True quando a rede tem alguma restrição que não está permitindo que você alcance retransmissões dos Serviços de Comunicação do Azure.
– Definido como False ao fazer uma nova chamada.
Durante uma chamada quando o sinal Wi-Fi liga e desliga. Verifique se as regras de firewall e o roteamento de rede permitem que o cliente alcance os servidores de turno da Microsoft. Para obter mais informações, confira a seção Configuração de firewall.
redeReconexãoQualidade A conexão foi perdida e estamos nos reconectando à rede. - Definir paraBad quando a rede é desconectada
- Definido para Poorquando a conectividade de transporte de mídia é perdida
– Definido como Good quando uma nova sessão estiver conectada.
Baixa largura de banda, sem Internet Verifique se a chamada tenha uma conexão de Internet confiável que possa sustentar uma chamada de voz. Para obter mais informações, consulte a seção Requisito de largura de banda de rede.
networkReceiveQuality Um indicador sobre a qualidade do fluxo de entrada. - Defina paraBad quando há um problema grave com o recebimento do fluxo.
- Defina para Poor quando houver um problema leve com o recebimento do fluxo.
- Defina para Good quando não há nenhum problema com o recebimento do fluxo.
- Só é visível se houver um fluxo de áudio ativo na chamada, o que significa que um participante está falando ativamente por um período de tempo.
Baixa largura de banda Verifique se a chamada tenha uma conexão de Internet confiável que possa sustentar uma chamada de voz. Para obter mais informações, consulte a seção Requisito de largura de banda de rede. Sugira que o usuário final desligue a câmera para economizar a largura de banda de internet disponível.
networkSendQuality Um indicador sobre a qualidade do fluxo de saída. - Defina paraBad quando houver um problema grave com o envio do fluxo.
- Defina para Poor quando houver um problema leve com o envio do fluxo.
- Defina para Good quando não há problema com o envio do fluxo.
- Semelhante ao diagnóstico de qualidade, ele só é visível se houver um fluxo de áudio ativo na chamada, o que significa que um participante está falando ativamente por um período de tempo. Mas, ele só funciona em uma chamada 1:1, pois depende de informações do outro lado para verificar a qualidade. Onde o outro lado tem que sinalizar os dados que foram recebidos.
Baixa largura de banda Verifique se a chamada tenha uma conexão de Internet confiável que possa sustentar uma chamada de voz. Para obter mais informações, consulte a seção Requisito de largura de banda de rede. Além disso, sugira que o usuário final desligue sua câmera para economizar a largura de banda de internet disponível.

Valores de áudio

Nome Descrição Valores possíveis Casos de uso Etapas de mitigação
noSpeakerDevicesAvailable Não há nenhum dispositivo de saída de áudio (alto-falante) no sistema do usuário. – Definido como True quando não há dispositivos de alto-falante no sistema e há suporte para a seleção de alto-falante.
- Defina para False quando há pelo menos um dispositivo de alto-falante no sistema, e a seleção de alto-falante é suportada.
Todos os alto-falantes estão desconectados Quando o valor definido como True, considere notificar visualmente o usuário final de que sua sessão de chamada atual não tem alto-falantes disponíveis.
speakingWhileMicrophoneIsMuted Falando enquanto o mudo está ativado. – Definido como True quando o microfone local está no mudo e o usuário local está falando.
– Definido como False quando o usuário local para de falar ou não desativa o mudo.
- Este evento de diagnóstico pode ser desativado automaticamente se for acionado por um determinado período de vezes sem qualquer ação do usuário para evitar ruídos e proporcionar uma melhor experiência ao usuário. Ele será reativado novamente quando ocorrer uma nova ação de mudo.
Durante uma chamada, ative o mudo e fale no microfone. Quando o valor definido para considerar a notificação visual para True o usuário final de que ele pode estar falando e não perceber que seu áudio está mudo.
noMicrophoneDevicesAvailable Nenhum dispositivo de captura de áudio (microfone) no sistema do usuário – Definido como True quando não houver dispositivos de microfone no sistema.
- Defina como False quando houver pelo menos um dispositivo de microfone no sistema.
Todos os microfones são desconectados durante a chamada. Quando o valor definido para True considerar a notificação visual ao usuário final de que sua sessão de chamada atual não tem um microfone. Para obter mais informações, consulte a seção Habilitar microfone do manjedoura do dispositivo.
microphoneNotFunctioning O microfone não está funcionando. - Defina como True quando não conseguimos iniciar o envio de fluxo de áudio local porque o dispositivo de microfone pode ter sido desativado no sistema ou está sendo usado por outro processo. Esse UFD leva cerca de 10 segundos para ser gerado.
- Definido como False quando o microfone começa a enviar o fluxo de áudio com êxito novamente.
Nenhum microfone disponível, acesso ao microfone desabilitado em um sistema Quando o valor definido para True notificar visualmente o usuário final de que há um problema com o microfone.
microphoneMuteUnexpectedly O microfone está no mudo - Definido como True quando o microfone ativa o mudo inesperadamente.
- Definido como False quando o microfone começa a enviar o fluxo de áudio com êxito
O microfone está mudo no sistema. A maioria dos casos acontece quando o usuário está em uma chamada dos Serviços de Comunicação do Azure em um dispositivo móvel e chega uma chamada telefônica. Na maioria dos casos, o sistema operacional silencia a chamada dos Serviços de Comunicação do Azure para que um usuário possa atender a chamada telefônica. Quando o valor é definido como True, notifica visualmente o usuário final de que sua chamada foi silenciada porque uma chamada telefônica foi recebida. Para obter mais informações, consulte a seção Como lidar melhor com o silenciamento do sistema operacional em uma chamada dos Serviços de Comunicação do Azure para obter mais detalhes.
microphonePermissionDenied há baixo volume do dispositivo ou é quase silencioso no macOS. - Defina como True quando a permissão de áudio é negada nas configurações do sistema (áudio).
- Definido como na False aquisição de fluxo bem-sucedida.
Observação: esse diagnóstico só funciona no macOS.
As permissões de microfone estão desabilitadas nas Configurações. Quando value é definido como True, notifique visualmente o usuário final de que ele não habilitou a permissão para usar o microfone para uma chamada dos Serviços de Comunicação do Azure.

Valores de câmera

Nome Descrição Valores possíveis Casos de uso Etapas de mitigação
câmeraFrozen A câmera para de produzir quadros por mais de 5 segundos. - Definido como True quando o fluxo de vídeo local está congelado. Esse diagnóstico significa que o lado remoto está vendo seu vídeo congelado na tela ou significa que os participantes remotos não estão renderizando seu vídeo na tela.
– Definido como False quando o congelamento termina e os usuários podem ver seu vídeo normalmente.
A câmera foi perdida durante a chamada ou uma rede ruim fez com que a câmera congelasse. Quando o valor estiver definido como True, considere notificar o usuário final de que a rede de participantes remotos pode estar ruim - possivelmente sugira que eles desliguem a câmera para economizar largura de banda. Para obter mais informações, consulte Seção de requisito de largura de banda de rede sobre as habilidades necessárias da Internet para uma chamada dos Serviços de Comunicação do Azure.
cameraStartFailed Falha genérica de câmera. - Definido para True quando não conseguimos iniciar o envio de vídeo local porque o dispositivo da câmera pode ter sido desativado no sistema ou está sendo usado por outro processo ~.
– Definido como False quando o dispositivo de câmera selecionado envia novamente com êxito o vídeo local.
Falhas de câmera Quando o valor é definido como True, notifica o usuário final de que a câmera não foi iniciada.
cameraStartTimedOut Cenário comum em que a câmera está em mau estado. - Definido como True quando o dispositivo de câmera atingir tempo limite para começar a enviar o fluxo de vídeo.
– Definido como False quando o dispositivo de câmera selecionado envia novamente com êxito o vídeo local.
Falhas de câmera Quando o valor é definido como True, notifique o usuário final de que sua câmera possivelmente está tendo problemas. (Quando o valor é definido de volta para False remover a notificação).
cameraPermissionDenied As permissões da câmera foram negadas nas configurações. - Defina como True quando a permissão da câmera é negada nas configurações do sistema (vídeo).
- Definido como na False aquisição de fluxo bem-sucedida.
Observação: esse diagnóstico só funciona no macOS Chrome.
As permissões de câmera estão desabilitadas nas configurações. Quando value é definido como True, notifique visualmente o usuário final de que ele não habilitou a permissão para usar a câmera para uma chamada dos Serviços de Comunicação do Azure.
cameraStoppedUnexpectedly Mau funcionamento da câmera – Definido como True quando a câmera entra em estado parado inesperadamente.
– Definido como False quando a câmera começa a enviar o fluxo de vídeo com êxito novamente.
Verificar se a câmera está funcionando corretamente. Quando o valor é definido como True, notifique o usuário final de que sua câmera possivelmente está tendo problemas. (Quando o valor é definido de volta para False remover a notificação).

Apenas nativo

Nome Descrição Valores possíveis Casos de uso Etapas de mitigação
alto-falanteVolumeIsZero Volume zero em um dispositivo (alto-falante). - Defina para True quando o volume do alto-falante é zero.
- Defina como False quando o volume do alto-falante não for zero.
Não ouvir o áudio dos participantes de plantão. Quando o valor é definido como True, você pode ter acidentalmente o volume em lowest(zero).
alto-falanteMudo O dispositivo de alto-falante está mudo. - Defina para True quando o dispositivo de alto-falante estiver mudo.
- Defina como False quando o dispositivo de alto-falante não estiver mudo.
Não ouvir o áudio dos participantes de plantão. Quando value é definido como True, você pode ter silenciado acidentalmente o alto-falante.
alto-falanteOcupado Alto-falante já está em uso. Ou o dispositivo está sendo usado no modo exclusivo, ou o dispositivo está sendo usado no modo compartilhado e o chamador pediu para usar o dispositivo no modo exclusivo. - Defina para True quando a aquisição de fluxo do dispositivo de alto-falante expira (áudio).
- Defina para quando a False aquisição do alto-falante for bem-sucedida.
Não ouvir áudio dos participantes de plantão através de alto-falante. Quando value estiver definido como True, notifique o usuário visual para que ele possa verificar se outro aplicativo está usando o alto-falante e tentar fechá-lo.
speakerNotFunctioning O alto-falante não está funcionando (falha ao inicializar o dispositivo de áudio, o cliente ou o dispositivo ficou inativo por mais de 5 segundos) - Defina como quando o True alto-falante não estiver disponível ou o tempo limite de aquisição de fluxo do dispositivo (áudio).
- Defina para quando a False aquisição do alto-falante for bem-sucedida.
Não ouvir áudio dos participantes de plantão através de alto-falante. Tente verificar o estado do dispositivo de alto-falante.
microfoneOcupado O microfone já está em uso. Ou o dispositivo está sendo usado no modo exclusivo, ou o dispositivo está sendo usado no modo compartilhado e o chamador pediu para usar o dispositivo no modo exclusivo. - Defina para True quando a aquisição de fluxo do dispositivo de microfone expira (áudio).
- Defina para quando a False aquisição do microfone for bem-sucedida.
Seu áudio não alcança outros participantes da chamada. Quando o valor é definido como True, notifique o usuário final para que ele possa verificar se outro aplicativo está usando o microfone e tentar fechá-lo.

Acessar diagnóstico

O diagnóstico voltado para o usuário é um recurso estendido da API Call principal e permite diagnosticar uma chamada ativa.

let userFacingDiagnostics = self.call?.feature(Features.localUserDiagnostics)

Eventos de diagnóstico voltado para o usuário

  • Implemente os delegados para media e network fontes de diagnóstico. MediaDiagnosticsDelegate e NetworkDiagnosticsDelegate, respectivamente.
extension CallObserver: MediaDiagnosticsDelegate {
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsCameraFrozen args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsSpeakerMuted args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsCameraStartFailed args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsSpeakerVolumeZero args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsSpeakerNotFunctioning args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsCameraPermissionDenied args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsMicrophoneNotFunctioning args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsCameraStartTimedOut args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsMicrophoneMutedUnexpectedly args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsZeroSpeakerDevicesAvailable args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...                            
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsZeroMicrophoneDevicesAvailable args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsSpeakingWhileMicrophoneIsMuted args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsSpeakerBusy args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func mediaDiagnostics(_ mediaDiagnostics: MediaDiagnostics,
                        didChangeIsMicrophoneBusy args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
}

extension CallObserver: NetworkDiagnosticsDelegate {
  func networkDiagnostics(_ networkDiagnostics: NetworkDiagnostics,
                          didChangeIsNetworkRelaysUnreachable args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func networkDiagnostics(_ networkDiagnostics: NetworkDiagnostics,
                          didChangeNetworkReconnectionQuality args: DiagnosticQualityChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func networkDiagnostics(_ networkDiagnostics: NetworkDiagnostics,
                          didChangeNetworkSendQuality args: DiagnosticQualityChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func networkDiagnostics(_ networkDiagnostics: NetworkDiagnostics,
                          didChangeIsNetworkUnavailable args: DiagnosticFlagChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
    
  func networkDiagnostics(_ networkDiagnostics: NetworkDiagnostics,
                          didChangeNetworkReceiveQuality args: DiagnosticQualityChangedEventArgs) {
    let newValue = args.value
    // Handle the diagnostic event value changed...
  }
}
  • Mantenha uma referência media e um diagnóstico e network defina o objeto delegado para ouvir eventos.
self.mediaDiagnostics = userFacingDiagnostics?.media
self.networkDiagnostics = userFacingDiagnostics?.network
self.mediaDiagnostics?.delegate = self.callObserver
self.networkDiagnostics?.delegate = self.callObserver

Observação

Se você ativou CallKit via SDK ou implementou a integração do CallKit em seu aplicativo, relatar o estado de mudo para o CallKit pode fazer com que o sistema operacional faça com que o aplicativo perca a retenção para o microfone devido a razões de privacidade, o que faria com que o evento não funcionasse como esperado porque não podemos capturar a entrada do dispositivo de microfone para detectar que o didIsSpeakingWhileMicrophoneIsMuted usuário está falando.

Obter os mais recentes diagnósticos voltados para o usuário

  • Obtenha os valores de diagnóstico mais recentes gerados. Se ainda não recebemos um valor para o diagnóstico, nil ou .unknown é devolvido.
let lastSpeakerNotFunctionValue = self.mediaDiagnostics.latest.isSpeakerNotFunctioning // Boolean?
let lastNetworkRelayNotReachableValue = self.networkDiagnostics.latest.networkRelaysUnreachable // Boolean?
let lastReceiveQualityValue = self.networkDiagnostics.latest.networkReceiveQuality // DiagnosticQuality (.good, .poor, .bad)
// or .unknown if there isn't a diagnostic for this.

Valores de diagnóstico

Os seguintes diagnósticos voltados para o usuário estão disponíveis:

Valores de rede

Nome Descrição Valores possíveis Casos de uso Etapas de mitigação
redeIndisponível Não há rede disponível. - Defina como True quando uma chamada não é iniciada porque não há rede disponível.
– Definido como False quando houver candidatos ICE presentes.
O dispositivo não está conectado a uma rede. Verifique se a chamada tenha uma conexão de Internet confiável que possa sustentar uma chamada de voz. Para obter mais informações, consulte a seção Otimização de rede.
networkRelaysInalcançável Problemas com uma rede. - Defina como True quando a rede tem alguma restrição que não está permitindo que você alcance retransmissões dos Serviços de Comunicação do Azure.
– Definido como False ao fazer uma nova chamada.
Durante uma chamada quando o sinal Wi-Fi liga e desliga. Verifique se as regras de firewall e o roteamento de rede permitem que o cliente alcance os servidores de turno da Microsoft. Para obter mais informações, confira a seção Configuração de firewall.
redeReconexãoQualidade A conexão foi perdida e estamos nos reconectando à rede. - Definir paraBad quando a rede é desconectada
- Definido para Poorquando a conectividade de transporte de mídia é perdida
– Definido como Good quando uma nova sessão estiver conectada.
Baixa largura de banda, sem Internet Verifique se a chamada tenha uma conexão de Internet confiável que possa sustentar uma chamada de voz. Para obter mais informações, consulte a seção Requisito de largura de banda de rede.
networkReceiveQuality Um indicador sobre a qualidade do fluxo de entrada. - Defina paraBad quando há um problema grave com o recebimento do fluxo.
- Defina para Poor quando houver um problema leve com o recebimento do fluxo.
- Defina para Good quando não há nenhum problema com o recebimento do fluxo.
- Só é visível se houver um fluxo de áudio ativo na chamada, o que significa que um participante está falando ativamente por um período de tempo.
Baixa largura de banda Verifique se a chamada tenha uma conexão de Internet confiável que possa sustentar uma chamada de voz. Para obter mais informações, consulte a seção Requisito de largura de banda de rede. Sugira que o usuário final desligue a câmera para economizar a largura de banda de internet disponível.
networkSendQuality Um indicador sobre a qualidade do fluxo de saída. - Defina paraBad quando houver um problema grave com o envio do fluxo.
- Defina para Poor quando houver um problema leve com o envio do fluxo.
- Defina para Good quando não há problema com o envio do fluxo.
- Semelhante ao diagnóstico de qualidade, ele só é visível se houver um fluxo de áudio ativo na chamada, o que significa que um participante está falando ativamente por um período de tempo. Mas, ele só funciona em uma chamada 1:1, pois depende de informações do outro lado para verificar a qualidade. Onde o outro lado tem que sinalizar os dados que foram recebidos.
Baixa largura de banda Verifique se a chamada tenha uma conexão de Internet confiável que possa sustentar uma chamada de voz. Para obter mais informações, consulte a seção Requisito de largura de banda de rede. Além disso, sugira que o usuário final desligue sua câmera para economizar a largura de banda de internet disponível.

Valores de áudio

Nome Descrição Valores possíveis Casos de uso Etapas de mitigação
noSpeakerDevicesAvailable Não há nenhum dispositivo de saída de áudio (alto-falante) no sistema do usuário. – Definido como True quando não há dispositivos de alto-falante no sistema e há suporte para a seleção de alto-falante.
- Defina para False quando há pelo menos um dispositivo de alto-falante no sistema, e a seleção de alto-falante é suportada.
Todos os alto-falantes estão desconectados Quando o valor definido como True, considere notificar visualmente o usuário final de que sua sessão de chamada atual não tem alto-falantes disponíveis.
speakingWhileMicrophoneIsMuted Falando enquanto o mudo está ativado. – Definido como True quando o microfone local está no mudo e o usuário local está falando.
– Definido como False quando o usuário local para de falar ou não desativa o mudo.
- Este evento de diagnóstico pode ser desativado automaticamente se for acionado por um determinado período de vezes sem qualquer ação do usuário para evitar ruídos e proporcionar uma melhor experiência ao usuário. Ele será reativado novamente quando ocorrer uma nova ação de mudo.
Durante uma chamada, ative o mudo e fale no microfone. Quando o valor definido para considerar a notificação visual para True o usuário final de que ele pode estar falando e não perceber que seu áudio está mudo.
noMicrophoneDevicesAvailable Nenhum dispositivo de captura de áudio (microfone) no sistema do usuário – Definido como True quando não houver dispositivos de microfone no sistema.
- Defina como False quando houver pelo menos um dispositivo de microfone no sistema.
Todos os microfones são desconectados durante a chamada. Quando o valor definido para True considerar a notificação visual ao usuário final de que sua sessão de chamada atual não tem um microfone. Para obter mais informações, consulte a seção Habilitar microfone do manjedoura do dispositivo.
microphoneNotFunctioning O microfone não está funcionando. - Defina como True quando não conseguimos iniciar o envio de fluxo de áudio local porque o dispositivo de microfone pode ter sido desativado no sistema ou está sendo usado por outro processo. Esse UFD leva cerca de 10 segundos para ser gerado.
- Definido como False quando o microfone começa a enviar o fluxo de áudio com êxito novamente.
Nenhum microfone disponível, acesso ao microfone desabilitado em um sistema Quando o valor definido para True notificar visualmente o usuário final de que há um problema com o microfone.
microphoneMuteUnexpectedly O microfone está no mudo - Definido como True quando o microfone ativa o mudo inesperadamente.
- Definido como False quando o microfone começa a enviar o fluxo de áudio com êxito
O microfone está mudo no sistema. A maioria dos casos acontece quando o usuário está em uma chamada dos Serviços de Comunicação do Azure em um dispositivo móvel e chega uma chamada telefônica. Na maioria dos casos, o sistema operacional silencia a chamada dos Serviços de Comunicação do Azure para que um usuário possa atender a chamada telefônica. Quando o valor é definido como True, notifica visualmente o usuário final de que sua chamada foi silenciada porque uma chamada telefônica foi recebida. Para obter mais informações, consulte a seção Como lidar melhor com o silenciamento do sistema operacional em uma chamada dos Serviços de Comunicação do Azure para obter mais detalhes.
microphonePermissionDenied há baixo volume do dispositivo ou é quase silencioso no macOS. - Defina como True quando a permissão de áudio é negada nas configurações do sistema (áudio).
- Definido como na False aquisição de fluxo bem-sucedida.
Observação: esse diagnóstico só funciona no macOS.
As permissões de microfone estão desabilitadas nas Configurações. Quando value é definido como True, notifique visualmente o usuário final de que ele não habilitou a permissão para usar o microfone para uma chamada dos Serviços de Comunicação do Azure.

Valores de câmera

Nome Descrição Valores possíveis Casos de uso Etapas de mitigação
câmeraFrozen A câmera para de produzir quadros por mais de 5 segundos. - Definido como True quando o fluxo de vídeo local está congelado. Esse diagnóstico significa que o lado remoto está vendo seu vídeo congelado na tela ou significa que os participantes remotos não estão renderizando seu vídeo na tela.
– Definido como False quando o congelamento termina e os usuários podem ver seu vídeo normalmente.
A câmera foi perdida durante a chamada ou uma rede ruim fez com que a câmera congelasse. Quando o valor estiver definido como True, considere notificar o usuário final de que a rede de participantes remotos pode estar ruim - possivelmente sugira que eles desliguem a câmera para economizar largura de banda. Para obter mais informações, consulte Seção de requisito de largura de banda de rede sobre as habilidades necessárias da Internet para uma chamada dos Serviços de Comunicação do Azure.
cameraStartFailed Falha genérica de câmera. - Definido para True quando não conseguimos iniciar o envio de vídeo local porque o dispositivo da câmera pode ter sido desativado no sistema ou está sendo usado por outro processo ~.
– Definido como False quando o dispositivo de câmera selecionado envia novamente com êxito o vídeo local.
Falhas de câmera Quando o valor é definido como True, notifica o usuário final de que a câmera não foi iniciada.
cameraStartTimedOut Cenário comum em que a câmera está em mau estado. - Definido como True quando o dispositivo de câmera atingir tempo limite para começar a enviar o fluxo de vídeo.
– Definido como False quando o dispositivo de câmera selecionado envia novamente com êxito o vídeo local.
Falhas de câmera Quando o valor é definido como True, notifique o usuário final de que sua câmera possivelmente está tendo problemas. (Quando o valor é definido de volta para False remover a notificação).
cameraPermissionDenied As permissões da câmera foram negadas nas configurações. - Defina como True quando a permissão da câmera é negada nas configurações do sistema (vídeo).
- Definido como na False aquisição de fluxo bem-sucedida.
Observação: esse diagnóstico só funciona no macOS Chrome.
As permissões de câmera estão desabilitadas nas configurações. Quando value é definido como True, notifique visualmente o usuário final de que ele não habilitou a permissão para usar a câmera para uma chamada dos Serviços de Comunicação do Azure.
cameraStoppedUnexpectedly Mau funcionamento da câmera – Definido como True quando a câmera entra em estado parado inesperadamente.
– Definido como False quando a câmera começa a enviar o fluxo de vídeo com êxito novamente.
Verificar se a câmera está funcionando corretamente. Quando o valor é definido como True, notifique o usuário final de que sua câmera possivelmente está tendo problemas. (Quando o valor é definido de volta para False remover a notificação).

Apenas nativo

Nome Descrição Valores possíveis Casos de uso Etapas de mitigação
alto-falanteVolumeIsZero Volume zero em um dispositivo (alto-falante). - Defina para True quando o volume do alto-falante é zero.
- Defina como False quando o volume do alto-falante não for zero.
Não ouvir o áudio dos participantes de plantão. Quando o valor é definido como True, você pode ter acidentalmente o volume em lowest(zero).
alto-falanteMudo O dispositivo de alto-falante está mudo. - Defina para True quando o dispositivo de alto-falante estiver mudo.
- Defina como False quando o dispositivo de alto-falante não estiver mudo.
Não ouvir o áudio dos participantes de plantão. Quando value é definido como True, você pode ter silenciado acidentalmente o alto-falante.
alto-falanteOcupado Alto-falante já está em uso. Ou o dispositivo está sendo usado no modo exclusivo, ou o dispositivo está sendo usado no modo compartilhado e o chamador pediu para usar o dispositivo no modo exclusivo. - Defina para True quando a aquisição de fluxo do dispositivo de alto-falante expira (áudio).
- Defina para quando a False aquisição do alto-falante for bem-sucedida.
Não ouvir áudio dos participantes de plantão através de alto-falante. Quando value estiver definido como True, notifique o usuário visual para que ele possa verificar se outro aplicativo está usando o alto-falante e tentar fechá-lo.
speakerNotFunctioning O alto-falante não está funcionando (falha ao inicializar o dispositivo de áudio, o cliente ou o dispositivo ficou inativo por mais de 5 segundos) - Defina como quando o True alto-falante não estiver disponível ou o tempo limite de aquisição de fluxo do dispositivo (áudio).
- Defina para quando a False aquisição do alto-falante for bem-sucedida.
Não ouvir áudio dos participantes de plantão através de alto-falante. Tente verificar o estado do dispositivo de alto-falante.
microfoneOcupado O microfone já está em uso. Ou o dispositivo está sendo usado no modo exclusivo, ou o dispositivo está sendo usado no modo compartilhado e o chamador pediu para usar o dispositivo no modo exclusivo. - Defina para True quando a aquisição de fluxo do dispositivo de microfone expira (áudio).
- Defina para quando a False aquisição do microfone for bem-sucedida.
Seu áudio não alcança outros participantes da chamada. Quando o valor é definido como True, notifique o usuário final para que ele possa verificar se outro aplicativo está usando o microfone e tentar fechá-lo.

Acessar diagnóstico

O diagnóstico voltado para o usuário é um recurso estendido da API Call principal e permite diagnosticar uma chamada ativa.

this.diagnosticsCallFeature = call.Features.LocalUserDiagnostics;

Eventos de diagnóstico voltado para o usuário

  • Implementar ouvintes para eventos de diagnóstico.
private async void Call__OnNetworkUnavailableChanged(object sender, FlagDiagnosticChangedEventArgs args)
{
  var value = args.Value;
  // Handle the diagnostic event value changed...
}

// Listen to other network diagnostics

private async void Call__OnMediaSpeakerNotFunctioningChanged(object sender, FlagDiagnosticChangedEventArgs args)
{
  var value = args.Value;
  // Handle the diagnostic event value changed...
}

// Listen to other media diagnostics
  • Defina métodos de eventos para ouvir eventos.
this.diagnosticsCallFeature = call.Features.LocalUserDiagnostics;
this.networkDiagnostics = diagnosticsCallFeature.Network;
this.mediaDiagnostics = diagnosticsCallFeature.Media;

this.networkDiagnostics.NetworkUnavailableChanged += Call__OnNetworkUnavailableChanged;
// Listen to other network events as well ... 

this.mediaDiagnostics.SpeakerNotFunctioningChanged += Call__OnMediaSpeakerNotFunctioningChanged;
// Listen to other media events as well ... 

// Removing listeners

this.networkDiagnostics.NetworkUnavailable -= Call__NetworkUnavailableChanged;
// Remove the other listeners as well ... 

this.mediaDiagnostics.SpeakerNotFunctioningChanged -= Call__OnMediaSpeakerNotFunctioningChanged;
// Remove the other listeners as well ... 

Obter os mais recentes diagnósticos voltados para o usuário

  • Obtenha os valores de diagnóstico mais recentes que foram gerados na chamada atual. Se ainda não recebemos um valor para o diagnóstico, null ou .unknown para é retornado.
this.diagnosticsCallFeature = call.Features.LocalUserDiagnostics;
this.networkDiagnostics = diagnosticsCallFeature.Network;
this.mediaDiagnostics = diagnosticsCallFeature.Media;

bool? lastSpeakerNotFunctionValue = this.mediaDiagnostics.GetLatestDiagnostics().IsSpeakerNotFunctioning; // Boolean?
bool? lastNetworkRelayNotReachableValue = this.networkDiagnostics.GetLatestDiagnostics().IsNetworkRelaysUnreachable; // Boolean?
DiagnosticQuality lastReceiveQualityValue = this.networkDiagnostics.GetLatestDiagnostics().NetworkReceiveQuality; // DiagnosticQuality (.good, .poor, .bad)
// or .unknown if there isn't a diagnostic for this.