Forzare la chiamata del traffico tramite proxy nel proprio server
In questa esercitazione si apprenderà come eseguire il proxy di Servizi di comunicazione di Azure chiamando il traffico tra i propri server.
In determinate situazioni, potrebbe essere utile disporre di tutto il traffico client soggetto a proxy a un server che è possibile controllare. Quando l'SDK viene inizializzato, è possibile fornire i dettagli dei server a cui si desidera instradare il traffico. Una volta abilitato, tutto il traffico multimediale (audio/video/condivisione dello schermo) passa attraverso i server TURN forniti invece delle impostazioni predefinite di Servizi di comunicazione di Azure.
In questa esercitazione apprenderai a:
- Configurare un server TURN.
- Configurare un server proxy di segnalazione.
Prerequisiti
None
La funzionalità proxy è disponibile a partire dalla versione pubblica 1.25.1 di Azure Communication Services Calling SDK. Assicurarsi di usare questo SDK o una versione successiva dell'SDK quando si tenta di usare questa funzionalità. Questa esercitazione usa una versione di Calling SDK 1.13.0-beta.1 in cui questa funzionalità è diventata la prima disponibile in anteprima pubblica.
Proxy che chiama il traffico multimediale
Le sezioni seguenti descrivono come usare un proxy per chiamare il traffico multimediale.
Che cos'è un server TURN?
Spesso non è facile stabilire una connessione di rete tra due peer. Una connessione diretta potrebbe non funzionare a causa di:
- Firewall con regole rigorose.
- Peer situati dietro una rete privata.
- Computer in esecuzione in un ambiente Network Address Translation (NAT).
Per risolvere questi problemi di connessione di rete, è possibile usare un server che usa il protocollo Traversal Using Relay NAT (TURN) per l'inoltro del traffico di rete. Le utilità di attraversamento sessione per i server NAT (STUN) e TURN sono i server di inoltro.
Specificare i dettagli del server TURN all'SDK
Per fornire i dettagli dei server TURN, è necessario passare i dettagli del server TURN da usare come parte di CallClientOptions
durante l'inizializzazione di CallClient
. Per altre informazioni su come configurare una chiamata, vedere SDK Web di Servizi di comunicazione di Azure per l'avvio rapido su come configurare voce e video.
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 sono stati specificati i dettagli del server TURN durante l'inizializzazione di CallClient
, tutto il traffico multimediale passa esclusivamente attraverso questi server TURN. Tutti gli altri candidati ICE generati normalmente quando si crea una chiamata non verranno considerati durante il tentativo di stabilire la connettività tra peer. Ciò significa che vengono considerati solo i candidati relay
. Per altre informazioni sui differenti tipi di candidati Ice, vedere RTCIceCandidate: proprietà tipo.
Se il parametro di query ?transport
non è presente come parte dell'URL TURN o non è uno dei valori udp
, tcp
o tls
, il comportamento predefinito è UDP.
Se uno degli URL forniti non è valido o non ha uno degli schemi turn:
, turns:
o stun:
, l'inizializzazione CallClient
ha esito negativo e genera errori di conseguenza. I messaggi di errore generati dovrebbero aiutare a risolvere i problemi in caso di problemi.
Per informazioni di riferimento sull'API per l'oggetto CallClientOptions
e la proprietà networkConfiguration
all'interno di esso, vedere CallClientOptions.
Configurare un server TURN in Azure
Creare una macchina virtuale Linux nel portale di Azure. Per altre informazioni, vedere Guida introduttiva: Creare una macchina virtuale Linux nel portale di Azure. Per distribuire un server TURN, usare coturn. Coturn è un'implementazione gratuita e open source di un server TURN e STUN per VoIP e WebRTC.
Dopo aver configurato un server TURN, è possibile testarlo usando le istruzioni disponibili nella pagina Web WebRTC Trickle ICE.
Traffico di segnalazione proxy
Per fornire l'URL di un server proxy, è necessario passarlo come parte di CallClientOptions
durante l'inizializzazione di CallClient
. Per altre informazioni su come configurare una chiamata, vedere SDK Web di Servizi di comunicazione di Azure per l'avvio rapido su come configurare voce e video.
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 l'URL proxy specificato è un URL non valido, l'inizializzazione di CallClient
non riesce e genera errori di conseguenza. I messaggi di errore generati consentono di risolvere i problemi in caso di problemi.
Per informazioni di riferimento sull'API per l'oggetto CallClientOptions
e la proprietà networkConfiguration
all'interno di esso, vedere CallClientOptions.
Configurare un middleware proxy di segnalazione in Express.js
È anche possibile creare un middleware proxy nell'installazione del server Express.js per fare in modo che tutti gli URL vengano reindirizzati tramite esso usando il pacchetto npm http-proxy-middleware. La funzione createProxyMiddleware
di tale pacchetto deve coprire ciò che è necessario per una semplice configurazione del proxy di reindirizzamento. Di seguito è riportato un esempio di utilizzo con alcune impostazioni di opzione necessarie per l'SDK in modo che tutti gli URL funzionino come previsto:
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);
Suggerimento
Se si verificano problemi con SSL, vedere il pacchetto cors.
Configurare un server proxy di segnalazione in Azure
È possibile creare una macchina virtuale Linux nel portale di Azure e distribuire un server NGINX nella suddetta. Per altre informazioni, vedere Guida introduttiva: Creare una macchina virtuale Linux nel portale di Azure.
Qui di seguito è fornita una configurazione NGINX che è possibile usare come esempio:
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;
}
}
}
La funzionalità proxy non sarà disponibile per le identità di Teams e le azioni di interoperabilità di Teams di Servizi di comunicazione di Azure.
Proxy che chiama il traffico multimediale
Le sezioni seguenti descrivono come usare un proxy per chiamare il traffico multimediale.
Che cos'è un server TURN?
Spesso non è facile stabilire una connessione di rete tra due peer. Una connessione diretta potrebbe non funzionare a causa di:
- Firewall con regole rigorose.
- Peer situati dietro una rete privata.
- Computer in esecuzione in un ambiente Network Address Translation (NAT).
Per risolvere questi problemi di connessione di rete, è possibile usare un server che usa il protocollo Traversal Using Relay NAT (TURN) per l'inoltro del traffico di rete. Le utilità di attraversamento sessione per i server NAT (STUN) e TURN sono i server di inoltro.
Specificare i dettagli del server TURN con l'SDK
Per fornire i dettagli dei server TURN, è necessario passare i dettagli del server TURN da usare come parte di CallClientOptions
durante l'inizializzazione di CallClient
. Per altre informazioni su come configurare una chiamata, vedere SDK iOS di Servizi di comunicazione di Azure per l'avvio rapido su come configurare voce e video.
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 sono stati specificati i dettagli del server TURN durante l'inizializzazione di CallClient
, tutto il traffico multimediale passa esclusivamente attraverso questi server TURN. Tutti gli altri candidati ICE generati normalmente quando si crea una chiamata non verranno considerati durante il tentativo di stabilire la connettività tra peer. Ciò significa che vengono considerati solo i candidati relay
. Per altre informazioni sui differenti tipi di candidati Ice, vedere RTCIceCandidate: proprietà tipo.
Attualmente, Android SDK supporta solo un singolo indirizzo IPv4 e il protocollo UDP per il proxy multimediale. Se non viene fornita una porta UDP, viene usata una porta UDP predefinita 3478. L'SDK genererà un errore Failed to set media proxy
quando si chiama setIceServer
con input non supportato come indicato di seguito:
- Nell'elenco IceServers sono disponibili diversi server ICE.
- Nell'elenco di URL di IceServer vengono forniti diversi URL.
- L'URL IPv6 viene fornito nell'elenco di URL.
- Viene fornita solo la porta TCP.
- Le informazioni sull'area di autenticazione non sono fornite.
Se le informazioni sul server ICE fornite non sono valide, l'inizializzazione di CallClient
non riesce e genera errori di conseguenza.
Configurare un server TURN in Azure
Creare una macchina virtuale Linux nel portale di Azure. Per altre informazioni, vedere Guida introduttiva: Creare una macchina virtuale Linux nel portale di Azure. Per distribuire un server TURN, usare coturn. Coturn è un'implementazione gratuita e open source di un server TURN e STUN per VoIP e WebRTC.
Dopo aver configurato un server TURN, è possibile testarlo usando le istruzioni disponibili nella pagina Web WebRTC Trickle ICE.
Traffico di segnalazione proxy
Per fornire l'URL di un server proxy, è necessario passarlo come parte di CallClientOptions
tramite la sua proprietà Network
durante l'inizializzazione di CallClient
. Per altre informazioni su come configurare una chiamata, vedere SDK iOS di Servizi di comunicazione di Azure per l'avvio rapido su come configurare voce e video.
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.
Configurare un server proxy di segnalazione in Azure
È possibile creare una macchina virtuale Linux nel portale di Azure e distribuire un server NGINX nella suddetta. Per altre informazioni, vedere Guida introduttiva: Creare una macchina virtuale Linux nel portale di Azure.
Qui di seguito è fornita una configurazione NGINX che è possibile usare come esempio:
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;
}
}
}
La funzionalità proxy non sarà disponibile per le identità di Teams e le azioni di interoperabilità di Teams di Servizi di comunicazione di Azure.
Proxy che chiama il traffico multimediale
Le sezioni seguenti descrivono come usare un proxy per chiamare il traffico multimediale.
Che cos'è un server TURN?
Spesso non è facile stabilire una connessione di rete tra due peer. Una connessione diretta potrebbe non funzionare a causa di:
- Firewall con regole rigorose.
- Peer situati dietro una rete privata.
- Computer in esecuzione in un ambiente Network Address Translation (NAT).
Per risolvere questi problemi di connessione di rete, è possibile usare un server che usa il protocollo Traversal Using Relay NAT (TURN) per l'inoltro del traffico di rete. Le utilità di attraversamento sessione per i server NAT (STUN) e TURN sono i server di inoltro.
Specificare i dettagli del server TURN con l'SDK
Per fornire i dettagli dei server TURN, è necessario passare i dettagli del server TURN da usare come parte di CallClientOptions
durante l'inizializzazione di CallClient
. Per altre informazioni su come configurare una chiamata, vedere Android SDK di Servizi di comunicazione di Azure per l'avvio rapido su come configurare voce e video.
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 sono stati specificati i dettagli del server TURN durante l'inizializzazione di CallClient
, tutto il traffico multimediale passa esclusivamente attraverso questi server TURN. Tutti gli altri candidati ICE generati normalmente quando si crea una chiamata non verranno considerati durante il tentativo di stabilire la connettività tra peer. Ciò significa che vengono considerati solo i candidati relay
. Per altre informazioni sui differenti tipi di candidati Ice, vedere RTCIceCandidate: proprietà tipo.
Attualmente, Android SDK supporta solo un singolo indirizzo IPv4 e il protocollo UDP per il proxy multimediale. Se non viene fornita una porta UDP, viene usata una porta UDP predefinita 3478. L'SDK genererà un errore Failed to set media proxy
quando si chiama setIceServer
con input non supportato come indicato di seguito:
- Nell'elenco IceServers sono disponibili diversi server ICE.
- Nell'elenco di URL di IceServer vengono forniti diversi URL.
- L'URL IPv6 viene fornito nell'elenco di URL.
- Viene fornita solo la porta TCP.
- Le informazioni sull'area di autenticazione non sono fornite.
Se le informazioni sul server ICE fornite non sono valide, l'inizializzazione di CallClient
non riesce e genera errori di conseguenza.
Configurare un server TURN in Azure
Creare una macchina virtuale Linux nel portale di Azure. Per altre informazioni, vedere Guida introduttiva: Creare una macchina virtuale Linux nel portale di Azure. Per distribuire un server TURN, usare coturn. Coturn è un'implementazione gratuita e open source di un server TURN e STUN per VoIP e WebRTC.
Dopo aver configurato un server TURN, è possibile testarlo usando le istruzioni disponibili nella pagina Web WebRTC Trickle ICE.
Traffico di segnalazione proxy
Per fornire l'URL di un server proxy, è necessario passarlo come parte di CallClientOptions
tramite la sua proprietà Network
durante l'inizializzazione di CallClient
. Per altre informazioni su come configurare una chiamata, vedere Android SDK di Servizi di comunicazione di Azure per l'avvio rapido su come configurare voce e video.
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.
Configurare un server proxy di segnalazione in Azure
È possibile creare una macchina virtuale Linux nel portale di Azure e distribuire un server NGINX nella suddetta. Per altre informazioni, vedere Guida introduttiva: Creare una macchina virtuale Linux nel portale di Azure.
Qui di seguito è fornita una configurazione NGINX che è possibile usare come esempio:
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;
}
}
}
La funzionalità proxy non sarà disponibile per le identità di Teams e le azioni di interoperabilità di Teams di Servizi di comunicazione di Azure.
Proxy che chiama il traffico multimediale
Le sezioni seguenti descrivono come usare un proxy per chiamare il traffico multimediale.
Che cos'è un server TURN?
Spesso non è facile stabilire una connessione di rete tra due peer. Una connessione diretta potrebbe non funzionare a causa di:
- Firewall con regole rigorose.
- Peer situati dietro una rete privata.
- Computer in esecuzione in un ambiente Network Address Translation (NAT).
Per risolvere questi problemi di connessione di rete, è possibile usare un server che usa il protocollo Traversal Using Relay NAT (TURN) per l'inoltro del traffico di rete. Le utilità di attraversamento sessione per i server NAT (STUN) e TURN sono i server di inoltro.
Specificare i dettagli del server TURN con l'SDK
Per fornire i dettagli dei server TURN, è necessario passare i dettagli del server TURN da usare come parte di CallClientOptions
durante l'inizializzazione di CallClient
. Per altre informazioni su come configurare una chiamata, vedere Windows SDK di Servizi di comunicazione di Azure per l'avvio rapido su come configurare voce e video.
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 sono stati specificati i dettagli del server TURN durante l'inizializzazione di CallClient
, tutto il traffico multimediale passa esclusivamente attraverso questi server TURN. Tutti gli altri candidati ICE generati normalmente quando si crea una chiamata non verranno considerati durante il tentativo di stabilire la connettività tra peer. Ciò significa che vengono considerati solo i candidati relay
. Per altre informazioni sui differenti tipi di candidati Ice, vedere RTCIceCandidate: proprietà tipo.
Attualmente, Android SDK supporta solo un singolo indirizzo IPv4 e il protocollo UDP per il proxy multimediale. Se non viene fornita una porta UDP, viene usata una porta UDP predefinita 3478. L'SDK genererà un errore Failed to set media proxy
quando si chiama setIceServer
con input non supportato come indicato di seguito:
- Nell'elenco IceServers sono disponibili diversi server ICE.
- Nell'elenco di URL di IceServer vengono forniti diversi URL.
- L'URL IPv6 viene fornito nell'elenco di URL.
- Viene fornita solo la porta TCP.
- Le informazioni sull'area di autenticazione non sono fornite.
Se le informazioni sul server ICE fornite non sono valide, l'inizializzazione di CallClient
non riesce e genera errori di conseguenza.
Configurare un server TURN in Azure
Creare una macchina virtuale Linux nel portale di Azure. Per altre informazioni, vedere Guida introduttiva: Creare una macchina virtuale Linux nel portale di Azure. Per distribuire un server TURN, usare coturn. Coturn è un'implementazione gratuita e open source di un server TURN e STUN per VoIP e WebRTC.
Dopo aver configurato un server TURN, è possibile testarlo usando le istruzioni disponibili nella pagina Web WebRTC Trickle ICE.
Traffico di segnalazione proxy
Per fornire l'URL di un server proxy, è necessario passarlo come parte di CallClientOptions
tramite la sua proprietà Network
durante l'inizializzazione di CallClient
. Per altre informazioni su come configurare una chiamata, vedere Windows SDK di Servizi di comunicazione di Azure per l'avvio rapido su come configurare voce e video.
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.
Configurare un server proxy di segnalazione in Azure
È possibile creare una macchina virtuale Linux nel portale di Azure e distribuire un server NGINX nella suddetta. Per altre informazioni, vedere Guida introduttiva: Creare una macchina virtuale Linux nel portale di Azure.
Qui di seguito è fornita una configurazione NGINX che è possibile usare come esempio:
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;
}
}
}