Partilhar via


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 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.

Conecte um microfone ou habilite 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 noMicrophoneDevicesEnumerated evento de diagnóstico. Quando esse evento acontece, seu aplicativo precisa invocar askDevicePermission para obter o consentimento do usuário para enumerar dispositivos. O usuário pode então silenciar ou desativar o som do microfone.

Descarte VideoStreamRendererView

Os aplicativos dos Serviços de VideoStreamRendererViewComunicação devem descartar o , ou sua instância pai VideoStreamRenderer , quando não for mais necessário.

Desligar a chamada em um evento onbeforeunload

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

Lidar com várias chamadas em vários separadores

Seu aplicativo não deve se conectar a chamadas de várias guias do navegador simultaneamente em dispositivos móveis. Essa 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 desligarem as chamadas quando elas forem concluídas em segundo plano antes de iniciar uma nova.

Lidar com o SO silenciando uma chamada quando uma 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 SO silenciará automaticamente o microfone e a câmara do utilizador. No Android, a chamada é automaticamente desativada e o vídeo é reiniciado após o término da chamada. No iOS, desativar o mudo e reiniciar o vídeo requer ação do usuário.

Você pode usar o evento de qualidade de para ouvir a notificação de que o microfone foi silenciado microphoneMuteUnexpectedly inesperadamente. Lembre-se de que, para participar novamente de 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 um fluxo de vídeo e deve usar this.currentCall.unmute(); para desativar o som do áudio.

Gerir 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 você fizer isso, deverá descartar manualmente 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 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 acesso, DeviceManager.askDevicePermission retorna false para um determinado tipo de dispositivo (áudio ou vídeo) em chamadas subsequentes, mesmo depois que a página é atualizada. Nesse cenário, seu aplicativo deve:

  1. Detete que o usuário negou acesso anteriormente.
  2. Instrua o usuário a redefinir manualmente ou conceder explicitamente acesso a um tipo de dispositivo específico.

Gerenciar o comportamento de uma câmera que outro processo está usando

  • No Windows Chrome e no Windows Microsoft Edge: se você iniciar, ingressar ou aceitar uma chamada com vídeo ativado e outro processo (diferente do navegador em que o SDK da Web está sendo executado) estiver usando o dispositivo da câmera, a chamada será iniciada apenas com áudio e sem vídeo. Um cameraStartFailed sinalizador de diagnóstico voltado para o usuário é gerado porque a câmera falhou ao iniciar.

    A mesma situação 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, 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 da câmera.

  • Em dispositivos móveis: Se um ProcessA solicitar o dispositivo de câmera enquanto o ProcessB estiver usando, o ProcessA ultrapassará o dispositivo da câmera e o ProcessB interromperá de usá-lo.

  • No Safari do iOS: não é possível ter a câmara ligada para vários clientes de chamadas no mesmo separador ou 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 um cameraStoppedUnexpectedly sinalizador de diagnóstico voltado para o usuário.

Gerir a partilha de ecrã

Fechar um aplicativo não impede que ele seja compartilhado

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

Para impedir que o aplicativo seja compartilhado na tela, você precisa executar uma destas ações:

  • Clique com o botão direito do rato no ícone da aplicação na barra de tarefas do ambiente de trabalho e, em seguida, selecione Sair.
  • Selecione o botão Parar compartilhamento no navegador.
  • Chame a operação da API do Call.stopScreenSharing() SDK.

O Safari só pode partilhar em ecrã inteiro

O Safari permite a partilha de ecrã apenas para todo o ecrã. Esse comportamento é diferente do Chromium, que permite compartilhar a tela inteira, um aplicativo de desktop específico ou uma guia específica do navegador.

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

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

Práticas recomendadas para o SDK nativo de chamada 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 dos Serviços de Comunicação do Azure para chamadas de voz e vídeo.

Plataformas suportadas

Aqui estão 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 tempo de compilação e iOS 12.0+ em tempo de execução
  • Xcode 12.0+
  • Suporte para iPadOS 13.0+

Verificar as permissões do dispositivo para solicitações de aplicativos

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 o acesso do usuário e garantir que as permissões estejam habilitadas. O consumidor autoriza esses direitos de acesso, portanto, verifique se ele tem atualmente as permissões necessárias.

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

Configurar os logs

Implementar o registro em log conforme descrito no tutorial sobre como recuperar arquivos de log é 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. Incentivamos os desenvolvedores a configurar logs usando a API Logs. Sem os logs, a equipe de suporte da Microsoft não pode ajudar a depurar e solucionar problemas das chamadas.

Rastrear CallID

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. A equipe de Suporte da Microsoft solicita ajuda para solucionar as chamadas.

Você deve controlar o CallID valor na telemetria que você configura em seu aplicativo. Para entender como recuperar o valor de cada plataforma, siga as diretrizes no guia de solução de problemas.

Assine o Diagnóstico voltado para o usuário e estatísticas de qualidade de mídia

Pode utilizar estas funcionalidades dos Serviços de Comunicação do Azure para ajudar a melhorar a experiência do utilizador:

  • Diagnóstico voltado para o usuário: examine as propriedades de uma chamada para determinar a causa dos problemas que afetam 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 chamadas recebidas e enviadas. Recomendamos que você colete os dados e os envie para sua ingestão de 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 adequado de erros e para exibir alertas. Os estados de chamada também retornam códigos de erro para ajudar a identificar os motivos por trás das 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 quando a interface do VideoStreamRendererView 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 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. 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.

Considere 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 para solicitar acesso assume o controle do dispositivo. Como resultado, o segundo processo perde imediatamente o acesso a ele.

Otimizar o tamanho da biblioteca

A otimização do tamanho das bibliotecas no desenvolvimento de software é crucial pelos seguintes motivos, particularmente à medida que os aplicativos se tornam mais complexos e consomem muitos recursos:

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

  • Uso de memória: minimizando o tamanho da biblioteca, você pode diminuir o espaço ocupado pela memória de tempo de execução de um aplicativo. Esta diminuição é 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.

Para obter mais informações, consulte: