Afdwingen dat het aanroepen van verkeer wordt geproxied op uw eigen server
In deze zelfstudie leert u hoe u uw Azure Communication Services-aanroepverkeer proxyt op uw eigen servers.
In bepaalde situaties kan het handig zijn om al uw clientverkeer te laten doorsturen naar een server die u kunt beheren. Wanneer de SDK wordt geïnitialiseerd, kunt u de details opgeven van uw servers waarnaar u het verkeer wilt routeren. Zodra dit is ingeschakeld, gaat al het mediaverkeer (audio/video/scherm delen) door de opgegeven TURN-servers in plaats van de standaardinstellingen van Azure Communication Services.
In deze zelfstudie leert u het volgende:
- Stel een TURN-server in.
- Stel een signaleringsproxyserver in.
Vereisten
Geen
De proxyfunctie is algemeen beschikbaar vanaf de openbare versie 1.25.1 van azure Communication Services Calling SDK. Zorg ervoor dat u deze SDK of een latere versie van de SDK gebruikt wanneer u deze functie probeert te gebruiken. In deze zelfstudie wordt een versie van de Calling SDK 1.13.0-beta.1 gebruikt, waarbij deze functie voor het eerst beschikbaar werd in openbare preview.
Mediaverkeer via proxy aanroepen
In de volgende secties wordt beschreven hoe u uw mediaverkeer via proxy kunt aanroepen.
Wat is een TURN-server?
Vaak is het tot stand brengen van een netwerkverbinding tussen twee peers niet eenvoudig. Een directe verbinding werkt mogelijk niet vanwege:
- Firewalls met strikte regels.
- Peers die achter een particulier netwerk zitten.
- Computers die worden uitgevoerd in een NAT-omgeving (Network Address Translation).
Als u deze problemen met de netwerkverbinding wilt oplossen, kunt u een server gebruiken die gebruikmaakt van het Traversal Using Relay NAT-protocol (TURN) voor het doorsturen van netwerkverkeer. Session Traversal Utilities for NAT (STUN) en TURN-servers zijn de relayservers.
Geef de DETAILS van uw TURN-server op voor de SDK
Als u de details van uw TURN-servers wilt opgeven, moet u details doorgeven over welke TURN-server moet worden gebruikt als onderdeel van CallClientOptions
het initialiseren CallClient
. Zie de Azure Communication Services-web-SDK voor de quickstart over het instellen van spraak en video voor meer informatie over het instellen van een gesprek.
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.
Belangrijk
Als u uw TURN-servergegevens hebt opgegeven tijdens het initialiseren CallClient
, stroomt al het mediaverkeer uitsluitend via deze TURN-servers. Alle andere ICE-kandidaten die normaal gesproken worden gegenereerd wanneer u een oproep maakt, worden niet meegenomen bij het tot stand brengen van connectiviteit tussen peers. Dat betekent dat alleen relay
kandidaten worden overwogen. Zie RTCIceCandidate: type eigenschap voor meer informatie over verschillende soorten Ice-kandidaten.
Als de ?transport
queryparameter niet aanwezig is als onderdeel van de TURN-URL of geen van de udp
, tcp
of tls
waarden is, is het standaardgedrag UDP.
Als een van de opgegeven URL's ongeldig is of geen van de turn:
, turns:
of stun:
schema's heeft, mislukt de CallClient
initialisatie en genereert deze fouten dienovereenkomstig. De foutberichten die worden gegenereerd, kunnen u helpen bij het oplossen van problemen als u problemen ondervindt.
Zie CallClientOptions voor de API-verwijzing voor het CallClientOptions
object en de networkConfiguration
eigenschap erin.
Een TURN-server instellen in Azure
U kunt een virtuele Linux-machine maken in Azure Portal. Zie quickstart: Een virtuele Linux-machine maken in Azure Portal voor meer informatie. Als u een TURN-server wilt implementeren, gebruikt u coturn. Coturn is een gratis en opensource-implementatie van een TURN- en STUN-server voor VoIP en WebRTC.
Nadat u een TURN-server hebt ingesteld, kunt u deze testen met behulp van de instructies op de WebRTC Trickle ICE-webpagina .
Proxysignaalverkeer
Als u de URL van een proxyserver wilt opgeven, moet u deze doorgeven als onderdeel van CallClientOptions
het initialiseren CallClient
. Zie de Azure Communication Services-web-SDK voor de quickstart over het instellen van spraak en video voor meer informatie over het instellen van een gesprek.
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.
Notitie
Als de opgegeven proxy-URL een ongeldige URL is, mislukt de CallClient
initialisatie en genereert deze fouten dienovereenkomstig. De foutberichten die worden gegenereerd, helpen u bij het oplossen van problemen als u problemen ondervindt.
Zie CallClientOptions voor de API-verwijzing voor het CallClientOptions
object en de networkConfiguration
eigenschap erin.
Een signaalproxy-middleware instellen in Express.js
U kunt ook een proxy-middleware maken in de installatie van uw Express.js-server om alle URL's te laten doorsturen met behulp van het npm-pakket http-proxy-middleware . De createProxyMiddleware
functie van dat pakket moet betrekking hebben op wat u nodig hebt voor een eenvoudige omleidingsproxy-installatie. Hier volgt een voorbeeld van het gebruik ervan met enkele optie-instellingen die de SDK nodig heeft, zodat al onze URL's werken zoals verwacht:
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);
Tip
Als u SSL-problemen ondervindt, raadpleegt u het cors-pakket .
Een signaleringsproxyserver instellen in Azure
U kunt een virtuele Linux-machine maken in Azure Portal en er een NGINX-server op implementeren. Zie quickstart: Een virtuele Linux-machine maken in Azure Portal voor meer informatie.
Hier volgt een NGINX-configuratie die u als voorbeeld kunt gebruiken:
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;
}
}
}
De proxyfunctie is niet beschikbaar voor Teams-identiteiten en Interoperabiliteitsacties van Azure Communication Services Teams.
Mediaverkeer via proxy aanroepen
In de volgende secties wordt beschreven hoe u uw mediaverkeer via proxy kunt aanroepen.
Wat is een TURN-server?
Vaak is het tot stand brengen van een netwerkverbinding tussen twee peers niet eenvoudig. Een directe verbinding werkt mogelijk niet vanwege:
- Firewalls met strikte regels.
- Peers die achter een particulier netwerk zitten.
- Computers die worden uitgevoerd in een NAT-omgeving (Network Address Translation).
Als u deze problemen met de netwerkverbinding wilt oplossen, kunt u een server gebruiken die gebruikmaakt van het Traversal Using Relay NAT-protocol (TURN) voor het doorsturen van netwerkverkeer. Session Traversal Utilities for NAT (STUN) en TURN-servers zijn de relayservers.
Geef uw TURN-servergegevens op met de SDK
Als u de details van uw TURN-servers wilt opgeven, moet u details doorgeven over welke TURN-server moet worden gebruikt als onderdeel van CallClientOptions
het initialiseren CallClient
. Zie de Azure Communication Services iOS SDK voor de quickstart over het instellen van spraak en video voor meer informatie over het instellen van een gesprek.
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);
Belangrijk
Als u uw TURN-servergegevens hebt opgegeven tijdens het initialiseren CallClient
, stroomt al het mediaverkeer uitsluitend via deze TURN-servers. Alle andere ICE-kandidaten die normaal gesproken worden gegenereerd wanneer u een oproep maakt, worden niet meegenomen bij het tot stand brengen van connectiviteit tussen peers. Dat betekent dat alleen relay
kandidaten worden overwogen. Zie RTCIceCandidate: type eigenschap voor meer informatie over verschillende soorten Ice-kandidaten.
Momenteel ondersteunt de Android SDK slechts één IPv4-adres en UDP-protocol voor mediaproxy. Als er geen UDP-poort is opgegeven, wordt er een standaard UDP-poort 3478 gebruikt. De SDK genereert als volgt een Failed to set media proxy
fout bij het aanroepen setIceServer
met niet-ondersteunde invoer:
- Er is meer dan één ICE-server beschikbaar in de lijst IceServers.
- Er wordt meer dan één URL opgegeven in de URL-lijst van IceServer.
- De IPv6-URL wordt opgegeven in de URL-lijst.
- Er is alleen TCP-poort opgegeven.
- Realm-informatie is niet opgegeven.
Als de verstrekte ICE-servergegevens ongeldig zijn, mislukt de CallClient
initialisatie en genereert deze fouten dienovereenkomstig.
Een TURN-server instellen in Azure
U kunt een virtuele Linux-machine maken in Azure Portal. Zie quickstart: Een virtuele Linux-machine maken in Azure Portal voor meer informatie. Als u een TURN-server wilt implementeren, gebruikt u coturn. Coturn is een gratis en opensource-implementatie van een TURN- en STUN-server voor VoIP en WebRTC.
Nadat u een TURN-server hebt ingesteld, kunt u deze testen met behulp van de instructies op de WebRTC Trickle ICE-webpagina .
Proxysignaalverkeer
Als u de URL van een proxyserver wilt opgeven, moet u deze doorgeven als onderdeel van de eigenschap Network
tijdens CallClientOptions
het initialiserenCallClient
. Zie de Azure Communication Services iOS SDK voor de quickstart over het instellen van spraak en video voor meer informatie over het instellen van een gesprek.
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.
Een signaleringsproxyserver instellen in Azure
U kunt een virtuele Linux-machine maken in Azure Portal en er een NGINX-server op implementeren. Zie quickstart: Een virtuele Linux-machine maken in Azure Portal voor meer informatie.
Hier volgt een NGINX-configuratie die u als voorbeeld kunt gebruiken:
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;
}
}
}
De proxyfunctie is niet beschikbaar voor Teams-identiteiten en Interoperabiliteitsacties van Azure Communication Services Teams.
Mediaverkeer via proxy aanroepen
In de volgende secties wordt beschreven hoe u uw mediaverkeer via proxy kunt aanroepen.
Wat is een TURN-server?
Vaak is het tot stand brengen van een netwerkverbinding tussen twee peers niet eenvoudig. Een directe verbinding werkt mogelijk niet vanwege:
- Firewalls met strikte regels.
- Peers die achter een particulier netwerk zitten.
- Computers die worden uitgevoerd in een NAT-omgeving (Network Address Translation).
Als u deze problemen met de netwerkverbinding wilt oplossen, kunt u een server gebruiken die gebruikmaakt van het Traversal Using Relay NAT-protocol (TURN) voor het doorsturen van netwerkverkeer. Session Traversal Utilities for NAT (STUN) en TURN-servers zijn de relayservers.
Geef uw TURN-servergegevens op met de SDK
Als u de details van uw TURN-servers wilt opgeven, moet u details doorgeven over welke TURN-server moet worden gebruikt als onderdeel van CallClientOptions
het initialiseren CallClient
. Zie Azure Communication Services Android SDK voor de quickstart over het instellen van spraak en video voor meer informatie over het instellen van een gesprek.
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);
Belangrijk
Als u uw TURN-servergegevens hebt opgegeven tijdens het initialiseren CallClient
, stroomt al het mediaverkeer uitsluitend via deze TURN-servers. Alle andere ICE-kandidaten die normaal gesproken worden gegenereerd wanneer u een oproep maakt, worden niet meegenomen bij het tot stand brengen van connectiviteit tussen peers. Dat betekent dat alleen relay
kandidaten worden overwogen. Zie RTCIceCandidate: type eigenschap voor meer informatie over verschillende soorten Ice-kandidaten.
Momenteel ondersteunt de Android SDK slechts één IPv4-adres en UDP-protocol voor mediaproxy. Als er geen UDP-poort is opgegeven, wordt er een standaard UDP-poort 3478 gebruikt. De SDK genereert als volgt een Failed to set media proxy
fout bij het aanroepen setIceServer
met niet-ondersteunde invoer:
- Er is meer dan één ICE-server beschikbaar in de lijst IceServers.
- Er wordt meer dan één URL opgegeven in de URL-lijst van IceServer.
- De IPv6-URL wordt opgegeven in de URL-lijst.
- Er is alleen TCP-poort opgegeven.
- Realm-informatie is niet opgegeven.
Als de verstrekte ICE-servergegevens ongeldig zijn, mislukt de CallClient
initialisatie en genereert deze fouten dienovereenkomstig.
Een TURN-server instellen in Azure
U kunt een virtuele Linux-machine maken in Azure Portal. Zie quickstart: Een virtuele Linux-machine maken in Azure Portal voor meer informatie. Als u een TURN-server wilt implementeren, gebruikt u coturn. Coturn is een gratis en opensource-implementatie van een TURN- en STUN-server voor VoIP en WebRTC.
Nadat u een TURN-server hebt ingesteld, kunt u deze testen met behulp van de instructies op de WebRTC Trickle ICE-webpagina .
Proxysignaalverkeer
Als u de URL van een proxyserver wilt opgeven, moet u deze doorgeven als onderdeel van de eigenschap Network
tijdens CallClientOptions
het initialiserenCallClient
. Zie Azure Communication Services Android SDK voor de quickstart over het instellen van spraak en video voor meer informatie over het instellen van een gesprek.
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.
Een signaleringsproxyserver instellen in Azure
U kunt een virtuele Linux-machine maken in Azure Portal en er een NGINX-server op implementeren. Zie quickstart: Een virtuele Linux-machine maken in Azure Portal voor meer informatie.
Hier volgt een NGINX-configuratie die u als voorbeeld kunt gebruiken:
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;
}
}
}
De proxyfunctie is niet beschikbaar voor Teams-identiteiten en Interoperabiliteitsacties van Azure Communication Services Teams.
Mediaverkeer via proxy aanroepen
In de volgende secties wordt beschreven hoe u uw mediaverkeer via proxy kunt aanroepen.
Wat is een TURN-server?
Vaak is het tot stand brengen van een netwerkverbinding tussen twee peers niet eenvoudig. Een directe verbinding werkt mogelijk niet vanwege:
- Firewalls met strikte regels.
- Peers die achter een particulier netwerk zitten.
- Computers die worden uitgevoerd in een NAT-omgeving (Network Address Translation).
Als u deze problemen met de netwerkverbinding wilt oplossen, kunt u een server gebruiken die gebruikmaakt van het Traversal Using Relay NAT-protocol (TURN) voor het doorsturen van netwerkverkeer. Session Traversal Utilities for NAT (STUN) en TURN-servers zijn de relayservers.
Geef uw TURN-servergegevens op met de SDK
Als u de details van uw TURN-servers wilt opgeven, moet u details doorgeven over welke TURN-server moet worden gebruikt als onderdeel van CallClientOptions
het initialiseren CallClient
. Zie Voor meer informatie over het instellen van een gesprek Azure Communication Services Windows SDK voor de quickstart over het instellen van spraak en 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);
Belangrijk
Als u uw TURN-servergegevens hebt opgegeven tijdens het initialiseren CallClient
, stroomt al het mediaverkeer uitsluitend via deze TURN-servers. Alle andere ICE-kandidaten die normaal gesproken worden gegenereerd wanneer u een oproep maakt, worden niet meegenomen bij het tot stand brengen van connectiviteit tussen peers. Dat betekent dat alleen relay
kandidaten worden overwogen. Zie RTCIceCandidate: type eigenschap voor meer informatie over verschillende soorten Ice-kandidaten.
Momenteel ondersteunt de Android SDK slechts één IPv4-adres en UDP-protocol voor mediaproxy. Als er geen UDP-poort is opgegeven, wordt er een standaard UDP-poort 3478 gebruikt. De SDK genereert als volgt een Failed to set media proxy
fout bij het aanroepen setIceServer
met niet-ondersteunde invoer:
- Er is meer dan één ICE-server beschikbaar in de lijst IceServers.
- Er wordt meer dan één URL opgegeven in de URL-lijst van IceServer.
- De IPv6-URL wordt opgegeven in de URL-lijst.
- Er is alleen TCP-poort opgegeven.
- Realm-informatie is niet opgegeven.
Als de verstrekte ICE-servergegevens ongeldig zijn, mislukt de CallClient
initialisatie en genereert deze fouten dienovereenkomstig.
Een TURN-server instellen in Azure
U kunt een virtuele Linux-machine maken in Azure Portal. Zie quickstart: Een virtuele Linux-machine maken in Azure Portal voor meer informatie. Als u een TURN-server wilt implementeren, gebruikt u coturn. Coturn is een gratis en opensource-implementatie van een TURN- en STUN-server voor VoIP en WebRTC.
Nadat u een TURN-server hebt ingesteld, kunt u deze testen met behulp van de instructies op de WebRTC Trickle ICE-webpagina .
Proxysignaalverkeer
Als u de URL van een proxyserver wilt opgeven, moet u deze doorgeven als onderdeel van de eigenschap Network
tijdens CallClientOptions
het initialiserenCallClient
. Zie Voor meer informatie over het instellen van een gesprek Azure Communication Services Windows SDK voor de quickstart over het instellen van spraak en 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.
Een signaleringsproxyserver instellen in Azure
U kunt een virtuele Linux-machine maken in Azure Portal en er een NGINX-server op implementeren. Zie quickstart: Een virtuele Linux-machine maken in Azure Portal voor meer informatie.
Hier volgt een NGINX-configuratie die u als voorbeeld kunt gebruiken:
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;
}
}
}