Integração do desenvolvedor com redirecionamento de multimídia para aplicativos de chamada baseados em WebRTC em uma sessão remota
O redirecionamento de multimídia redireciona a reprodução de vídeo e as chamadas em uma sessão remota da Área de Trabalho Virtual do Azure, um PC na nuvem do Windows 365 ou o Computador de Desenvolvimento da Microsoft para seu dispositivo local para processamento e renderização mais rápidos.
O redirecionamento de chamadas otimiza as chamadas de áudio para aplicativos de chamada baseados em WebRTC, reduzindo a latência e melhorando a qualidade da chamada. A conexão ocorre entre o dispositivo local e o servidor de aplicativos de telefonia, onde as chamadas WebRTC são descarregadas de uma sessão remota para um dispositivo local. Depois que a conexão é estabelecida, a qualidade da chamada passa a depender da página da Web ou dos provedores de aplicativos, da mesma forma que aconteceria com uma chamada não redirecionada.
O redirecionamento de chamadas pode funcionar com a maioria dos aplicativos de chamada baseados em WebRTC sem modificações. No entanto, pode haver cenários sem suporte ou talvez você queira fornecer uma experiência diferente em uma sessão remota.
Este artigo fornece informações sobre interfaces de API e métodos de instância suportados e mostra trechos de código JavaScript que você pode usar com a propriedade mediaDevices
da interface do navegador.
A interface do navegador faz parte da API Media Capture and Streams para integrar seu site ao redirecionamento de chamadas. Juntamente com a API WebRTC, essas APIs fornecem suporte para streaming de dados de áudio e vídeo com aplicativos de chamada baseados em WebRTC. O redirecionamento de multimídia substitui a implementação do objeto mediaDevices
nas APIs para detectar o redirecionamento de chamadas, manipular eventos de desconexão e reconexão e coletar informações de diagnóstico.
Dica
Quando quiser testar sua integração com o redirecionamento de multimídia, você pode habilitar o redirecionamento de chamadas para estar disponível para todos os sites. Para obter mais informações, confira Habilitar o redirecionamento de chamadas para todos os sites para teste.
Interfaces de API e métodos de instância compatíveis
O redirecionamento de chamadas foi projetado para substituir perfeitamente o uso padrão do WebRTC por uma implementação que redireciona chamadas de uma sessão remota para o dispositivo local.
Aqui está uma lista das interfaces e métodos de instância com suporte usados pelo redirecionamento de chamadas da API de Captura e Fluxos de Mídia e da API WebRTC:
AnalyserNode
AudioContext
HTMLAudioElement
MediaDevices
MediaStream
MediaStreamAudioDestinationNode
MediaStreamAudioSourceNode
MediaStreamTrack
RTCDataChannel
RTCPeerConnection
RTCRtpReceiver
RTCRtpSender
RTCRtpTransceiver
Limitações conhecidas
O redirecionamento de chamadas tem as seguintes limitações de API:
Atualmente, há suporte apenas para um número limitado de nós
WebAudio
.setSinkId
em umHTMLAudioElement
funciona para faixas WebRTCsrcObject
, no entanto, qualquer reprodução local, como um toque, sempre é reproduzida na saída de áudio padrão da sessão remota.Como algumas APIs retornam de maneira síncrona em condições normais, mas precisam ser proxies quando usadas com o redirecionamento de chamada, é possível que o estado de um objeto não esteja disponível imediatamente.
Detectar redirecionamento de chamadas
Para detectar se o redirecionamento de chamadas está ativo, você pode verificar a propriedade isCallRedirectionEnabled
do objeto MediaDevices
. Se essa propriedade for true
, o redirecionamento de chamadas estará ativo. Se essa propriedade for undefined
ou false
, o redirecionamento de chamadas não estará ativo.
window.navigator.mediaDevices['isCallRedirectionEnabled'] = true;
Detectar desconexão de uma sessão remota
Quando um usuário se desconecta e se reconecta a uma sessão remota ao usar o redirecionamento de chamadas em uma página da Web, a instância local do WebRTC que dava suporte aos objetos não está mais disponível. Normalmente, se um usuário atualizar a página, ele poderá fazer chamadas novamente.
A página da Web pode detectar e lidar com esses eventos de desconexão e reconexão destruindo e recriando todos os objetos WebRTC, elementos de áudio ou vídeo e interfaces MediaStream
ou MediaStreamTrack
. Essa abordagem elimina a necessidade de atualizar a página da Web.
Para ser notificado sobre esses eventos, registre o evento rdpClientConnectionStateChanged
no objeto MediaDevices
, conforme mostrado no exemplo a seguir. Esse evento contém o novo estado, que pode ser connected
ou disconnected
.
navigator.mediaDevices.addEventListener('rdpClientConnectionStateChanged', () =>
console.log("state change: " + event.detail.state);
);
Diagnóstico de redirecionamento de chamadas
O exemplo a seguir lista as propriedades expostas no objeto MediaDevices
. Eles fornecem informações de diagnóstico específicas sobre as versões de redirecionamento de chamadas que estão sendo usadas e identificadores de sessão. Essas informações são úteis ao relatar problemas à Microsoft e recomendamos que você as colete como parte de seus dados de telemetria ou diagnóstico.
window.navigator.mediaDevices['mmrClientVersion'];
window.navigator.mediaDevices['mmrHostVersion'];
window.navigator.mediaDevices['mmrExtensionVersion'];
window.navigator.mediaDevices['activityId'];
window.navigator.mediaDevices['connectionId'];
Aqui está o que cada propriedade representa:
mmrClientVersion: a versão do arquivo
MsMmrDVCPlugin.dll
no computador local, que vem como parte do aplicativo Windows e do aplicativo de Área de Trabalho Remota.mmrHostVersion: a versão do arquivo
MsMMRHost.exe
instalada no host da sessão, no PC na nuvem ou no computador de desenvolvimento.mmrExtensionVersion: a versão da extensão Microsoft Multimedia Redirection em execução no navegador.
activityId: um identificador exclusivo que a Microsoft usa para associar a telemetria a uma sessão específica e mapeia para o redirecionamento de multimídia da página da Web atual está redirecionando.
connectionId: um identificador exclusivo que a Microsoft usa para associar a telemetria a uma sessão específica e se relaciona à conexão fornecida entre o dispositivo local e a sessão remota.
Todas essas informações estão disponíveis para o usuário final nos detalhes da extensão do navegador, mas este exemplo fornece uma maneira programática de coletá-las.
Logs de redirecionamento de chamadas
Por padrão, o redirecionamento de multimídia não é registrado no console. A extensão do navegador tem um botão para que os usuários coletem logs. O exemplo a seguir mostra como habilitar logs de console programaticamente. Talvez você queira habilitar logs do console programaticamente se estiver trabalhando na integração ou capturando um problema que exija logs de execução mais longos do que a opção na interface de extensão do navegador fornece.
window.navigator.mediaDevices['mmrConsoleLoggingEnabled'] = true;
Você também pode coletar programaticamente logs de redirecionamento multimídia para ajudar nas investigações. Todos os logs da página da Web também estão disponíveis registrando-se no evento mmrExtensionLog
no documento.
O objeto de evento tem duas propriedades em detalhes:
Nível: indica que tipo de rastreamento é a entrada e permite filtrar eventos específicos. Pode ser um dos seguintes valores:
- informações
- verbose
- geral
- erro
Mensagem: a mensagem de rastreamento baseada em texto.
O seguinte exemplo mostra como registrar para o evento mmrExtensionLog
:
document.addEventListener('mmrExtensionLog', () =>
console.log("MMR event, level:" + event.detail.level + " : " + event.detail.message);
);
Conteúdo relacionado
Saiba mais sobre Redirecionamento multimídia para reprodução de vídeo e chamadas em uma sessão remota.