Forçar o tráfego de chamadas a ser intermediado por proxy no seu próprio servidor
Neste tutorial, você aprenderá a fazer proxy do tráfego de chamada dos Serviços de Comunicação do Azure em seus próprios servidores.
Em determinadas situações, pode ser útil ter todo o tráfego do cliente por proxy para um servidor que você possa controlar. Quando o SDK é inicializado, você pode fornecer os detalhes dos servidores para os quais deseja que o tráfego seja roteado. Uma vez habilitado, todo o tráfego de mídia (áudio/vídeo/compartilhamento de tela) viaja pelos servidores TURN fornecidos em vez dos padrões dos Serviços de Comunicação do Azure.
Neste tutorial, irá aprender a:
- Configure um servidor TURN.
- Configure um servidor proxy de sinalização.
Pré-requisitos
Nenhuma
O recurso de proxy está disponível em geral a partir da versão pública 1.25.1 do SDK de Chamada dos Serviços de Comunicação do Azure. Certifique-se de usar este SDK ou uma versão posterior do SDK quando tentar usar esse recurso. Este tutorial usa uma versão do Calling SDK 1.13.0-beta.1 onde esse recurso ficou disponível pela primeira vez na visualização pública.
Tráfego de mídia de chamada de proxy
As seções a seguir descrevem como chamar o tráfego de mídia por proxy.
O que é um servidor TURN?
Muitas vezes, estabelecer uma conexão de rede entre dois pares não é simples. Uma conexão direta pode não funcionar devido a:
- Firewalls com regras rígidas.
- Pares sentados atrás de uma rede privada.
- Computadores em execução em um ambiente NAT (conversão de endereços de rede).
Para resolver esses problemas de conexão de rede, você pode usar um servidor que usa o protocolo Traversal Using Relay NAT (TURN) para retransmitir o tráfego de rede. Os utilitários de passagem de sessão para servidores NAT (STUN) e TURN são os servidores de retransmissão.
Forneça os detalhes do servidor TURN ao SDK
Para fornecer os detalhes de seus servidores TURN, você precisa passar detalhes de qual servidor TURN usar como parte durante CallClientOptions
a inicialização CallClient
. Para obter mais informações sobre como configurar uma chamada, consulte SDK da Web dos Serviços de Comunicação do Azure para obter o início rápido sobre como configurar voz e vídeo.
import { CallClient } from '@azure/communication-calling';
const myTurn1 = {
urls: [
'turn:turn.azure.com:3478?transport=udp',
'turn:turn1.azure.com:3478?transport=udp',
],
username: 'turnserver1username',
credential: 'turnserver1credentialorpass'
};
const myTurn2 = {
urls: [
'turn:20.202.255.255:3478',
'turn:20.202.255.255:3478?transport=tcp',
],
username: 'turnserver2username',
credential: 'turnserver2credentialorpass'
};
// While you are creating an instance of the CallClient (the entry point of the SDK):
const callClient = new CallClient({
networkConfiguration: {
turn: {
iceServers: [
myTurn1,
myTurn2
]
}
}
});
// ...continue normally with your SDK setup and usage.
Importante
Se você forneceu os detalhes do servidor TURN enquanto inicializou CallClient
, todo o tráfego de mídia flui exclusivamente através desses servidores TURN. Quaisquer outros candidatos ICE que normalmente são gerados quando você cria uma chamada não serão considerados ao tentar estabelecer conectividade entre pares. Isso significa que apenas relay
os candidatos são considerados. Para saber mais sobre os diferentes tipos de candidatos ao Ice, consulte RTCIceCandidate: type property.
Se o ?transport
parâmetro query não estiver presente como parte da URL TURN ou não for um dos udp
valores , tcp
, ou , o tls
comportamento padrão será UDP.
Se qualquer uma das URLs fornecidas for inválida ou não tiver um dos turn:
esquemas, turns:
ou , CallClient
a stun:
inicialização falhará e lançará erros de acordo. As mensagens de erro lançadas devem ajudá-lo a solucionar problemas se você tiver problemas.
Para obter a referência de API para o CallClientOptions
objeto e a networkConfiguration
propriedade dentro dele, consulte CallClientOptions.
Configurar um servidor TURN no Azure
Você pode criar uma máquina virtual Linux no portal do Azure. Para obter mais informações, consulte Guia de início rápido: criar uma máquina virtual Linux no portal do Azure. Para implantar um servidor TURN, use coturn. Coturn é uma implementação livre e de código aberto de um servidor TURN e STUN para VoIP e WebRTC.
Depois de configurar um servidor TURN, você pode testá-lo usando as instruções na página da Web WebRTC Trickle ICE .
Proxy sinalizando tráfego
Para fornecer a URL de um servidor proxy, você precisa passá-la como parte do durante a inicialização CallClient
do CallClientOptions
. Para obter mais informações sobre como configurar uma chamada, consulte SDK da Web dos Serviços de Comunicação do Azure para obter o início rápido sobre como configurar voz e vídeo.
import { CallClient } from '@azure/communication-calling';
// While you are creating an instance of the CallClient (the entry point of the SDK):
const callClient = new CallClient({
networkConfiguration: {
proxy: {
url: 'https://myproxyserver.com'
}
}
});
// ...continue normally with your SDK setup and usage.
Nota
Se a URL de proxy fornecida for uma URL inválida, a CallClient
inicialização falhará e lançará erros de acordo. As mensagens de erro lançadas ajudam a solucionar problemas se você tiver problemas.
Para obter a referência de API para o CallClientOptions
objeto e a networkConfiguration
propriedade dentro dele, consulte CallClientOptions.
Configurar um middleware de proxy de sinalização no Express.js
Você também pode criar um middleware proxy na configuração do servidor Express.js para que todas as URLs sejam redirecionadas por meio dele usando o pacote http-proxy-middleware npm. A createProxyMiddleware
função desse pacote deve cobrir o que você precisa para uma configuração de proxy de redirecionamento simples. Aqui está um exemplo de uso dele com algumas configurações de opção que o SDK precisa para que todas as nossas URLs funcionem conforme o esperado:
const proxyRouter = (req) => {
// Your router function if you don't intend to set up a direct target
// An example:
if (!req.originalUrl && !req.url) {
return '';
}
const incomingUrl = req.originalUrl || req.url;
if (incomingUrl.includes('/proxy')) {
return 'https://microsoft.com/forwarder/';
}
return incomingUrl;
}
const myProxyMiddleware = createProxyMiddleware({
target: 'https://microsoft.com', // This will be ignored if a router function is provided, but createProxyMiddleware still requires this to be passed in (see its official docs on the npm page for the most recent changes)
router: proxyRouter,
changeOrigin: true,
secure: false, // If you have proper SSL setup, set this accordingly
followRedirects: true,
ignorePath: true,
ws: true,
logLevel: 'debug'
});
// And finally pass in your proxy middleware to your express app depending on your URL/host setup
app.use('/proxy', myProxyMiddleware);
Gorjeta
Se você estiver tendo problemas de SSL, consulte o pacote cors .
Configurar um servidor proxy de sinalização no Azure
Você pode criar uma máquina virtual Linux no portal do Azure e implantar um servidor NGINX nela. Para obter mais informações, consulte Guia de início rápido: criar uma máquina virtual Linux no portal do Azure.
Aqui está uma configuração NGINX que você pode usar como exemplo:
events {
multi_accept on;
worker_connections 65535;
}
http {
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
map $request_method $access_control_header {
OPTIONS '*';
}
server {
listen <port_you_want_listen_on> ssl;
ssl_certificate <path_to_your_ssl_cert>;
ssl_certificate_key <path_to_your_ssl_key>;
location ~* ^/(.*?\.(com|net)(?::[\d]+)?)/(.*)$ {
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin '*' always;
add_header Access-Control-Allow-Credentials 'true' always;
add_header Access-Control-Allow-Headers '*' always;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Max-Age 1728000;
add_header Content-Type 'text/plain';
add_header Content-Length 0;
return 204;
}
resolver 1.1.1.1;
set $ups_host $1;
set $r_uri $3;
rewrite ^/.*$ /$r_uri break;
proxy_set_header Host $ups_host;
proxy_ssl_server_name on;
proxy_ssl_protocols TLSv1.2;
proxy_ssl_ciphers DEFAULT;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header Authorization;
proxy_pass_request_headers on;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Proxy "";
proxy_set_header Access-Control-Allow-Origin $access_control_header;
proxy_pass https://$ups_host;
proxy_redirect https://$ups_host https://$host/$ups_host;
proxy_intercept_errors on;
error_page 301 302 307 = @process_redirect;
error_page 400 405 = @process_error_response;
}
location @process_redirect {
set $saved_redirect_location '$upstream_http_location';
resolver 1.1.1.1;
proxy_pass $saved_redirect_location;
add_header X-DBUG-MSG "301" always;
}
location @process_error_response {
add_header Access-Control-Allow-Origin * always;
}
}
}
O recurso de proxy não estará disponível para identidades do Teams e ações de interoperabilidade do Azure Communication Services Teams.
Tráfego de mídia de chamada de proxy
As seções a seguir descrevem como chamar o tráfego de mídia por proxy.
O que é um servidor TURN?
Muitas vezes, estabelecer uma conexão de rede entre dois pares não é simples. Uma conexão direta pode não funcionar devido a:
- Firewalls com regras rígidas.
- Pares sentados atrás de uma rede privada.
- Computadores em execução em um ambiente NAT (conversão de endereços de rede).
Para resolver esses problemas de conexão de rede, você pode usar um servidor que usa o protocolo Traversal Using Relay NAT (TURN) para retransmitir o tráfego de rede. Os utilitários de passagem de sessão para servidores NAT (STUN) e TURN são os servidores de retransmissão.
Forneça os detalhes do servidor TURN com o SDK
Para fornecer os detalhes de seus servidores TURN, você precisa passar detalhes de qual servidor TURN usar como parte durante CallClientOptions
a inicialização CallClient
. Para obter mais informações sobre como configurar uma chamada, consulte SDK do iOS dos Serviços de Comunicação do Azure para obter o início rápido sobre como configurar voz e vídeo.
let callClientOptions = new CallClientOptions()
let callNetworkOptions = new CallNetworkOptions()
let iceServer = IceServer()
iceServer.urls = ["turn:20.202.255.255"]
iceServer.udpPort = 3478
iceServer.realm = "turn.azure.com"
iceServer.username = "turnserver1username"
iceServer.password = "turnserver1password"
callNetworkOptions.iceServers = [iceServer]
// Supply the network options when creating an instance of the CallClient
callClientOptions.network = callNetworkOptions
self.callClient = CallClient(options: callClientOptions);
Importante
Se você forneceu os detalhes do servidor TURN enquanto inicializou CallClient
, todo o tráfego de mídia flui exclusivamente através desses servidores TURN. Quaisquer outros candidatos ICE que normalmente são gerados quando você cria uma chamada não serão considerados ao tentar estabelecer conectividade entre pares. Isso significa que apenas relay
os candidatos são considerados. Para saber mais sobre os diferentes tipos de candidatos do Ice, consulte RTCIceCandidate: propriedade type.
Atualmente, o Android SDK suporta apenas um único endereço IPv4 e protocolo UDP para proxy de mídia. Se uma porta UDP não for fornecida, uma porta UDP padrão 3478 será usada. O SDK lançará um Failed to set media proxy
erro ao chamar setIceServer
com entrada sem suporte da seguinte maneira:
- Mais de um servidor ICE é fornecido na lista IceServers.
- Mais de uma url é fornecida na lista de urls do IceServer.
- URL IPv6 é fornecido na lista de url.
- Apenas a porta TCP é fornecida.
- As informações do território não são fornecidas.
Se as informações do servidor ICE fornecidas forem inválidas, a CallClient
inicialização falhará e lançará erros de acordo.
Configurar um servidor TURN no Azure
Você pode criar uma máquina virtual Linux no portal do Azure. Para obter mais informações, consulte Guia de início rápido: criar uma máquina virtual Linux no portal do Azure. Para implantar um servidor TURN, use coturn. Coturn é uma implementação livre e de código aberto de um servidor TURN e STUN para VoIP e WebRTC.
Depois de configurar um servidor TURN, você pode testá-lo usando as instruções na página da Web WebRTC Trickle ICE .
Proxy sinalizando tráfego
Para fornecer a URL de um servidor proxy, você precisa passá-la como parte de CallClientOptions
sua propriedade Network
durante a inicialização CallClient
do . Para obter mais informações sobre como configurar uma chamada, consulte SDK do iOS dos Serviços de Comunicação do Azure para obter o início rápido sobre como configurar voz e vídeo.
let callClientOptions = CallClientOptions()
let callNetworkOptions = CallNetworkOptions()
callNetworkOptions.proxyUrl = proxyUrl
callClientOptions.network = callNetworkOptions
self.callClient = CallClient(options: callClientOptions)
// ...continue normally with your SDK setup and usage.
Configurar um servidor proxy de sinalização no Azure
Você pode criar uma máquina virtual Linux no portal do Azure e implantar um servidor NGINX nela. Para obter mais informações, consulte Guia de início rápido: criar uma máquina virtual Linux no portal do Azure.
Aqui está uma configuração NGINX que você pode usar como exemplo:
events {
multi_accept on;
worker_connections 65535;
}
http {
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
map $request_method $access_control_header {
OPTIONS '*';
}
server {
listen <port_you_want_listen_on> ssl;
ssl_certificate <path_to_your_ssl_cert>;
ssl_certificate_key <path_to_your_ssl_key>;
location ~* ^/(.*?\.(com|net)(?::[\d]+)?)/(.*)$ {
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin '*' always;
add_header Access-Control-Allow-Credentials 'true' always;
add_header Access-Control-Allow-Headers '*' always;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Max-Age 1728000;
add_header Content-Type 'text/plain';
add_header Content-Length 0;
return 204;
}
resolver 1.1.1.1;
set $ups_host $1;
set $r_uri $3;
rewrite ^/.*$ /$r_uri break;
proxy_set_header Host $ups_host;
proxy_ssl_server_name on;
proxy_ssl_protocols TLSv1.2;
proxy_ssl_ciphers DEFAULT;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header Authorization;
proxy_pass_request_headers on;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Proxy "";
proxy_set_header Access-Control-Allow-Origin $access_control_header;
proxy_pass https://$ups_host;
proxy_redirect https://$ups_host https://$host/$ups_host;
proxy_intercept_errors on;
error_page 301 302 307 = @process_redirect;
error_page 400 405 = @process_error_response;
}
location @process_redirect {
set $saved_redirect_location '$upstream_http_location';
resolver 1.1.1.1;
proxy_pass $saved_redirect_location;
add_header X-DBUG-MSG "301" always;
}
location @process_error_response {
add_header Access-Control-Allow-Origin * always;
}
}
}
O recurso de proxy não estará disponível para identidades do Teams e ações de interoperabilidade do Azure Communication Services Teams.
Tráfego de mídia de chamada de proxy
As seções a seguir descrevem como chamar o tráfego de mídia por proxy.
O que é um servidor TURN?
Muitas vezes, estabelecer uma conexão de rede entre dois pares não é simples. Uma conexão direta pode não funcionar devido a:
- Firewalls com regras rígidas.
- Pares sentados atrás de uma rede privada.
- Computadores em execução em um ambiente NAT (conversão de endereços de rede).
Para resolver esses problemas de conexão de rede, você pode usar um servidor que usa o protocolo Traversal Using Relay NAT (TURN) para retransmitir o tráfego de rede. Os utilitários de passagem de sessão para servidores NAT (STUN) e TURN são os servidores de retransmissão.
Forneça os detalhes do servidor TURN com o SDK
Para fornecer os detalhes de seus servidores TURN, você precisa passar detalhes de qual servidor TURN usar como parte durante CallClientOptions
a inicialização CallClient
. Para obter mais informações sobre como configurar uma chamada, consulte SDK Android dos Serviços de Comunicação do Azure para obter o início rápido sobre como configurar voz e vídeo.
CallClientOptions callClientOptions = new CallClientOptions();
CallNetworkOptions callNetworkOptions = new CallNetworkOptions();
IceServer iceServer = new IceServer();
iceServer.setUrls(Arrays.asList("turn:20.202.255.255"));
iceServer.setUdpPort(3478);
iceServer.setRealm("turn.azure.com"); // Realm information is required.
iceServer.setUsername("turnserver1username");
iceServer.setPassword("turnserver1password");
callNetworkOptions.setIceServers(Arrays.asList(iceServer));
// Supply the network options when creating an instance of the CallClient
callClientOptions.setNetwork(callNetworkOptions);
CallClient callClient = new CallClient(callClientOptions);
Importante
Se você forneceu os detalhes do servidor TURN enquanto inicializou CallClient
, todo o tráfego de mídia flui exclusivamente através desses servidores TURN. Quaisquer outros candidatos ICE que normalmente são gerados quando você cria uma chamada não serão considerados ao tentar estabelecer conectividade entre pares. Isso significa que apenas relay
os candidatos são considerados. Para saber mais sobre os diferentes tipos de candidatos do Ice, consulte RTCIceCandidate: propriedade type.
Atualmente, o Android SDK suporta apenas um único endereço IPv4 e protocolo UDP para proxy de mídia. Se uma porta UDP não for fornecida, uma porta UDP padrão 3478 será usada. O SDK lançará um Failed to set media proxy
erro ao chamar setIceServer
com entrada sem suporte da seguinte maneira:
- Mais de um servidor ICE é fornecido na lista IceServers.
- Mais de uma url é fornecida na lista de urls do IceServer.
- URL IPv6 é fornecido na lista de url.
- Apenas a porta TCP é fornecida.
- As informações do território não são fornecidas.
Se as informações do servidor ICE fornecidas forem inválidas, a CallClient
inicialização falhará e lançará erros de acordo.
Configurar um servidor TURN no Azure
Você pode criar uma máquina virtual Linux no portal do Azure. Para obter mais informações, consulte Guia de início rápido: criar uma máquina virtual Linux no portal do Azure. Para implantar um servidor TURN, use coturn. Coturn é uma implementação livre e de código aberto de um servidor TURN e STUN para VoIP e WebRTC.
Depois de configurar um servidor TURN, você pode testá-lo usando as instruções na página da Web WebRTC Trickle ICE .
Proxy sinalizando tráfego
Para fornecer a URL de um servidor proxy, você precisa passá-la como parte de CallClientOptions
sua propriedade Network
durante a inicialização CallClient
do . Para obter mais informações sobre como configurar uma chamada, consulte SDK Android dos Serviços de Comunicação do Azure para obter o início rápido sobre como configurar voz e vídeo.
CallClientOptions callClientOptions = new CallClientOptions();
CallNetworkOptions callNetworkOptions = new CallNetworkOptions();
callNetworkOptions.setProxyUrl("https://myproxyserver.com");
callClientOptions.setNetwork(callNetworkOptions);
CallClient callClient = new CallClient(callClientOptions);
// ...continue normally with your SDK setup and usage.
Configurar um servidor proxy de sinalização no Azure
Você pode criar uma máquina virtual Linux no portal do Azure e implantar um servidor NGINX nela. Para obter mais informações, consulte Guia de início rápido: criar uma máquina virtual Linux no portal do Azure.
Aqui está uma configuração NGINX que você pode usar como exemplo:
events {
multi_accept on;
worker_connections 65535;
}
http {
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
map $request_method $access_control_header {
OPTIONS '*';
}
server {
listen <port_you_want_listen_on> ssl;
ssl_certificate <path_to_your_ssl_cert>;
ssl_certificate_key <path_to_your_ssl_key>;
location ~* ^/(.*?\.(com|net)(?::[\d]+)?)/(.*)$ {
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin '*' always;
add_header Access-Control-Allow-Credentials 'true' always;
add_header Access-Control-Allow-Headers '*' always;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Max-Age 1728000;
add_header Content-Type 'text/plain';
add_header Content-Length 0;
return 204;
}
resolver 1.1.1.1;
set $ups_host $1;
set $r_uri $3;
rewrite ^/.*$ /$r_uri break;
proxy_set_header Host $ups_host;
proxy_ssl_server_name on;
proxy_ssl_protocols TLSv1.2;
proxy_ssl_ciphers DEFAULT;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header Authorization;
proxy_pass_request_headers on;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Proxy "";
proxy_set_header Access-Control-Allow-Origin $access_control_header;
proxy_pass https://$ups_host;
proxy_redirect https://$ups_host https://$host/$ups_host;
proxy_intercept_errors on;
error_page 301 302 307 = @process_redirect;
error_page 400 405 = @process_error_response;
}
location @process_redirect {
set $saved_redirect_location '$upstream_http_location';
resolver 1.1.1.1;
proxy_pass $saved_redirect_location;
add_header X-DBUG-MSG "301" always;
}
location @process_error_response {
add_header Access-Control-Allow-Origin * always;
}
}
}
O recurso de proxy não estará disponível para identidades do Teams e ações de interoperabilidade do Azure Communication Services Teams.
Tráfego de mídia de chamada de proxy
As seções a seguir descrevem como chamar o tráfego de mídia por proxy.
O que é um servidor TURN?
Muitas vezes, estabelecer uma conexão de rede entre dois pares não é simples. Uma conexão direta pode não funcionar devido a:
- Firewalls com regras rígidas.
- Pares sentados atrás de uma rede privada.
- Computadores em execução em um ambiente NAT (conversão de endereços de rede).
Para resolver esses problemas de conexão de rede, você pode usar um servidor que usa o protocolo Traversal Using Relay NAT (TURN) para retransmitir o tráfego de rede. Os utilitários de passagem de sessão para servidores NAT (STUN) e TURN são os servidores de retransmissão.
Forneça os detalhes do servidor TURN com o SDK
Para fornecer os detalhes de seus servidores TURN, você precisa passar detalhes de qual servidor TURN usar como parte durante CallClientOptions
a inicialização CallClient
. Para obter mais informações sobre como configurar uma chamada, consulte SDK do Windows dos Serviços de Comunicação do Azure para obter o início rápido sobre como configurar voz e vídeo.
CallClientOptions callClientOptions = new CallClientOptions();
CallNetworkOptions callNetworkOptions = new CallNetworkOptions();
IceServer iceServer = new IceServer();
iceServer.Uris = new List<Uri>() { new Uri("turn:20.202.255.255") }.AsReadOnly();
iceServer.UdpPort = 3478;
iceServer.Realm = "turn.azure.com";
iceServer.Username = "turnserver1username";
iceServer.Password = "turnserver1password";
callNetworkOptions.IceServers = new List<IceServer>() { iceServer }.AsReadOnly();
// Supply the network options when creating an instance of the CallClient
callClientOptions.Network = callNetworkOptions;
CallClient callClient = new CallClient(callClientOptions);
Importante
Se você forneceu os detalhes do servidor TURN enquanto inicializou CallClient
, todo o tráfego de mídia flui exclusivamente através desses servidores TURN. Quaisquer outros candidatos ICE que normalmente são gerados quando você cria uma chamada não serão considerados ao tentar estabelecer conectividade entre pares. Isso significa que apenas relay
os candidatos são considerados. Para saber mais sobre os diferentes tipos de candidatos do Ice, consulte RTCIceCandidate: propriedade type.
Atualmente, o Android SDK suporta apenas um único endereço IPv4 e protocolo UDP para proxy de mídia. Se uma porta UDP não for fornecida, uma porta UDP padrão 3478 será usada. O SDK lançará um Failed to set media proxy
erro ao chamar setIceServer
com entrada sem suporte da seguinte maneira:
- Mais de um servidor ICE é fornecido na lista IceServers.
- Mais de uma url é fornecida na lista de urls do IceServer.
- URL IPv6 é fornecido na lista de url.
- Apenas a porta TCP é fornecida.
- As informações do território não são fornecidas.
Se as informações do servidor ICE fornecidas forem inválidas, a CallClient
inicialização falhará e lançará erros de acordo.
Configurar um servidor TURN no Azure
Você pode criar uma máquina virtual Linux no portal do Azure. Para obter mais informações, consulte Guia de início rápido: criar uma máquina virtual Linux no portal do Azure. Para implantar um servidor TURN, use coturn. Coturn é uma implementação livre e de código aberto de um servidor TURN e STUN para VoIP e WebRTC.
Depois de configurar um servidor TURN, você pode testá-lo usando as instruções na página da Web WebRTC Trickle ICE .
Proxy sinalizando tráfego
Para fornecer a URL de um servidor proxy, você precisa passá-la como parte de CallClientOptions
sua propriedade Network
durante a inicialização CallClient
do . Para obter mais informações sobre como configurar uma chamada, consulte SDK do Windows dos Serviços de Comunicação do Azure para obter o início rápido sobre como configurar voz e vídeo.
CallClientOptions callClientOptions = new CallClientOptions();
CallNetworkOptions callNetworkOptions = new CallNetworkOptions();
callNetworkOptions.ProxyUri = new Uri("https://myproxyserver.com");
callClientOptions.Network = callNetworkOptions;
CallClient callClient = new CallClient(callClientOptions);
// ...continue normally with your SDK setup and usage.
Configurar um servidor proxy de sinalização no Azure
Você pode criar uma máquina virtual Linux no portal do Azure e implantar um servidor NGINX nela. Para obter mais informações, consulte Guia de início rápido: criar uma máquina virtual Linux no portal do Azure.
Aqui está uma configuração NGINX que você pode usar como exemplo:
events {
multi_accept on;
worker_connections 65535;
}
http {
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
map $request_method $access_control_header {
OPTIONS '*';
}
server {
listen <port_you_want_listen_on> ssl;
ssl_certificate <path_to_your_ssl_cert>;
ssl_certificate_key <path_to_your_ssl_key>;
location ~* ^/(.*?\.(com|net)(?::[\d]+)?)/(.*)$ {
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin '*' always;
add_header Access-Control-Allow-Credentials 'true' always;
add_header Access-Control-Allow-Headers '*' always;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Max-Age 1728000;
add_header Content-Type 'text/plain';
add_header Content-Length 0;
return 204;
}
resolver 1.1.1.1;
set $ups_host $1;
set $r_uri $3;
rewrite ^/.*$ /$r_uri break;
proxy_set_header Host $ups_host;
proxy_ssl_server_name on;
proxy_ssl_protocols TLSv1.2;
proxy_ssl_ciphers DEFAULT;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header Authorization;
proxy_pass_request_headers on;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Proxy "";
proxy_set_header Access-Control-Allow-Origin $access_control_header;
proxy_pass https://$ups_host;
proxy_redirect https://$ups_host https://$host/$ups_host;
proxy_intercept_errors on;
error_page 301 302 307 = @process_redirect;
error_page 400 405 = @process_error_response;
}
location @process_redirect {
set $saved_redirect_location '$upstream_http_location';
resolver 1.1.1.1;
proxy_pass $saved_redirect_location;
add_header X-DBUG-MSG "301" always;
}
location @process_error_response {
add_header Access-Control-Allow-Origin * always;
}
}
}