Compartilhar via


Melhores práticas: SDKs de chamadas de Serviços de Comunicação do Azure

Este artigo fornece informações sobre as melhores práticas relacionadas aos SDKs de chamada dos Serviços de Comunicação do Azure.

Práticas recomendadas para o SDK da Web de Chamada dos Serviços de Comunicação do Azure

Esta seção fornece informações sobre as práticas recomendadas associadas ao SDK da Web de Chamada dos Serviços de Comunicação do Azure (JavaScript) para chamadas de voz e vídeo.

Conectar um microfone ou habilitar um microfone do gerenciador de dispositivos quando uma chamada estiver em andamento

Quando nenhum microfone está disponível no início de uma chamada dos Serviços de Comunicação do Azure e, em seguida, um microfone fica disponível, a alteração gera um evento de diagnóstico noMicrophoneDevicesEnumerated. Quando esse evento acontece, o seu aplicativo precisa invocar askDevicePermission para obter o consentimento do usuário para enumerar dispositivos. Em seguida, o usuário pode ativar ou desativar o mudo do microfone.

Descartar VideoStreamRendererView

Os aplicativos dos Serviços de Comunicação devem descartar VideoStreamRendererView, ou sua instância pai VideoStreamRenderer, quando não forem mais necessários.

Desligar a chamada em um evento onbeforeunload

Seu aplicativo deve invocar call.hangup quando o evento onbeforeunload for emitido.

Manipular várias chamadas em várias guias

Seu aplicativo não deve se conectar a chamadas a partir de várias guias do navegador simultaneamente em dispositivos móveis. Esta situação pode causar um comportamento indefinido devido à alocação de recursos para o microfone e a câmera em um dispositivo. Incentivamos os desenvolvedores a sempre desligar as chamadas quando elas forem concluídas em segundo plano antes de iniciar uma nova chamada.

Manipular o sistema operacional colocando uma chamada no mudo quando uma chamada telefônica chegar

Durante uma chamada dos Serviços de Comunicação do Azure (para iOS e Android), se uma chamada telefônica chegar ou o assistente de voz for ativado, o sistema operacional ativará automaticamente o mudo do microfone e da câmera do usuário. No Android, a chamada desativa o mudo automaticamente e o vídeo é reiniciado após o termino da chamada telefônica. No iOS, desativar o mudo e reiniciar o vídeo exige uma ação do usuário.

Você pode usar o evento de qualidade de microphoneMuteUnexpectedly para escutar a notificação de que o mudo do microfone foi ativado inesperadamente. Tenha em mente que, para voltar a uma chamada corretamente, você precisa usar o SDK 1.2.3-beta.1 ou posterior.

const latestMediaDiagnostic = call.api(SDK.Features.Diagnostics).media.getLatest();
const isIosSafari = (getOS() === OSName.ios) && (getPlatformName() === BrowserName.safari);
if (isIosSafari && latestMediaDiagnostic.microphoneMuteUnexpectedly && latestMediaDiagnostic.microphoneMuteUnexpectedly.value) {
  // received a QualityEvent on iOS that the microphone was unexpectedly muted - notify user to unmute their microphone and to start their video stream
}

Seu aplicativo deve invocar call.startVideo(localVideoStream); para iniciar uma transmissão de vídeo e deve usar o this.currentCall.unmute(); para desativar o áudio.

Gerenciar dispositivos

Você pode usar o SDK dos Serviços de Comunicação do Azure para gerenciar seus dispositivos e operações de mídia.

O seu aplicativo não deve usar APIs de navegador nativas como getUserMedia ou getDisplayMedia para adquirir fluxos fora do SDK. Se você fizer isso, deverá descartar manualmente os seus fluxos de mídia antes de usar DeviceManager ou outras APIs de gerenciamento de dispositivos por meio do SDK dos Serviços de Comunicação.

Solicitar permissões do dispositivo

Você pode solicitar permissões de dispositivo usando o SDK. Seu aplicativo deve usar DeviceManager.askDevicePermission para solicitar acesso a dispositivos de áudio e/ou vídeo.

Se o usuário negar acesso, DeviceManager.askDevicePermission retornará false para um tipo de dispositivo específico (áudio ou vídeo) em chamadas subsequentes, mesmo depois da página ser atualizada. Neste cenário, o seu aplicativo deve:

  1. Detectar que o usuário negou acesso anteriormente.
  2. Instruir o usuário a redefinir manualmente ou conceder explicitamente acesso a um determinado tipo de dispositivo.

Gerenciar o comportamento de uma câmera usada por outro processo

  • No Windows Chrome e no Windows Microsoft Edge: se você iniciar, ingressar em ou aceitar uma chamada com vídeo ativado, e outro processo (diferente do navegador no qual o SDK da Web está em execução) estiver usando o dispositivo de câmera, a chamada será iniciada apenas com áudio, sem vídeo. Um sinalizador de Diagnóstico voltado para o usuário cameraStartFailed é acionado porque a câmera não pôde ser iniciada.

    A mesma situação se aplica à ativação do vídeo no meio da chamada. Você pode desativar a câmera no outro processo para que esse processo libere o dispositivo de câmera e inicie o vídeo novamente a partir da chamada. Em seguida, o vídeo é ativado para a chamada e os participantes remotos começam a ver o vídeo.

    Esse problema não existe no MacOS Chrome ou macOS Safari porque o sistema operacional permite que processos e threads compartilhem o dispositivo de câmera.

  • Para dispositivos móveis: se um ProcessoA solicitar o dispositivo de câmera enquanto o ProcessoB o estiver usando, o ProcessoA ultrapassará o dispositivo de câmera e o ProcessoB deixará de usá-lo.

  • No Safari no iOS: você não pode ter a câmera ativada para vários clientes de chamada na mesma guia ou em várias guias. Quando um cliente de chamada usa a câmera, ele assume a câmera do cliente da chamada anterior que a estava usando. O cliente de chamada anterior obtém um sinalizador de Diagnóstico voltado para o usuário cameraStoppedUnexpectedly.

Gerenciar o compartilhamento de tela

Fechar um aplicativo não o impede de ser compartilhado

Digamos que, no Chromium, você compartilhe a tela do aplicativo do Microsoft Teams. Em seguida, selecione o botão X no aplicativo do Teams para fechá-lo. Embora a janela esteja fechada, o aplicativo do Teams continua em execução em segundo plano. O ícone ainda aparece na barra de tarefas da área de trabalho. Como o aplicativo do Teams ainda está em execução, ele ainda está sendo compartilhado com participantes remotos.

Para impedir o compartilhamento de tela do aplicativo, você precisa executar uma destas ações:

  • Clique com o botão direito do mouse no ícone do aplicativo na barra de tarefas da área de trabalho e selecione Encerrar.
  • Selecione o botão Parar de compartilhar no navegador.
  • Chame a operação de API Call.stopScreenSharing() do SDK.

O Safari só pode fazer compartilhamento em tela inteira

O Safari permite o compartilhamento de tela apenas para toda a tela. Esse comportamento é diferente do Chromium, que permite que você compartilhe a tela inteira, um aplicativo da área de trabalho específico ou uma guia específica do navegador.

Você pode conceder permissões de compartilhamento de tela no macOS

Para o compartilhamento de tela no macOS Safari ou no macOS Chrome, conceda as permissões necessárias aos navegadores no menu do sistema operacional: Preferências do Sistema>Segurança e Privacidade>Gravação de Tela.

Melhores práticas para o SDK Nativo de Chamada dos Serviços de Comunicação do Azure

Esta seção fornece informações sobre as melhores práticas associadas ao SDK Nativo de Chamada dos Serviços de Comunicação do Azure para chamadas de voz e vídeo.

Plataformas compatíveis

Veja a seguir os requisitos mínimos da plataforma do sistema operacional para garantir a funcionalidade ideal do SDK Nativo de Chamada.

  • Suporte para iOS 10.0+ em buildtime e iOS 12.0+ em runtime
  • Xcode 12.0+
  • Suporte para iPadOS 13.0+

Verificar permissões de dispositivo para solicitações de aplicativo

Para usar o SDK Nativo de Chamada para fazer ou receber chamadas, os consumidores precisam autorizar cada plataforma a acessar os recursos do dispositivo. Como desenvolvedor, você deve solicitar acesso ao usuário e garantir que as permissões estejam habilitadas. O consumidor autoriza esses direitos de acesso – portanto, verifique se ele possui as permissões necessárias no momento.

  • NSMicrophoneUsageDescription para acesso ao microfone
  • NSCameraUsageDescription para acesso à câmera

Configurar os logs

A implementação do registro em log, conforme descrita no tutorial sobre a recuperação de arquivos de log, é mais crítica do que nunca. Os logs detalhados ajudam a diagnosticar problemas específicos de modelos de dispositivos ou versões do sistema operacional que atendem aos critérios mínimos do SDK. Incentivamos os desenvolvedores a configurar logs usando a API de Logs. Sem os logs, a equipe de suporte da Microsoft não pode ajudar a depurar e solucionar problemas de chamadas.

Rastrear a CallID

CallID é a ID exclusiva para uma Chamada. Ela identifica eventos correlacionados de todos os participantes e pontos de extremidade que se conectam durante uma única chamada. Na maioria dos casos, você a usa para examinar os logs. A equipe de Suporte da Microsoft a solicita para ajudar a solucionar problemas de chamadas.

Você deve acompanhar o valor de CallID nos dados telemétricos configurados em seu aplicativo. Para entender como recuperar o valor de cada plataforma, siga as diretrizes no guia de solução de problemas.

Assinar estatísticas de qualidade de mídia e diagnóstico voltados para o usuário

Você pode usar esses recursos dos Serviços de Comunicação do Azure para ajudar a melhorar a experiência do usuário:

  • Diagnóstico Voltado para o Usuário: examine as propriedades de uma chamada para determinar a causa dos problemas que afetam os seus clientes.
  • Estatísticas de qualidade de mídia: examine as métricas de qualidade de áudio, vídeo e compartilhamento de tela de baixo nível para métricas de chamada de entrada e saída. Recomendamos que você colete os dados e envie-os para a ingestão do pipeline após o término de uma chamada.

Gerenciar o tratamento de erros

Se houver erros durante a chamada ou implementação, os métodos retornarão objetos de erro que contêm códigos de erro. É crucial usar esses objetos de erro para o tratamento de erros adequado e para exibir alertas. Os estados de chamada também retornam códigos de erro para ajudar a identificar os motivos por trás de falhas de chamada. Você pode consultar o guia de solução de problemas para resolver quaisquer problemas.

Gerenciar fluxos de vídeo

Certifique-se de descartar VideoStreamRendererView quando a interface do usuário não exibir mais o vídeo. Use VideoStreamType para determinar o tipo do fluxo.

Conduzir o gerenciamento geral de memória

Pré-alocar recursos. Inicialize seu cliente de chamada e todos os recursos necessários durante a fase de inicialização do aplicativo, em vez de sob demanda. Esta abordagem reduz a latência ao iniciar uma chamada.

Descarte corretamente. Descarte todos os objetos de chamada após o uso, para liberar recursos do sistema e evitar vazamentos de memória. Certifique-se de cancelar a assinatura de eventos que possam causar vazamentos de memória.

Considerar como os processos acessam a câmera ou o microfone

Em dispositivos móveis, se vários processos tentarem acessar a câmera ou o microfone ao mesmo tempo, o primeiro processo a solicitar acesso assumirá o controle do dispositivo. Como resultado, o segundo processo perderá imediatamente o acesso a ele.

Otimizar o tamanho da biblioteca

Otimizar o tamanho das bibliotecas no desenvolvimento de software é crucial pelos seguintes motivos, especialmente à medida que os aplicativos se tornam mais complexos com mais uso intensivo de recursos:

  • Desempenho do aplicativo: bibliotecas menores reduzem a quantidade de código que um aplicativo deve carregar, analisar e executar. Esta redução pode melhorar significativamente o tempo de inicialização e o desempenho geral do aplicativo, especialmente em dispositivos com recursos limitados.

  • Uso de memória: minimizando o tamanho da biblioteca, você pode diminuir o volume de memória de runtime de um aplicativo. Esta diminuição é importante para dispositivos móveis, em que a memória geralmente é restrita. O menor uso de memória pode levar a menos falhas no sistema e melhor desempenho multitarefa.

Para saber mais, veja: