Erzwingen der Proxyweiterleitung von Aufrufdatenverkehr über eigene Server
In diesem Tutorial erfahren Sie mehr über die Proxyweiterleitung des Azure Communication Services-Aufrufdatenverkehrs über Ihre eigenen Server.
In bestimmten Situationen kann es nützlich sein, den gesamten Clientdatenverkehr per Proxy an einen Server zu übertragen, den Sie steuern können. Bei der Initialisierung des SDK können Sie die Details Ihrer Server angeben, an die der Datenverkehr weitergeleitet werden soll. Nach der Aktivierung wird der gesamte Mediendatenverkehr (Audio-/Video-/Bildschirmfreigabe) über die angegebenen TURN-Server anstelle der Azure Communication Services-Standardeinstellungen geleitet.
In diesem Tutorial lernen Sie Folgendes:
- Einrichten eines TURN-Servers
- Einrichten eines Signalisierungsproxyservers
Voraussetzungen
Keine
Das Proxyfeature ist ab der öffentlichen Version 1.25.1 des Azure Communication Services Calling SDK allgemein verfügbar. Verwenden Sie unbedingt dieses SDK oder eine höhere Version des SDK, wenn Sie dieses Feature nutzen möchten. In diesem Tutorial wird eine Version des Calling SDK 1.13.0-beta.1 verwendet, in der dieses Feature erstmals in der öffentlichen Vorschau verfügbar wurde.
Proxy-Anrufe im Mediendatenverkehr
In den folgenden Abschnitten wird beschrieben, wie Sie einen Proxyaufruf für den Mediendatenverkehr ausführen.
Was ist ein TURN-Server?
Oftmals ist das Herstellen einer Netzwerkverbindung zwischen zwei Peers nicht einfach. Eine direkte Verbindung funktioniert möglicherweise aus folgenden Gründen nicht:
- Firewalls mit strengen Regeln
- Peers, die sich hinter einem privaten Netzwerk befinden
- Computer, die in einer NAT-Umgebung (Network Address Translation, Netzwerkadressenübersetzung) ausgeführt werden
Um diese Netzwerkverbindungsprobleme zu beheben, können Sie einen Server verwenden, der das TURN-Protokoll (Traversal Using Relay NAT) zum Weiterleiten von Netzwerkdatenverkehr verwendet. STUN-Server (Session Traversal Utilities for NAT) und TURN-Server fungieren als Relayserver.
Angeben der Detailinformationen Ihrer TURN-Server für das SDK
Zum Angeben der Details Ihrer TURN-Server müssen Sie im Rahmen von CallClientOptions
Details zum TURN-Server übergeben, der verwendet werden soll, während Sie CallClient
initialisieren. Weitere Informationen zum Einrichten eines Anrufs finden Sie unter Azure Communication Services Web SDK in der Schnellstartanleitung zum Einrichten von Voice and 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.
Wichtig
Wenn Sie beim Initialisieren von CallClient
die Detailinformationen zu Ihrem TURN-Server angegeben haben, fließt der gesamte Mediendatenverkehr ausschließlich über diese TURN-Server. Alle anderen ICE-Kandidaten, die normalerweise beim Erstellen eines Anrufs generiert werden, werden beim Versuch, die Konnektivität zwischen Peers herzustellen, nicht berücksichtigt. Das bedeutet, dass nur relay
-Kandidaten berücksichtigt werden. Weitere Informationen zu den verschiedenen ICE-Kandidaten finden Sie unter RTCIceCandidate: Typeigenschaft.
Wenn der Abfrageparameter ?transport
nicht als Teil der TURN-URL vorhanden ist oder nicht den Wert udp
, tcp
oder tls
hat, ist das Standardverhalten UDP.
Wenn eine der angegebenen URLs ungültig ist oder nicht das Schema turn:
, turns:
oder stun:
aufweist, tritt bei der Initialisierung von CallClient
ein Fehler auf, und es werden entsprechende Fehler ausgelöst. Die ausgelösten Fehlermeldungen sollten Ihnen bei der Problembehandlung helfen, wenn Probleme auftreten.
Die API-Referenz für das CallClientOptions
-Objekt und die darin enthaltene Eigenschaft networkConfiguration
finden Sie unter CallClientOptions.
Einrichten eines TURN-Servers in Azure
Sie können eine Linux-VM im Azure-Portal erstellen. Weitere Informationen finden Sie unter Schnellstart: Erstellen eines virtuellen Linux-Computers im Azure-Portal. Um einen TURN-Server bereitzustellen, verwenden Sie coturn. Coturn ist eine kostenlose Open-Source-Implementierung eines TURN- und STUN-Servers für VoIP und WebRTC.
Nachdem Sie einen TURN-Server eingerichtet haben, können Sie ihn mithilfe der Anweisungen auf der Webseite WebRTC Trickle ICE testen.
Signalisierungsdatenverkehr über Proxy
Um die URL eines Proxyservers bereitzustellen, müssen Sie sie bei der Initialisierung von CallClient
als Teil von CallClientOptions
übergeben. Weitere Informationen zum Einrichten eines Anrufs finden Sie unter Azure Communication Services Web SDK in der Schnellstartanleitung zum Einrichten von Voice and 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.
Hinweis
Wenn die angegebene Proxy-URL eine ungültige URL ist, tritt bei der CallClient
-Initialisierung ein Fehler auf, und es werden entsprechende Fehler ausgegeben. Die ausgelösten Fehlermeldungen helfen Ihnen bei der Problembehandlung, wenn Probleme auftreten.
Die API-Referenz für das CallClientOptions
-Objekt und die darin enthaltene Eigenschaft networkConfiguration
finden Sie unter CallClientOptions.
Einrichten einer Signalisierungsproxy-Middleware in Express.js
Sie können auch eine Proxy-Middleware im Setup des Express.js-Servers erstellen, um alle URLs über sie umzuleiten, indem Sie das npm-Paket http-proxy-middleware verwenden. Die Funktion createProxyMiddleware
aus diesem Paket sollte das abdecken, was Sie für eine einfache Einrichtung eines Umleitungsproxys benötigen. Hier sehen Sie ein Beispiel für die Verwendung mit einigen Optionseinstellungen, die das SDK benötigt, damit alle URLs wie erwartet funktionieren:
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);
Tipp
Wenn SSL-Probleme auftreten, sehen Sie sich das cors-Paket an.
Einrichten eines Signalisierungsproxyservers in Azure
Sie können eine Linux-VM im Azure-Portal erstellen und einen NGINX-Server darauf bereitstellen. Weitere Informationen finden Sie unter Schnellstart: Erstellen eines virtuellen Linux-Computers im Azure-Portal.
Hier sehen Sie eine NGINX-Konfiguration, die Sie als Beispiel verwenden können:
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;
}
}
}
Das Proxyfeature ist nicht für Teams-Identitäten und Azure Communication Services Teams-Interoperabilitätsaktionen verfügbar.
Proxy-Anrufe im Mediendatenverkehr
In den folgenden Abschnitten wird beschrieben, wie Sie einen Proxyaufruf für den Mediendatenverkehr ausführen.
Was ist ein TURN-Server?
Oftmals ist das Herstellen einer Netzwerkverbindung zwischen zwei Peers nicht einfach. Eine direkte Verbindung funktioniert möglicherweise aus folgenden Gründen nicht:
- Firewalls mit strengen Regeln
- Peers, die sich hinter einem privaten Netzwerk befinden
- Computer, die in einer NAT-Umgebung (Network Address Translation, Netzwerkadressenübersetzung) ausgeführt werden
Um diese Netzwerkverbindungsprobleme zu beheben, können Sie einen Server verwenden, der das TURN-Protokoll (Traversal Using Relay NAT) zum Weiterleiten von Netzwerkdatenverkehr verwendet. STUN-Server (Session Traversal Utilities for NAT) und TURN-Server fungieren als Relayserver.
Angeben der Detailinformationen Ihrer TURN-Server mit dem SDK
Zum Angeben der Details Ihrer TURN-Server müssen Sie im Rahmen von CallClientOptions
Details zum TURN-Server übergeben, der verwendet werden soll, während Sie CallClient
initialisieren. Weitere Informationen zum Einrichten eines Anrufs finden Sie unter Azure Communication Services iOS SDK in der Schnellstartanleitung zum Einrichten von Voice and 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);
Wichtig
Wenn Sie beim Initialisieren von CallClient
die Detailinformationen zu Ihrem TURN-Server angegeben haben, fließt der gesamte Mediendatenverkehr ausschließlich über diese TURN-Server. Alle anderen ICE-Kandidaten, die normalerweise beim Erstellen eines Anrufs generiert werden, werden beim Versuch, die Konnektivität zwischen Peers herzustellen, nicht berücksichtigt. Das bedeutet, dass nur relay
-Kandidaten berücksichtigt werden. Weitere Informationen zu den verschiedenen ICE-Kandidaten finden Sie unter RTCIceCandidate: Typeigenschaft.
Derzeit unterstützt das Android SDK nur eine einzelne IPv4-Adresse und das UDP-Protokoll für den Medienproxy. Wenn kein UDP-Port bereitgestellt wird, wird der Standard-UDP-Port 3478 verwendet. Das SDK löst beim Aufrufen von setIceServer
mit nicht unterstützten Eingaben wie folgt einen Failed to set media proxy
Fehler aus:
- Mehr als ein ICE-Server wird in der IceServers-Liste bereitgestellt.
- Mehr als eine URL wird in der URL-Liste des IceServers bereitgestellt.
- IPv6-URL wird in der URL-Liste angegeben.
- Es wird nur TCP-Port bereitgestellt.
- Bereichsinformationen werden nicht bereitgestellt.
Wenn die bereitgestellten ICE-Serverinformationen ungültig sind, schlägt die CallClient
Initialisierung fehl und löst entsprechend Fehler aus.
Einrichten eines TURN-Servers in Azure
Sie können eine Linux-VM im Azure-Portal erstellen. Weitere Informationen finden Sie unter Schnellstart: Erstellen eines virtuellen Linux-Computers im Azure-Portal. Um einen TURN-Server bereitzustellen, verwenden Sie coturn. Coturn ist eine kostenlose Open-Source-Implementierung eines TURN- und STUN-Servers für VoIP und WebRTC.
Nachdem Sie einen TURN-Server eingerichtet haben, können Sie ihn mithilfe der Anweisungen auf der Webseite WebRTC Trickle ICE testen.
Signalisierungsdatenverkehr über Proxy
Zum Bereitstellen der URL eines Proxyservers müssen Sie sie als Teil von CallClientOptions
über die Eigenschaft Network
übergeben, während CallClient
initialisiert wird. Weitere Informationen zum Einrichten eines Anrufs finden Sie unter Azure Communication Services iOS SDK in der Schnellstartanleitung zum Einrichten von Voice and 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.
Einrichten eines Signalisierungsproxyservers in Azure
Sie können eine Linux-VM im Azure-Portal erstellen und einen NGINX-Server darauf bereitstellen. Weitere Informationen finden Sie unter Schnellstart: Erstellen eines virtuellen Linux-Computers im Azure-Portal.
Hier sehen Sie eine NGINX-Konfiguration, die Sie als Beispiel verwenden können:
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;
}
}
}
Das Proxyfeature ist nicht für Teams-Identitäten und Azure Communication Services Teams-Interoperabilitätsaktionen verfügbar.
Proxy-Anrufe im Mediendatenverkehr
In den folgenden Abschnitten wird beschrieben, wie Sie einen Proxyaufruf für den Mediendatenverkehr ausführen.
Was ist ein TURN-Server?
Oftmals ist das Herstellen einer Netzwerkverbindung zwischen zwei Peers nicht einfach. Eine direkte Verbindung funktioniert möglicherweise aus folgenden Gründen nicht:
- Firewalls mit strengen Regeln
- Peers, die sich hinter einem privaten Netzwerk befinden
- Computer, die in einer NAT-Umgebung (Network Address Translation, Netzwerkadressenübersetzung) ausgeführt werden
Um diese Netzwerkverbindungsprobleme zu beheben, können Sie einen Server verwenden, der das TURN-Protokoll (Traversal Using Relay NAT) zum Weiterleiten von Netzwerkdatenverkehr verwendet. STUN-Server (Session Traversal Utilities for NAT) und TURN-Server fungieren als Relayserver.
Angeben der Detailinformationen Ihrer TURN-Server mit dem SDK
Zum Angeben der Details Ihrer TURN-Server müssen Sie im Rahmen von CallClientOptions
Details zum TURN-Server übergeben, der verwendet werden soll, während Sie CallClient
initialisieren. Weitere Informationen zum Einrichten eines Anrufs finden Sie unter Azure Communication Services Android SDK in der Schnellstartanleitung zum Einrichten von Voice and 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);
Wichtig
Wenn Sie beim Initialisieren von CallClient
die Detailinformationen zu Ihrem TURN-Server angegeben haben, fließt der gesamte Mediendatenverkehr ausschließlich über diese TURN-Server. Alle anderen ICE-Kandidaten, die normalerweise beim Erstellen eines Anrufs generiert werden, werden beim Versuch, die Konnektivität zwischen Peers herzustellen, nicht berücksichtigt. Das bedeutet, dass nur relay
-Kandidaten berücksichtigt werden. Weitere Informationen zu den verschiedenen ICE-Kandidaten finden Sie unter RTCIceCandidate: Typeigenschaft.
Derzeit unterstützt das Android SDK nur eine einzelne IPv4-Adresse und das UDP-Protokoll für den Medienproxy. Wenn kein UDP-Port bereitgestellt wird, wird der Standard-UDP-Port 3478 verwendet. Das SDK löst beim Aufrufen von setIceServer
mit nicht unterstützten Eingaben wie folgt einen Failed to set media proxy
Fehler aus:
- Mehr als ein ICE-Server wird in der IceServers-Liste bereitgestellt.
- Mehr als eine URL wird in der URL-Liste des IceServers bereitgestellt.
- IPv6-URL wird in der URL-Liste angegeben.
- Es wird nur TCP-Port bereitgestellt.
- Bereichsinformationen werden nicht bereitgestellt.
Wenn die bereitgestellten ICE-Serverinformationen ungültig sind, schlägt die CallClient
Initialisierung fehl und löst entsprechend Fehler aus.
Einrichten eines TURN-Servers in Azure
Sie können eine Linux-VM im Azure-Portal erstellen. Weitere Informationen finden Sie unter Schnellstart: Erstellen eines virtuellen Linux-Computers im Azure-Portal. Um einen TURN-Server bereitzustellen, verwenden Sie coturn. Coturn ist eine kostenlose Open-Source-Implementierung eines TURN- und STUN-Servers für VoIP und WebRTC.
Nachdem Sie einen TURN-Server eingerichtet haben, können Sie ihn mithilfe der Anweisungen auf der Webseite WebRTC Trickle ICE testen.
Signalisierungsdatenverkehr über Proxy
Zum Bereitstellen der URL eines Proxyservers müssen Sie sie als Teil von CallClientOptions
über die Eigenschaft Network
übergeben, während CallClient
initialisiert wird. Weitere Informationen zum Einrichten eines Anrufs finden Sie unter Azure Communication Services Android SDK in der Schnellstartanleitung zum Einrichten von Voice and 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.
Einrichten eines Signalisierungsproxyservers in Azure
Sie können eine Linux-VM im Azure-Portal erstellen und einen NGINX-Server darauf bereitstellen. Weitere Informationen finden Sie unter Schnellstart: Erstellen eines virtuellen Linux-Computers im Azure-Portal.
Hier sehen Sie eine NGINX-Konfiguration, die Sie als Beispiel verwenden können:
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;
}
}
}
Das Proxyfeature ist nicht für Teams-Identitäten und Azure Communication Services Teams-Interoperabilitätsaktionen verfügbar.
Proxy-Anrufe im Mediendatenverkehr
In den folgenden Abschnitten wird beschrieben, wie Sie einen Proxyaufruf für den Mediendatenverkehr ausführen.
Was ist ein TURN-Server?
Oftmals ist das Herstellen einer Netzwerkverbindung zwischen zwei Peers nicht einfach. Eine direkte Verbindung funktioniert möglicherweise aus folgenden Gründen nicht:
- Firewalls mit strengen Regeln
- Peers, die sich hinter einem privaten Netzwerk befinden
- Computer, die in einer NAT-Umgebung (Network Address Translation, Netzwerkadressenübersetzung) ausgeführt werden
Um diese Netzwerkverbindungsprobleme zu beheben, können Sie einen Server verwenden, der das TURN-Protokoll (Traversal Using Relay NAT) zum Weiterleiten von Netzwerkdatenverkehr verwendet. STUN-Server (Session Traversal Utilities for NAT) und TURN-Server fungieren als Relayserver.
Angeben der Detailinformationen Ihrer TURN-Server mit dem SDK
Zum Angeben der Details Ihrer TURN-Server müssen Sie im Rahmen von CallClientOptions
Details zum TURN-Server übergeben, der verwendet werden soll, während Sie CallClient
initialisieren. Weitere Informationen zum Einrichten eines Anrufs finden Sie unter Azure Communication Services Windows SDK in der Schnellstartanleitung zum Einrichten von Voice and 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);
Wichtig
Wenn Sie beim Initialisieren von CallClient
die Detailinformationen zu Ihrem TURN-Server angegeben haben, fließt der gesamte Mediendatenverkehr ausschließlich über diese TURN-Server. Alle anderen ICE-Kandidaten, die normalerweise beim Erstellen eines Anrufs generiert werden, werden beim Versuch, die Konnektivität zwischen Peers herzustellen, nicht berücksichtigt. Das bedeutet, dass nur relay
-Kandidaten berücksichtigt werden. Weitere Informationen zu den verschiedenen ICE-Kandidaten finden Sie unter RTCIceCandidate: Typeigenschaft.
Derzeit unterstützt das Android SDK nur eine einzelne IPv4-Adresse und das UDP-Protokoll für den Medienproxy. Wenn kein UDP-Port bereitgestellt wird, wird der Standard-UDP-Port 3478 verwendet. Das SDK löst beim Aufrufen von setIceServer
mit nicht unterstützten Eingaben wie folgt einen Failed to set media proxy
Fehler aus:
- Mehr als ein ICE-Server wird in der IceServers-Liste bereitgestellt.
- Mehr als eine URL wird in der URL-Liste des IceServers bereitgestellt.
- IPv6-URL wird in der URL-Liste angegeben.
- Es wird nur TCP-Port bereitgestellt.
- Bereichsinformationen werden nicht bereitgestellt.
Wenn die bereitgestellten ICE-Serverinformationen ungültig sind, schlägt die CallClient
Initialisierung fehl und löst entsprechend Fehler aus.
Einrichten eines TURN-Servers in Azure
Sie können eine Linux-VM im Azure-Portal erstellen. Weitere Informationen finden Sie unter Schnellstart: Erstellen eines virtuellen Linux-Computers im Azure-Portal. Um einen TURN-Server bereitzustellen, verwenden Sie coturn. Coturn ist eine kostenlose Open-Source-Implementierung eines TURN- und STUN-Servers für VoIP und WebRTC.
Nachdem Sie einen TURN-Server eingerichtet haben, können Sie ihn mithilfe der Anweisungen auf der Webseite WebRTC Trickle ICE testen.
Signalisierungsdatenverkehr über Proxy
Zum Bereitstellen der URL eines Proxyservers müssen Sie sie als Teil von CallClientOptions
über die Eigenschaft Network
übergeben, während CallClient
initialisiert wird. Weitere Informationen zum Einrichten eines Anrufs finden Sie unter Azure Communication Services Windows SDK in der Schnellstartanleitung zum Einrichten von Voice and 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.
Einrichten eines Signalisierungsproxyservers in Azure
Sie können eine Linux-VM im Azure-Portal erstellen und einen NGINX-Server darauf bereitstellen. Weitere Informationen finden Sie unter Schnellstart: Erstellen eines virtuellen Linux-Computers im Azure-Portal.
Hier sehen Sie eine NGINX-Konfiguration, die Sie als Beispiel verwenden können:
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;
}
}
}