Dela via


Framtvinga att samtalstrafik skickas via din egen server

I den här självstudien får du lära dig hur du proxyserver för Azure Communication Services anropar trafik över dina egna servrar.

I vissa situationer kan det vara bra att all klienttrafik skickas till en server som du kan styra. När SDK initieras kan du ange information om dina servrar som du vill att trafiken ska dirigeras till. När den är aktiverad färdas all medietrafik (ljud-/video-/skärmdelning) via de tillhandahållna TURN-servrarna i stället för standardinställningarna för Azure Communication Services.

I den här självstudien lär du dig att:

  • Konfigurera en TURN-server.
  • Konfigurera en signalproxyserver.

Förutsättningar

Ingen

Proxyfunktionen är allmänt tillgänglig från och med den offentliga versionen 1.25.1 av Azure Communication Services Calling SDK. Kontrollera att du använder denna SDK eller en senare version av SDK:t när du försöker använda den här funktionen. I den här självstudien används en version av Calling SDK 1.13.0-beta.1 där den här funktionen först blev tillgänglig i offentlig förhandsversion.

Proxy som anropar medietrafik

I följande avsnitt beskrivs hur proxy anropar din medietrafik.

Vad är en TURN-server?

Många gånger är det inte enkelt att upprätta en nätverksanslutning mellan två peer-datorer. En direktanslutning kanske inte fungerar på grund av:

  • Brandväggar med strikta regler.
  • Kamrater som sitter bakom ett privat nätverk.
  • Datorer som körs i en NAT-miljö (network address translation).

För att lösa dessa problem med nätverksanslutningen kan du använda en server som använder protokollet Traversal Using Relay NAT (TURN) för att vidarebefordra nätverkstrafik. Session Traversal Utilities for NAT (STUN) och TURN-servrar är reläservrarna.

Ange din TURN-serverinformation till SDK:et

Om du vill ange information om DINA TURN-servrar måste du skicka information om vilken TURN-server som ska användas som en del av CallClientOptions när du initierar CallClient. Mer information om hur du konfigurerar ett samtal finns i Azure Communication Services Web SDK för snabbstarten om hur du konfigurerar röst och 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.

Viktigt!

Om du angav turn-serverinformationen när du initierade CallClientflödar all medietrafik exklusivt via dessa TURN-servrar. Andra ICE-kandidater som normalt genereras när du skapar ett anrop beaktas inte när du försöker upprätta anslutningar mellan peer-datorer. Det innebär att endast relay kandidater övervägs. Mer information om olika typer av ice-kandidater finns i RTCIceCandidate: type property.

?transport Om frågeparametern inte finns som en del av TURN-URL:en eller inte är något av udpvärdena , tcpeller tls är standardbeteendet UDP.

Om någon av de angivna URL:erna är ogiltiga eller inte har något av schemana turn:CallClient , turns:eller stun: så misslyckas initieringen och utlöser fel i enlighet med detta. De felmeddelanden som genereras bör hjälpa dig att felsöka om du stöter på problem.

Api-referensen CallClientOptions för objektet och networkConfiguration egenskapen i det finns i CallClientOptions.

Konfigurera en TURN-server i Azure

Du kan skapa en virtuell Linux-dator i Azure Portal. Mer information finns i Snabbstart: Skapa en virtuell Linux-dator i Azure Portal. Om du vill distribuera en TURN-server använder du coturn. Coturn är en kostnadsfri implementering med öppen källkod av en TURN- och STUN-server för VoIP och WebRTC.

När du har konfigurerat en TURN-server kan du testa den med hjälp av anvisningarna på WebRTC Trickle ICE-webbsidan .

Proxysignaleringstrafik

Om du vill ange URL:en för en proxyserver måste du skicka in den som en del av CallClientOptions när du initierar CallClient. Mer information om hur du konfigurerar ett samtal finns i Azure Communication Services Web SDK för snabbstarten om hur du konfigurerar röst och 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.

Kommentar

Om den angivna proxy-URL:en är en ogiltig URL CallClient misslyckas initieringen och utlöser fel i enlighet med detta. De felmeddelanden som genereras hjälper dig att felsöka om du stöter på problem.

Api-referensen CallClientOptions för objektet och networkConfiguration egenskapen i det finns i CallClientOptions.

Konfigurera ett mellanprogram för signalproxy i Express.js

Du kan också skapa ett proxymellanprogram i din Express.js serverkonfiguration så att alla URL:er omdirigeras via den med hjälp av npm-paketet http-proxy-middleware . Funktionen createProxyMiddleware från paketet bör omfatta det du behöver för en enkel omdirigeringsproxykonfiguration. Här är ett exempel på användning av den med vissa alternativinställningar som SDK:t behöver så att alla våra URL:er fungerar som förväntat:

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);

Dricks

Om du har SSL-problem kan du läsa cors-paketet .

Konfigurera en signalproxyserver i Azure

Du kan skapa en virtuell Linux-dator i Azure Portal och distribuera en NGINX-server på den. Mer information finns i Snabbstart: Skapa en virtuell Linux-dator i Azure Portal.

Här är en NGINX-konfiguration som du kan använda som exempel:

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;
        }
    }
}

Proxyfunktionen är inte tillgänglig för Teams-identiteter och Azure Communication Services Teams samverkansåtgärder.

Proxy som anropar medietrafik

I följande avsnitt beskrivs hur proxy anropar din medietrafik.

Vad är en TURN-server?

Många gånger är det inte enkelt att upprätta en nätverksanslutning mellan två peer-datorer. En direktanslutning kanske inte fungerar på grund av:

  • Brandväggar med strikta regler.
  • Kamrater som sitter bakom ett privat nätverk.
  • Datorer som körs i en NAT-miljö (network address translation).

För att lösa dessa problem med nätverksanslutningen kan du använda en server som använder protokollet Traversal Using Relay NAT (TURN) för att vidarebefordra nätverkstrafik. Session Traversal Utilities for NAT (STUN) och TURN-servrar är reläservrarna.

Ange din TURN-serverinformation med SDK:et

Om du vill ange information om DINA TURN-servrar måste du skicka information om vilken TURN-server som ska användas som en del av CallClientOptions när du initierar CallClient. Mer information om hur du konfigurerar ett samtal finns i Azure Communication Services iOS SDK för snabbstarten om hur du konfigurerar röst och 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);

Viktigt!

Om du angav turn-serverinformationen när du initierade CallClientflödar all medietrafik exklusivt via dessa TURN-servrar. Andra ICE-kandidater som normalt genereras när du skapar ett anrop beaktas inte när du försöker upprätta anslutningar mellan peer-datorer. Det innebär att endast relay kandidater övervägs. Mer information om olika typer av ice-kandidater finns i RTCIceCandidate: type property.

För närvarande stöder Android SDK endast en enda IPv4-adress och UDP-protokoll för medieproxy. Om det inte finns någon UDP-port används en UDP-standardport 3478. SDK:t utlöser ett Failed to set media proxy fel vid anrop setIceServer med indata som inte stöds enligt följande:

  • Mer än en ICE-server finns i IceServers-listan.
  • Mer än en URL finns i IceServers URL-lista.
  • IPv6-URL finns i url-listan.
  • Endast TCP-port tillhandahålls.
  • Sfärinformation tillhandahålls inte.

Om den angivna ICE-serverinformationen CallClient är ogiltig misslyckas initieringen och utlöser fel i enlighet med detta.

Konfigurera en TURN-server i Azure

Du kan skapa en virtuell Linux-dator i Azure Portal. Mer information finns i Snabbstart: Skapa en virtuell Linux-dator i Azure Portal. Om du vill distribuera en TURN-server använder du coturn. Coturn är en kostnadsfri implementering med öppen källkod av en TURN- och STUN-server för VoIP och WebRTC.

När du har konfigurerat en TURN-server kan du testa den med hjälp av anvisningarna på WebRTC Trickle ICE-webbsidan .

Proxysignaleringstrafik

Om du vill ange URL:en för en proxyserver måste du skicka in den som en del av CallClientOptions dess egenskap Network när du initierar CallClient. Mer information om hur du konfigurerar ett samtal finns i Azure Communication Services iOS SDK för snabbstarten om hur du konfigurerar röst och 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.

Konfigurera en signalproxyserver i Azure

Du kan skapa en virtuell Linux-dator i Azure Portal och distribuera en NGINX-server på den. Mer information finns i Snabbstart: Skapa en virtuell Linux-dator i Azure Portal.

Här är en NGINX-konfiguration som du kan använda som exempel:

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;
        }
    }
}

Proxyfunktionen är inte tillgänglig för Teams-identiteter och Azure Communication Services Teams samverkansåtgärder.

Proxy som anropar medietrafik

I följande avsnitt beskrivs hur proxy anropar din medietrafik.

Vad är en TURN-server?

Många gånger är det inte enkelt att upprätta en nätverksanslutning mellan två peer-datorer. En direktanslutning kanske inte fungerar på grund av:

  • Brandväggar med strikta regler.
  • Kamrater som sitter bakom ett privat nätverk.
  • Datorer som körs i en NAT-miljö (network address translation).

För att lösa dessa problem med nätverksanslutningen kan du använda en server som använder protokollet Traversal Using Relay NAT (TURN) för att vidarebefordra nätverkstrafik. Session Traversal Utilities for NAT (STUN) och TURN-servrar är reläservrarna.

Ange din TURN-serverinformation med SDK:et

Om du vill ange information om DINA TURN-servrar måste du skicka information om vilken TURN-server som ska användas som en del av CallClientOptions när du initierar CallClient. Mer information om hur du konfigurerar ett samtal finns i Azure Communication Services Android SDK för snabbstarten om hur du konfigurerar röst och 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);

Viktigt!

Om du angav turn-serverinformationen när du initierade CallClientflödar all medietrafik exklusivt via dessa TURN-servrar. Andra ICE-kandidater som normalt genereras när du skapar ett anrop beaktas inte när du försöker upprätta anslutningar mellan peer-datorer. Det innebär att endast relay kandidater övervägs. Mer information om olika typer av ice-kandidater finns i RTCIceCandidate: type property.

För närvarande stöder Android SDK endast en enda IPv4-adress och UDP-protokoll för medieproxy. Om det inte finns någon UDP-port används en UDP-standardport 3478. SDK:t utlöser ett Failed to set media proxy fel vid anrop setIceServer med indata som inte stöds enligt följande:

  • Mer än en ICE-server finns i IceServers-listan.
  • Mer än en URL finns i IceServers URL-lista.
  • IPv6-URL finns i url-listan.
  • Endast TCP-port tillhandahålls.
  • Sfärinformation tillhandahålls inte.

Om den angivna ICE-serverinformationen CallClient är ogiltig misslyckas initieringen och utlöser fel i enlighet med detta.

Konfigurera en TURN-server i Azure

Du kan skapa en virtuell Linux-dator i Azure Portal. Mer information finns i Snabbstart: Skapa en virtuell Linux-dator i Azure Portal. Om du vill distribuera en TURN-server använder du coturn. Coturn är en kostnadsfri implementering med öppen källkod av en TURN- och STUN-server för VoIP och WebRTC.

När du har konfigurerat en TURN-server kan du testa den med hjälp av anvisningarna på WebRTC Trickle ICE-webbsidan .

Proxysignaleringstrafik

Om du vill ange URL:en för en proxyserver måste du skicka in den som en del av CallClientOptions dess egenskap Network när du initierar CallClient. Mer information om hur du konfigurerar ett samtal finns i Azure Communication Services Android SDK för snabbstarten om hur du konfigurerar röst och 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.

Konfigurera en signalproxyserver i Azure

Du kan skapa en virtuell Linux-dator i Azure Portal och distribuera en NGINX-server på den. Mer information finns i Snabbstart: Skapa en virtuell Linux-dator i Azure Portal.

Här är en NGINX-konfiguration som du kan använda som exempel:

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;
        }
    }
}

Proxyfunktionen är inte tillgänglig för Teams-identiteter och Azure Communication Services Teams samverkansåtgärder.

Proxy som anropar medietrafik

I följande avsnitt beskrivs hur proxy anropar din medietrafik.

Vad är en TURN-server?

Många gånger är det inte enkelt att upprätta en nätverksanslutning mellan två peer-datorer. En direktanslutning kanske inte fungerar på grund av:

  • Brandväggar med strikta regler.
  • Kamrater som sitter bakom ett privat nätverk.
  • Datorer som körs i en NAT-miljö (network address translation).

För att lösa dessa problem med nätverksanslutningen kan du använda en server som använder protokollet Traversal Using Relay NAT (TURN) för att vidarebefordra nätverkstrafik. Session Traversal Utilities for NAT (STUN) och TURN-servrar är reläservrarna.

Ange din TURN-serverinformation med SDK:et

Om du vill ange information om DINA TURN-servrar måste du skicka information om vilken TURN-server som ska användas som en del av CallClientOptions när du initierar CallClient. Mer information om hur du konfigurerar ett samtal finns i Azure Communication Services Windows SDK för snabbstarten om hur du konfigurerar röst och 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);

Viktigt!

Om du angav turn-serverinformationen när du initierade CallClientflödar all medietrafik exklusivt via dessa TURN-servrar. Andra ICE-kandidater som normalt genereras när du skapar ett anrop beaktas inte när du försöker upprätta anslutningar mellan peer-datorer. Det innebär att endast relay kandidater övervägs. Mer information om olika typer av ice-kandidater finns i RTCIceCandidate: type property.

För närvarande stöder Android SDK endast en enda IPv4-adress och UDP-protokoll för medieproxy. Om det inte finns någon UDP-port används en UDP-standardport 3478. SDK:t utlöser ett Failed to set media proxy fel vid anrop setIceServer med indata som inte stöds enligt följande:

  • Mer än en ICE-server finns i IceServers-listan.
  • Mer än en URL finns i IceServers URL-lista.
  • IPv6-URL finns i url-listan.
  • Endast TCP-port tillhandahålls.
  • Sfärinformation tillhandahålls inte.

Om den angivna ICE-serverinformationen CallClient är ogiltig misslyckas initieringen och utlöser fel i enlighet med detta.

Konfigurera en TURN-server i Azure

Du kan skapa en virtuell Linux-dator i Azure Portal. Mer information finns i Snabbstart: Skapa en virtuell Linux-dator i Azure Portal. Om du vill distribuera en TURN-server använder du coturn. Coturn är en kostnadsfri implementering med öppen källkod av en TURN- och STUN-server för VoIP och WebRTC.

När du har konfigurerat en TURN-server kan du testa den med hjälp av anvisningarna på WebRTC Trickle ICE-webbsidan .

Proxysignaleringstrafik

Om du vill ange URL:en för en proxyserver måste du skicka in den som en del av CallClientOptions dess egenskap Network när du initierar CallClient. Mer information om hur du konfigurerar ett samtal finns i Azure Communication Services Windows SDK för snabbstarten om hur du konfigurerar röst och 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.

Konfigurera en signalproxyserver i Azure

Du kan skapa en virtuell Linux-dator i Azure Portal och distribuera en NGINX-server på den. Mer information finns i Snabbstart: Skapa en virtuell Linux-dator i Azure Portal.

Här är en NGINX-konfiguration som du kan använda som exempel:

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;
        }
    }
}