Práticas recomendadas: Serviços de Comunicação do Azure chamando SDKs

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

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

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

SDK de chamadas de voz e vídeo JavaScript

Conecte o microfone ou habilite o microfone do gerenciador de dispositivos quando a chamada dos Serviços de Comunicação do Azure estiver em andamento

Quando não há microfone disponível no início de uma chamada e, em seguida, um microfone fica disponível, o evento de diagnóstico de chamada "noMicrophoneDevicesEnumerated" é gerado. Quando isso acontece, seu aplicativo deve invocar askDevicePermission para obter o consentimento do usuário para enumerar dispositivos. Em seguida, o usuário será capaz de silenciar / desativar o som do microfone.

Eliminar a vista do renderizador de fluxo de vídeo

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

Desligue a chamada no evento onbeforeunload

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

Lidar com várias chamadas em vários separadores em dispositivos móveis

Seu aplicativo não deve se conectar a chamadas de várias guias do navegador simultaneamente, pois isso pode causar um comportamento indefinido devido à alocação de recursos para microfone e câmera no dispositivo. Os desenvolvedores são encorajados a sempre desligar as chamadas quando concluídas em segundo plano antes de iniciar uma nova.

Lide com chamadas de silenciamento do SO quando a chamada telefónica chega.

Durante uma chamada dos Serviços de Comunicação do Azure (para iOS e Android), se uma chamada telefônica for recebida ou o Assistente de voz for ativado, o sistema operacional silenciará automaticamente o microfone e a câmera do usuário. No Android, a chamada é automaticamente desativada e o vídeo é reiniciado após o término da chamada. No iOS, ele requer uma ação do usuário para "desativar o som" e "iniciar o vídeo" novamente. Você pode ouvir a notificação de que o microfone foi silenciado inesperadamente com o evento de qualidade do microphoneMuteUnexpectedly. Observe que, para poder participar novamente de uma chamada corretamente, você precisa usar o SDK 1.2.3-beta.1 ou superior.

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 um fluxo de vídeo e deve usar this.currentCall.unmute(); para desativar o som do áudio.

Gestão de dispositivos

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

  • Seu aplicativo não deve usar APIs nativas do navegador como getUserMedia ou getDisplayMedia para adquirir fluxos fora do SDK. Se o fizer, terá de eliminar manualmente os fluxos de multimédia antes de utilizar DeviceManager ou outras APIs de gestão de dispositivos através do SDK dos Serviços de Comunicação.

Solicitar permissões de 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 o acesso, DeviceManager.askDevicePermission retornará 'false' para um determinado tipo de dispositivo (áudio ou vídeo) em chamadas subsequentes, mesmo depois que a página for atualizada. Nesse cenário, seu aplicativo deve detetar que o usuário negou acesso anteriormente e instruir o usuário a redefinir manualmente ou conceder explicitamente acesso a um determinado tipo de dispositivo.

Câmera sendo usada por outro processo

  • No Windows Chrome e no Windows Microsoft Edge, se você iniciar/participar/aceitar uma chamada com vídeo ativado e o dispositivo da câmera estiver sendo usado por outro processo que não seja o navegador no qual o SDK da Web está sendo executado, a chamada será iniciada apenas com áudio e sem vídeo. Um UFD cameraStartFailed é gerado porque a câmera falhou ao iniciar uma vez que estava sendo usada por outro processo. O mesmo se aplica à ativação de vídeo no meio da chamada. Você pode desligar a câmera no outro processo para que esse processo libere o dispositivo da câmera e, em seguida, iniciar o vídeo novamente a partir da chamada e o vídeo será ativado para a chamada e os participantes remotos começarão a ver seu vídeo.
  • Isso não é um problema no macOS Chrome nem no macOS Safari porque o sistema operacional permitirá que processos/threads compartilhem o dispositivo da câmera.
  • Em dispositivos móveis, se um ProcessA solicitar o dispositivo da câmera e ele estiver sendo usado pelo ProcessB, o ProcessA ultrapassará o dispositivo da câmera e o ProcessB interromperá o uso do dispositivo da câmera
  • No Safari do iOS, não é possível ter a câmara ligada para vários clientes de chamadas no mesmo separador nem entre separadores. Quando qualquer cliente de chamada usa a câmera, ele ultrapassa a câmera de qualquer cliente de chamada anterior que estava usando-o. O cliente de chamada anterior recebe uma cameraStoppedUnexpectedly UFD.

Partilha de ecrã

Fechar o aplicativo não impede que ele seja compartilhado

Por exemplo, digamos que, a partir do Chromium, você compartilha a tela do aplicativo Microsoft Teams. Em seguida, selecione o botão "X" no aplicativo Teams para fechá-lo. O aplicativo Teams não será fechado e ainda será executado em segundo plano. Você ainda verá o ícone no canto inferior direito da barra da área de trabalho. Como o aplicativo do Teams ainda está em execução, isso significa que ele ainda está sendo compartilhado na tela e o participante remoto na chamada ainda pode ver seu aplicativo do Teams sendo compartilhado na tela. A fim de impedir que o aplicativo seja compartilhado na tela, você tem que clicar com o botão direito do mouse em seu ícone na barra da área de trabalho e, em seguida, clique em sair. Ou você tem que clicar no botão "Parar de compartilhar" no navegador. Ou chame a API Call.stopScreenSharing() do SDK.

O Safari só pode partilhar em ecrã inteiro

O Safari só permite partilhar o ecrã inteiro. Ao contrário do Chromium, que permite partilhar ecrã inteiro, aplicação de ambiente de trabalho específica ou separador específico do navegador.

Permissões de compartilhamento de tela no macOS

Para fazer o compartilhamento de tela no macOS Safari ou macOS Chrome, as permissões de gravação de tela devem ser concedidas aos navegadores no menu do sistema operacional: "Preferências do Sistema" -> "Segurança e Privacidade" -> "Gravação de tela".

Práticas recomendadas do SDK nativo dos Serviços de Comunicação do Azure

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

Plataformas suportadas

Aqui estão os requisitos mínimos da plataforma de sistema operacional para garantir a funcionalidade ideal dos SDKs nativos de chamada.

  • Suporte para iOS 10.0+ em tempo de compilação e iOS 12.0+ em tempo de execução.
  • Xcode 12.0+.
  • Suporte para iPadOS 13.0+.

Permissões de dispositivo de solicitação de aplicativo

Para usar os SDKs nativos de chamada para fazer ou receber chamadas, é necessário autorizar cada plataforma a acessar os recursos do dispositivo. Como desenvolvedor, você deve solicitar o acesso do usuário e garantir que está habilitado. O consumidor autoriza estes direitos de acesso, pelo que verifica se lhes foi concedida autorização anteriormente.

  • NSMicrophoneUsageDescription para acesso ao microfone.
  • NSCameraUsageDescription para acesso à câmara.

Configurar os logs

Implementar o registro em log de acordo com o tutorial de recuperação de arquivos de logs é mais crítico do que nunca. Os logs detalhados ajudam no diagnóstico de problemas específicos para modelos de dispositivos ou versões do sistema operacional que atendem aos critérios mínimos do SDK. Recomendamos aos desenvolvedores que comecem a configurar a API de Logs sem os logs que a equipe de Suporte da Microsoft não poderá ajudar a depurar e solucionar problemas das chamadas.

Rastrear ID de chamada

CallID é o ID exclusivo de uma chamada. Ele identifica eventos correlacionados de todos os participantes e pontos de extremidade que se conectam durante uma única chamada, na maioria dos casos, você o usa para revisar os logs e a equipe de Suporte da Microsoft solicita que ele ajude a solucionar as chamadas. Você deve acompanhar a telemetria CallID que você configura em seu aplicativo, você pode seguir as diretrizes no guia de solução de problemas para entender como recuperá-lo para cada plataforma.

Assine o UFD (User Facing Diagnostics) e estatísticas de qualidade de mídia

  • Diagnóstico de Frente para o Usuário (UFD) que pode ser usado para examinar várias propriedades de uma chamada para determinar qual pode ser o problema durante a chamada que afeta seus clientes.
  • As estatísticas de qualidade de mídia examinam as métricas de qualidade de áudio, vídeo e compartilhamento de tela de baixo nível para métricas de chamadas recebidas e enviadas. Recomendamos que você colete os dados e os envie para sua ingestão de pipeline após o término da chamada.

Processamento de Erros

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

Gerenciando fluxos de vídeo

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

Gerenciamento geral de memória

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

Elimine corretamente. Certifique-se de que todos os objetos de chamada sejam descartados corretamente após o uso para liberar recursos do sistema e evitar vazamentos de memória. Certifique-se de cancelar a assinatura de eventos que impedem vazamentos de memória.

Câmera ou microfone sendo usado por outro processo

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

Otimize o tamanho do APP usando a Biblioteca da Interface do Usuário

Otimizar o tamanho das bibliotecas no desenvolvimento de software é crucial por vários motivos, especialmente à medida que os aplicativos se tornam cada vez mais complexos e consomem muitos recursos.

Desempenho do aplicativo: bibliotecas menores reduzem a quantidade de código que deve ser carregado, analisado e executado por um aplicativo. Isso pode melhorar significativamente o tempo de inicialização e o desempenho geral do seu aplicativo, especialmente em dispositivos com recursos limitados.

Uso de memória: Ao minimizar o tamanho da biblioteca, você pode diminuir o espaço de memória de tempo de execução de um aplicativo. Isto é importante para dispositivos móveis, onde a memória é frequentemente restringida. Menor uso de memória pode levar a menos falhas do sistema e melhor desempenho multitarefa.

Próximos passos

Para obter mais informações, consulte os seguintes artigos que podem estar em inglês: