Proksikan lalu lintas panggilan Anda

Artikel ini menjelaskan cara mem-proksi lalu lintas panggilan Azure Communication Services Anda di seluruh server Anda sendiri.

Dalam situasi tertentu, mungkin berguna untuk membuat semua lalu lintas klien Anda diproksi ke server yang dapat Anda kontrol. Saat SDK diinisialisasi, Anda dapat memberikan detail server yang Anda inginkan untuk dirutekan lalu lintas. Setelah diaktifkan, semua lalu lintas media (berbagi audio/video/layar) melakukan perjalanan melalui server TURN yang disediakan alih-alih default Azure Communication Services.

Artikel ini menjelaskan cara:

  • Siapkan server TURN.
  • Siapkan server proksi sinyal.

Prasyarat

Tidak

Fitur proksi tersedia secara umum mulai dari SDK Panggilan Azure Communication Services versi publik 1.25.1 . Pastikan Anda menggunakan SDK ini atau versi SDK yang lebih baru saat Anda mencoba menggunakan fitur ini. Tutorial ini menggunakan versi SDK Panggilan 1.13.0-beta.1 di mana fitur ini menjadi pertama kali tersedia pada pratinjau publik.

Proksi memanggil lalu lintas media

Bagian berikut menjelaskan cara mem-proksi memanggil lalu lintas media Anda.

Apa itu server TURN?

Sering kali, membangun koneksi jaringan antara dua rekan tidak mudah. Koneksi langsung mungkin tidak berfungsi karena:

  • Firewall dengan aturan ketat.
  • Rekan-rekan yang duduk di belakang jaringan privat.
  • Komputer yang berjalan di lingkungan terjemahan alamat jaringan (NAT).

Untuk mengatasi masalah koneksi jaringan ini, Anda dapat menggunakan server yang menggunakan protokol Traversal Using Relay NAT (TURN) untuk menyampaikan lalu lintas jaringan. Utilitas Traversal Sesi untuk server NAT (STUN) dan TURN adalah server relai.

Berikan detail server TURN Anda ke SDK

Untuk memberikan detail server TURN Anda, Anda perlu meneruskan detail server TURN apa yang akan digunakan sebagai bagian CallClientOptions dari saat menginisialisasi CallClient. Untuk informasi selengkapnya tentang cara menyiapkan panggilan, lihat Azure Communication Services Web SDK untuk mulai cepat tentang cara menyiapkan suara dan 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.

Penting

Jika Anda memberikan detail server TURN saat menginisialisasi CallClient, semua lalu lintas media secara eksklusif mengalir melalui server TURN ini. Kandidat ICE lain yang biasanya dihasilkan saat Anda membuat panggilan tidak dipertimbangkan saat mencoba membangun konektivitas antara rekan-rekan. Itu berarti hanya relay kandidat yang dipertimbangkan. Untuk informasi selengkapnya tentang berbagai jenis kandidat ICE, lihat properti tipe RTCIceCandidate.

?transport Jika parameter kueri tidak ada sebagai bagian dari URL TURN atau bukan salah udpsatu nilai , , tcpatau , atau tls , perilaku defaultnya adalah UDP.

Jika salah satu URL yang disediakan tidak valid atau tidak memiliki salah turn:satu skema , , turns:atau , atau stun: , CallClient inisialisasi gagal dan melemparkan kesalahan yang sesuai. Pesan kesalahan yang dilemparkan akan membantu Anda memecahkan masalah jika Mengalami masalah.

Untuk referensi API untuk CallClientOptions objek, dan properti di networkConfiguration dalamnya, lihat CallClientOptions.

Menyiapkan server TURN di Azure

Anda dapat membuat komputer virtual Linux di portal Azure. Untuk informasi selengkapnya, lihat Mulai Cepat: Membuat mesin virtual Linux di portal Azure. Untuk menyebarkan server TURN, gunakan koturn. Coturn adalah implementasi gratis dan sumber terbuka dari server TURN dan STUN untuk VoIP dan WebRTC.

Setelah menyiapkan server TURN, Anda dapat mengujinya dengan menggunakan instruksi di halaman web WebRTC Trickle ICE .

Lalu lintas sinyal proksi

Untuk menyediakan URL server proksi, Anda perlu meneruskannya sebagai bagian dari CallClientOptions saat menginisialisasi CallClient. Untuk informasi selengkapnya tentang cara menyiapkan panggilan, lihat Azure Communication Services Web SDK untuk mulai cepat tentang cara menyiapkan suara dan 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.

Catatan

Jika URL proksi yang disediakan adalah URL yang tidak valid, CallClient inisialisasi gagal dan melemparkan kesalahan yang sesuai. Pesan kesalahan yang dilemparkan membantu Anda memecahkan masalah jika Mengalami masalah.

Untuk referensi API untuk CallClientOptions objek, dan properti di networkConfiguration dalamnya, lihat CallClientOptions.

Menyiapkan middleware proksi sinyal di Express.js

Anda juga dapat membuat middleware proksi di pengaturan server Express.js Anda agar semua URL dialihkan melaluinya dengan menggunakan paket npm http-proxy-middleware . Fungsi dari paket tersebut createProxyMiddleware harus mencakup apa yang Anda butuhkan untuk pengaturan proksi pengalihan sederhana. Berikut adalah contoh penggunaannya dengan beberapa pengaturan opsi yang dibutuhkan SDK sehingga semua URL kami berfungsi seperti yang diharapkan:

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

Petunjuk / Saran

Jika Anda mengalami masalah SSL, lihat paket cors .

Menyiapkan server proksi sinyal di Azure

Anda dapat membuat komputer virtual Linux di portal Azure dan menyebarkan server NGINX di dalamnya. Untuk informasi selengkapnya, lihat Mulai Cepat: Membuat mesin virtual Linux di portal Azure.

Berikut adalah konfigurasi NGINX yang dapat Anda gunakan sebagai sampel:

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

Fitur proksi tidak tersedia untuk identitas Teams dan untuk tindakan interoperabilitas Teams di Azure Communication Services.

Proksi memanggil lalu lintas media

Bagian berikut menjelaskan cara mem-proksi memanggil lalu lintas media Anda.

Apa itu server TURN?

Sering kali, membangun koneksi jaringan antara dua rekan tidak mudah. Koneksi langsung mungkin tidak berfungsi karena:

  • Firewall dengan aturan ketat.
  • Rekan-rekan yang duduk di belakang jaringan privat.
  • Komputer yang berjalan di lingkungan terjemahan alamat jaringan (NAT).

Untuk mengatasi masalah koneksi jaringan ini, Anda dapat menggunakan server yang menggunakan protokol Traversal Using Relay NAT (TURN) untuk menyampaikan lalu lintas jaringan. Utilitas Traversal Sesi untuk server NAT (STUN) dan TURN adalah server relai.

Berikan detail server TURN Anda dengan SDK

Untuk memberikan detail server TURN Anda, Anda perlu meneruskan detail server TURN apa yang akan digunakan sebagai bagian CallClientOptions dari saat menginisialisasi CallClient. Untuk informasi selengkapnya tentang cara menyiapkan panggilan, lihat Azure Communication Services iOS SDK untuk mulai cepat tentang cara menyiapkan suara dan 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);

Penting

Jika Anda memberikan detail server TURN saat menginisialisasi CallClient, semua lalu lintas media secara eksklusif mengalir melalui server TURN ini. Kandidat ICE lain yang biasanya dihasilkan saat Anda membuat panggilan tidak dipertimbangkan saat mencoba membangun konektivitas antara rekan-rekan. Itu berarti hanya relay kandidat yang dipertimbangkan. Untuk mempelajari selengkapnya tentang berbagai jenis kandidat Ice, lihat properti RTCIceCandidate: type.

Saat ini, Android SDK hanya mendukung satu alamat IPv4 tunggal dan protokol UDP untuk proksi media. Jika port UDP tidak disediakan, port UDP default 3478 digunakan. SDK menghasilkan kesalahan Failed to set media proxy ketika memanggil setIceServer dengan input yang tidak didukung.

  • Lebih dari satu server ICE disediakan dalam daftar IceServers.
  • Lebih dari satu url disediakan dalam daftar url IceServer.
  • Url IPv6 disediakan dalam daftar url.
  • Hanya port TCP yang disediakan.
  • Informasi ruang lingkup tidak disediakan.

Jika informasi server ICE yang diberikan tidak valid, CallClient inisialisasi gagal dan melemparkan kesalahan yang sesuai.

Menyiapkan server TURN di Azure

Anda dapat membuat komputer virtual Linux di portal Azure. Untuk informasi selengkapnya, lihat Membuat komputer virtual Linux di portal Microsoft Azure. Untuk menyebarkan server TURN, gunakan koturn. Coturn adalah implementasi gratis dan sumber terbuka dari server TURN dan STUN untuk VoIP dan WebRTC.

Setelah menyiapkan server TURN, Anda dapat mengujinya dengan menggunakan instruksi di halaman web WebRTC Trickle ICE .

Lalu lintas sinyal proksi

Untuk menyediakan URL server proksi, Anda perlu meneruskannya sebagai bagian CallClientOptions dari melalui propertinya Network saat menginisialisasi CallClient. Untuk informasi selengkapnya tentang cara menyiapkan panggilan, lihat Azure Communication Services iOS SDK untuk mulai cepat tentang cara menyiapkan suara dan 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.

Menyiapkan server proksi sinyal di Azure

Anda dapat membuat komputer virtual Linux di portal Azure dan menyebarkan server NGINX di dalamnya. Untuk informasi selengkapnya, lihat Mulai Cepat: Membuat mesin virtual Linux di portal Azure.

Berikut adalah konfigurasi NGINX yang dapat Anda gunakan sebagai sampel:

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

Fitur proksi tidak tersedia untuk identitas Teams dan tindakan interoperabilitas Azure Communication Services Teams.

Proksi memanggil lalu lintas media

Bagian berikut menjelaskan cara mem-proksi memanggil lalu lintas media Anda.

Apa itu server TURN?

Sering kali, membangun koneksi jaringan antara dua rekan tidak mudah. Koneksi langsung mungkin tidak berfungsi karena:

  • Firewall dengan aturan ketat.
  • Rekan-rekan yang duduk di belakang jaringan privat.
  • Komputer yang berjalan di lingkungan terjemahan alamat jaringan (NAT).

Untuk mengatasi masalah koneksi jaringan ini, Anda dapat menggunakan server yang menggunakan protokol Traversal Using Relay NAT (TURN) untuk menyampaikan lalu lintas jaringan. Utilitas Traversal Sesi untuk server NAT (STUN) dan TURN adalah server relai.

Berikan detail server TURN Anda dengan SDK

Untuk memberikan detail server TURN Anda, Anda perlu meneruskan detail server TURN apa yang akan digunakan sebagai bagian CallClientOptions dari saat menginisialisasi CallClient. Untuk informasi selengkapnya tentang cara menyiapkan panggilan, lihat Azure Communication Services Android SDK untuk mulai cepat tentang cara menyiapkan suara dan 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);

Penting

Jika Anda memberikan detail server TURN saat menginisialisasi CallClient, semua lalu lintas media secara eksklusif mengalir melalui server TURN ini. Kandidat ICE lain yang biasanya dihasilkan saat Anda membuat panggilan tidak dipertimbangkan saat mencoba membangun konektivitas antara rekan-rekan. Itu berarti hanya relay kandidat yang dipertimbangkan. Untuk mempelajari selengkapnya tentang berbagai jenis kandidat Ice, lihat properti RTCIceCandidate: type.

Saat ini, Android SDK hanya mendukung satu alamat IPv4 tunggal dan protokol UDP untuk proksi media. Jika port UDP tidak disediakan, port UDP default 3478 digunakan. SDK menghasilkan error Failed to set media proxy saat memanggil setIceServer dengan input yang tidak didukung sebagai berikut:

  • Lebih dari satu server ICE disediakan dalam daftar IceServers.
  • Lebih dari satu url disediakan dalam daftar url IceServer.
  • Url IPv6 disediakan dalam daftar url.
  • Hanya port TCP yang disediakan.
  • Informasi realm tidak disediakan.

Jika informasi server ICE yang diberikan tidak valid, CallClient inisialisasi gagal dan melemparkan kesalahan yang sesuai.

Menyiapkan server TURN di Azure

Anda dapat membuat komputer virtual Linux di portal Azure. Untuk informasi selengkapnya, lihat Mulai Cepat: Membuat mesin virtual Linux di portal Azure. Untuk menyebarkan server TURN, gunakan koturn. Coturn adalah implementasi gratis dan sumber terbuka dari server TURN dan STUN untuk VoIP dan WebRTC.

Setelah menyiapkan server TURN, Anda dapat mengujinya dengan menggunakan instruksi di halaman web WebRTC Trickle ICE .

Lalu lintas sinyal proksi

Untuk menyediakan URL server proksi, Anda perlu meneruskannya sebagai bagian CallClientOptions dari melalui propertinya Network saat menginisialisasi CallClient. Untuk informasi selengkapnya tentang cara menyiapkan panggilan, lihat Azure Communication Services Android SDK.

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.

Menyiapkan server proksi sinyal di Azure

Anda dapat membuat komputer virtual Linux di portal Azure dan menyebarkan server NGINX di dalamnya. Untuk informasi selengkapnya, lihat Mulai Cepat: Membuat mesin virtual Linux di portal Azure.

Berikut adalah konfigurasi NGINX yang dapat Anda gunakan sebagai sampel:

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

Fitur proksi tidak tersedia untuk identitas Teams dan tindakan interoperabilitas Azure Communication Services Teams.

Proksi memanggil lalu lintas media

Bagian berikut menjelaskan cara mem-proksi memanggil lalu lintas media Anda.

Apa itu server TURN?

Sering kali, membangun koneksi jaringan antara dua rekan tidak mudah. Koneksi langsung mungkin tidak berfungsi karena:

  • Firewall dengan aturan ketat.
  • Rekan-rekan yang duduk di belakang jaringan privat.
  • Komputer yang berjalan di lingkungan terjemahan alamat jaringan (NAT).

Untuk mengatasi masalah koneksi jaringan ini, Anda dapat menggunakan server yang menggunakan protokol Traversal Using Relay NAT (TURN) untuk menyampaikan lalu lintas jaringan. Utilitas Traversal Sesi untuk server NAT (STUN) dan TURN adalah server relai.

Berikan detail server TURN Anda dengan SDK

Untuk memberikan detail server TURN Anda, Anda perlu meneruskan detail server TURN apa yang akan digunakan sebagai bagian CallClientOptions dari saat menginisialisasi CallClient. Untuk informasi selengkapnya tentang cara menyiapkan panggilan, lihat Azure Communication Services Windows SDK untuk mulai cepat tentang cara menyiapkan suara dan 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);

Penting

Jika Anda memberikan detail server TURN saat menginisialisasi CallClient, semua lalu lintas media secara eksklusif mengalir melalui server TURN ini. Kandidat ICE lain yang biasanya dihasilkan saat Anda membuat panggilan tidak dipertimbangkan saat mencoba membangun konektivitas antara rekan-rekan. Itu berarti hanya relay kandidat yang dipertimbangkan. Untuk mempelajari selengkapnya tentang berbagai jenis kandidat Ice, lihat properti RTCIceCandidate: type.

Saat ini, Android SDK hanya mendukung satu alamat IPv4 tunggal dan protokol UDP untuk proksi media. Jika port UDP tidak disediakan, port UDP default 3478 digunakan. SDK menghasilkan kesalahan Failed to set media proxy saat memanggil setIceServer dengan input yang tidak didukung sebagai berikut:

  • Lebih dari satu server ICE disediakan dalam daftar IceServers.
  • Lebih dari satu url disediakan dalam daftar url IceServer.
  • Url IPv6 disediakan dalam daftar url.
  • Hanya port TCP yang disediakan.
  • Informasi realm tidak disediakan.

Jika informasi server ICE yang diberikan tidak valid, CallClient inisialisasi gagal dan melemparkan kesalahan yang sesuai.

Menyiapkan server TURN di Azure

Anda dapat membuat komputer virtual Linux di portal Azure. Untuk informasi selengkapnya, lihat Mulai Cepat: Membuat mesin virtual Linux di portal Azure. Untuk menyebarkan server TURN, gunakan koturn. Coturn adalah implementasi gratis dan sumber terbuka dari server TURN dan STUN untuk VoIP dan WebRTC.

Setelah menyiapkan server TURN, Anda dapat mengujinya dengan menggunakan instruksi di halaman web WebRTC Trickle ICE .

Lalu lintas sinyal proksi

Untuk menyediakan URL server proksi, Anda perlu meneruskannya sebagai bagian CallClientOptions dari melalui propertinya Network saat menginisialisasi CallClient. Untuk informasi selengkapnya tentang cara menyiapkan panggilan, lihat Azure Communication Services Windows SDK untuk mulai cepat tentang cara menyiapkan suara dan 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.

Menyiapkan server proksi sinyal di Azure

Anda dapat membuat komputer virtual Linux di portal Azure dan menyebarkan server NGINX di dalamnya. Untuk informasi selengkapnya, lihat Mulai Cepat: Membuat mesin virtual Linux di portal Azure.

Berikut adalah konfigurasi NGINX yang dapat Anda gunakan sebagai sampel:

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