Arama trafiğinizi bir ara sunucu üzerinden yönlendirin.

Bu makalede, Azure İletişim Hizmetleri çağrı trafiğinizi kendi sunucularınız üzerinden nasıl ara sunuculuk yapabileceğiniz açıklanmaktadır.

Bazı durumlarda, tüm istemci trafiğinizin denetleyebileceğiniz bir sunucuya yakın olması yararlı olabilir. SDK başlatılırken, trafiğin yönlendirmesini istediğiniz sunucularınızın ayrıntılarını sağlayabilirsiniz. Etkinleştirildikten sonra tüm medya trafiği (ses/video/ekran paylaşımı) Azure İletişim Hizmetleri varsayılanları yerine sağlanan TURN sunucuları üzerinden geçer.

Bu makalede şunların nasıl yapılacağını açıklanmaktadır:

  • TURN sunucusu ayarlayın.
  • Bir sinyal proxy sunucusu ayarlayın.

Önkoşullar

Hiçbiri

Ara sunucu özelliği, Azure İletişim Hizmetleri Arama SDK'sının genel sürüm 1.25.1'den başlayarak genel kullanıma sunulmuştur. Bu özelliği kullanmaya çalışırken bu SDK'nın veya SDK'nın daha sonraki bir sürümünü kullandığınızdan emin olun. Bu öğreticide, bu özelliğin ilk kez genel önizlemede kullanıma sunulduğu Çağrı SDK'sı 1.13.0-beta.1 sürümü kullanılır.

Ara sunucu arama medya trafiği

Aşağıdaki bölümlerde, medya trafiğinizin ara sunucu tarafından nasıl çağrıldığı açıklanmaktadır.

TURN sunucusu nedir?

Çoğu zaman, iki eş arasında ağ bağlantısı kurmak kolay değildir. Aşağıdaki nedenlerden dolayı doğrudan bağlantı çalışmayabilir:

  • Katı kurallara sahip güvenlik duvarları.
  • Özel ağın arkasında oturan eşler.
  • Ağ adresi çevirisi (NAT) ortamında çalışan bilgisayarlar.

Bu ağ bağlantısı sorunlarını çözmek için, ağ trafiğini geçiş için Geçiş Nat (TURN) Kullanarak Dolaşma protokolunu kullanan bir sunucu kullanabilirsiniz. NAT (STUN) ve TURN sunucuları için Oturum Geçişi Yardımcı Programları geçiş sunucularıdır.

SDK'ya TURN sunucusu ayrıntılarınızı sağlayın

TURN sunucularınızın ayrıntılarını sağlamak için, başlatılırken CallClientOptionshangi TURN sunucusunun bir parçası olarak kullanılacağına CallClient ilişkin ayrıntıları iletmeniz gerekir. Arama ayarlama hakkında daha fazla bilgi için ses ve video ayarlama hakkında hızlı başlangıç için web SDK'sını Azure İletişim Hizmetleri bölümüne bakın.

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.

Önemli

'yi başlatırken CallClientTURN sunucunuzun ayrıntılarını sağladıysanız, tüm medya trafiği yalnızca bu TURN sunucuları üzerinden akar. Normalde bir çağrı oluşturduğunuzda oluşturulan diğer ICE adayları, eşler arasında bağlantı kurmaya çalışırken dikkate alınmaz. Bu, yalnızca relay adayların dikkate alındığını gösterir. Farklı ICE aday türleri hakkında daha fazla bilgi için bkz. RTCIceCandidate: type özelliği.

?transport Sorgu parametresi TURN URL'sinin parçası değilse veya , udpveya tcp değerlerinden biri tlsdeğilse, varsayılan davranış UDP'dir.

Sağlanan URL'lerden herhangi biri geçersizse veya , veya şemalarından turn:birine sahip değilse, turns: başlatma başarısız olur ve buna göre hatalar stun: oluşturur. CallClient Sorunlarla karşılaşırsanız, atılan hata iletileri sorun gidermenize yardımcı olmalıdır.

Nesnenin API başvurusu ve CallClientOptions içindeki özellik için networkConfiguration bkz. CallClientOptions.

Azure'da TURN sunucusu ayarlama

Azure portalında bir Linux sanal makinesi oluşturabilirsiniz. Daha fazla bilgi için bkz . Hızlı Başlangıç: Azure portalında Linux sanal makinesi oluşturma. TURN sunucusu dağıtmak için coturn kullanın. Coturn, VoIP ve WebRTC için TURN ve STUN sunucusunun ücretsiz ve açık kaynak uygulamasıdır.

TURN sunucusunu ayarladıktan sonra WebRTC Trickle ICE web sayfasındaki yönergeleri kullanarak test edebilirsiniz.

Ara sunucu sinyal trafiği

Bir ara sunucunun URL'sini sağlamak için, uygulamasını başlatırken CallClientOptionsbunun CallClient bir parçası olarak geçirmeniz gerekir. Arama ayarlama hakkında daha fazla bilgi için ses ve video ayarlama hakkında hızlı başlangıç için web SDK'sını Azure İletişim Hizmetleri bölümüne bakın.

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.

Not

Sağlanan ara sunucu URL'si geçersiz bir URL ise başlatma CallClient başarısız olur ve buna göre hatalar oluşturur. Atılan hata iletileri, sorunlarla karşılaşırsanız sorun gidermenize yardımcı olur.

Nesnenin API başvurusu ve CallClientOptions içindeki özellik için networkConfiguration bkz. CallClientOptions.

Express.js'de sinyal ara sunucusu ara yazılımı ayarlama

Ayrıca, http-proxy-ara yazılım npm paketini kullanarak tüm URL'lerin yeniden yönlendirilmesini sağlamak için Express.js sunucu kurulumunuzda bir ara sunucu oluşturabilirsiniz. Bu createProxyMiddleware pakete ait işlev, basit bir yeniden yönlendirme ara sunucusu kurulumu için ihtiyacınız olanları kapsamalıdır. Tüm URL'lerimizin beklendiği gibi çalışması için SDK'nın ihtiyaç duyduğu bazı seçenek ayarlarıyla örnek kullanımı aşağıda verilmiştir:

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

İpucu

SSL sorunları yaşıyorsanız cors paketine bakın.

Azure'da sinyal ara sunucusu ayarlama

Azure portalında bir Linux sanal makinesi oluşturabilir ve üzerinde bir NGINX sunucusu dağıtabilirsiniz. Daha fazla bilgi için bkz . Hızlı Başlangıç: Azure portalında Linux sanal makinesi oluşturma.

Aşağıda örnek olarak kullanabileceğiniz bir NGINX yapılandırması verilmişti:

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

Ara sunucu özelliği Teams kimlikleri ve Azure İletişim Hizmetleri Teams birlikte çalışabilirlik eylemleri için kullanılamaz.

Ara sunucu arama medya trafiği

Aşağıdaki bölümlerde, medya trafiğinizin ara sunucu tarafından nasıl çağrıldığı açıklanmaktadır.

TURN sunucusu nedir?

Çoğu zaman, iki eş arasında ağ bağlantısı kurmak kolay değildir. Aşağıdaki nedenlerden dolayı doğrudan bağlantı çalışmayabilir:

  • Katı kurallara sahip güvenlik duvarları.
  • Özel ağın arkasında oturan eşler.
  • Ağ adresi çevirisi (NAT) ortamında çalışan bilgisayarlar.

Bu ağ bağlantısı sorunlarını çözmek için, ağ trafiğini geçiş için Geçiş Nat (TURN) Kullanarak Dolaşma protokolunu kullanan bir sunucu kullanabilirsiniz. NAT (STUN) ve TURN sunucuları için Oturum Geçişi Yardımcı Programları geçiş sunucularıdır.

SDK ile TURN sunucusu ayrıntılarınızı sağlayın

TURN sunucularınızın ayrıntılarını sağlamak için, başlatılırken CallClientOptionshangi TURN sunucusunun bir parçası olarak kullanılacağına CallClient ilişkin ayrıntıları iletmeniz gerekir. Arama ayarlama hakkında daha fazla bilgi için ses ve video ayarlama hakkında hızlı başlangıç için iOS SDK'Azure İletişim Hizmetleri bakın.

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

Önemli

'yi başlatırken CallClientTURN sunucunuzun ayrıntılarını sağladıysanız, tüm medya trafiği yalnızca bu TURN sunucuları üzerinden akar. Normalde bir çağrı oluşturduğunuzda oluşturulan diğer ICE adayları, eşler arasında bağlantı kurmaya çalışırken dikkate alınmaz. Bu, yalnızca relay adayların dikkate alındığını gösterir. Farklı buz adayı türleri hakkında daha fazla bilgi edinmek için bkz . RTCIceCandidate: type özelliği.

Şu anda Android SDK, medya ara sunucusu için tek bir IPv4 adresini ve UDP protokollerini desteklemektedir. BIR UDP bağlantı noktası sağlanmazsa, varsayılan bir UDP bağlantı noktası 3478 kullanılır. SDK, desteklenmeyen bir girdi ile setIceServer çağrıldığında Failed to set media proxy hatası oluşturur:

  • IceServers listesinde birden fazla ICE sunucusu sağlanır.
  • IceServer'ın url listesinde birden fazla URL sağlanır.
  • IPv6 url'si url listesinde sağlanır.
  • Yalnızca TCP bağlantı noktası sağlanır.
  • Bölge bilgileri sağlanmadı.

Sağlanan ICE sunucusu bilgileri geçersizse başlatma CallClient başarısız olur ve buna göre hatalar oluşturur.

Azure'da TURN sunucusu ayarlama

Azure portalında bir Linux sanal makinesi oluşturabilirsiniz. Daha fazla bilgi için bkz. Azure portalında Linux sanal makinesi oluşturma. TURN sunucusu dağıtmak için coturn kullanın. Coturn, VoIP ve WebRTC için TURN ve STUN sunucusunun ücretsiz ve açık kaynak uygulamasıdır.

TURN sunucusunu ayarladıktan sonra WebRTC Trickle ICE web sayfasındaki yönergeleri kullanarak test edebilirsiniz.

Ara sunucu sinyal trafiği

Bir proxy sunucusunun URL'sini sağlamak için, uygulamasını başlatırken CallClientOptionsözelliğinin NetworkCallClient bir parçası olarak geçirmeniz gerekir. Arama ayarlama hakkında daha fazla bilgi için ses ve video ayarlama hakkında hızlı başlangıç için iOS SDK'Azure İletişim Hizmetleri bakın.

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.

Azure'da sinyal ara sunucusu ayarlama

Azure portalında bir Linux sanal makinesi oluşturabilir ve üzerinde bir NGINX sunucusu dağıtabilirsiniz. Daha fazla bilgi için bkz . Hızlı Başlangıç: Azure portalında Linux sanal makinesi oluşturma.

Aşağıda örnek olarak kullanabileceğiniz bir NGINX yapılandırması verilmişti:

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

Proxy özelliği, Teams kimlikleri ve Azure İletişim Hizmetleri ile Teams birlikte çalışabilirlik eylemleri için kullanılamaz.

Ara sunucu arama medya trafiği

Aşağıdaki bölümlerde, medya trafiğinizin ara sunucu tarafından nasıl çağrıldığı açıklanmaktadır.

TURN sunucusu nedir?

Çoğu zaman, iki eş arasında ağ bağlantısı kurmak kolay değildir. Aşağıdaki nedenlerden dolayı doğrudan bağlantı çalışmayabilir:

  • Katı kurallara sahip güvenlik duvarları.
  • Özel ağın arkasında oturan eşler.
  • Ağ adresi çevirisi (NAT) ortamında çalışan bilgisayarlar.

Bu ağ bağlantısı sorunlarını çözmek için, ağ trafiğini geçiş için Geçiş Nat (TURN) Kullanarak Dolaşma protokolunu kullanan bir sunucu kullanabilirsiniz. NAT (STUN) ve TURN sunucuları için Oturum Geçişi Yardımcı Programları geçiş sunucularıdır.

SDK ile TURN sunucusu ayrıntılarınızı sağlayın

TURN sunucularınızın ayrıntılarını sağlamak için, başlatılırken CallClientOptionshangi TURN sunucusunun bir parçası olarak kullanılacağına CallClient ilişkin ayrıntıları iletmeniz gerekir. Arama ayarlama hakkında daha fazla bilgi için ses ve video ayarlama hakkında hızlı başlangıç için bkz. Android SDK'Azure İletişim Hizmetleri.

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

Önemli

'yi başlatırken CallClientTURN sunucunuzun ayrıntılarını sağladıysanız, tüm medya trafiği yalnızca bu TURN sunucuları üzerinden akar. Normalde bir çağrı oluşturduğunuzda oluşturulan diğer ICE adayları, ağdaki eşler (düğümler) arasında bağlantı kurmaya çalışırken dikkate alınmaz. Bu, yalnızca relay adayların dikkate alındığını gösterir. Farklı buz adayı türleri hakkında daha fazla bilgi edinmek için bkz . RTCIceCandidate: type özelliği.

Şu anda Android SDK, medya ara sunucusu için tek bir IPv4 adresini ve UDP protokollerini desteklemektedir. BIR UDP bağlantı noktası sağlanmazsa, varsayılan bir UDP bağlantı noktası 3478 kullanılır. SDK, desteklenmeyen girişle çağrı setIceServer yaparken aşağıdaki gibi bir Failed to set media proxy hata oluşturur:

  • IceServers listesinde birden fazla ICE sunucusu sağlanır.
  • IceServer'ın url listesinde birden fazla URL sağlanır.
  • IPv6 url'si url listesinde sağlanır.
  • Yalnızca TCP bağlantı noktası sağlanır.
  • Bölge bilgileri sağlanmadı.

Sağlanan ICE sunucusu bilgileri geçersizse başlatma CallClient başarısız olur ve buna göre hatalar oluşturur.

Azure'da TURN sunucusu ayarlama

Azure portalında bir Linux sanal makinesi oluşturabilirsiniz. Daha fazla bilgi için bkz . Hızlı Başlangıç: Azure portalında Linux sanal makinesi oluşturma. TURN sunucusu dağıtmak için coturn kullanın. Coturn, VoIP ve WebRTC için TURN ve STUN sunucusunun ücretsiz ve açık kaynak uygulamasıdır.

TURN sunucusunu ayarladıktan sonra WebRTC Trickle ICE web sayfasındaki yönergeleri kullanarak test edebilirsiniz.

Ara sunucu sinyal trafiği

Bir proxy sunucusunun URL'sini sağlamak için, uygulamasını başlatırken CallClientOptionsözelliğinin NetworkCallClient bir parçası olarak geçirmeniz gerekir. Arama ayarlama hakkında daha fazla bilgi için bkz. Azure İletişim Hizmetleri Android SDK'sı.

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.

Azure'da sinyal ara sunucusu ayarlama

Azure portalında bir Linux sanal makinesi oluşturabilir ve üzerinde bir NGINX sunucusu dağıtabilirsiniz. Daha fazla bilgi için bkz . Hızlı Başlangıç: Azure portalında Linux sanal makinesi oluşturma.

Aşağıda örnek olarak kullanabileceğiniz bir NGINX yapılandırması verilmişti:

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

Azure İletişim Hizmetleri Teams kimlikleri ve Teams birlikte çalışabilirlik eylemleri için ara sunucu özelliği kullanılamaz.

Ara sunucu arama medya trafiği

Aşağıdaki bölümlerde, medya trafiğinizin ara sunucu tarafından nasıl çağrıldığı açıklanmaktadır.

TURN sunucusu nedir?

Çoğu zaman, iki eş arasında ağ bağlantısı kurmak kolay değildir. Aşağıdaki nedenlerden dolayı doğrudan bağlantı çalışmayabilir:

  • Katı kurallara sahip güvenlik duvarları.
  • Özel ağın arkasında oturan eşler.
  • Ağ adresi çevirisi (NAT) ortamında çalışan bilgisayarlar.

Bu ağ bağlantısı sorunlarını çözmek için, ağ trafiğini geçiş için Geçiş Nat (TURN) Kullanarak Dolaşma protokolunu kullanan bir sunucu kullanabilirsiniz. NAT (STUN) ve TURN sunucuları için Oturum Geçişi Yardımcı Programları geçiş sunucularıdır.

SDK ile TURN sunucusu ayrıntılarınızı sağlayın

TURN sunucularınızın ayrıntılarını sağlamak için, başlatılırken CallClientOptionshangi TURN sunucusunun bir parçası olarak kullanılacağına CallClient ilişkin ayrıntıları iletmeniz gerekir. Arama ayarlama hakkında daha fazla bilgi için ses ve video ayarlama hakkında hızlı başlangıç için windows SDK'Azure İletişim Hizmetleri bölümüne bakın.

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

Önemli

'yi başlatırken CallClientTURN sunucunuzun ayrıntılarını sağladıysanız, tüm medya trafiği yalnızca bu TURN sunucuları üzerinden akar. Normalde bir çağrı oluşturduğunuzda oluşturulan diğer ICE adayları, taraflar arasında ağ bağlantısı kurmaya çalışırken dikkate alınmaz. Bu, yalnızca relay adayların dikkate alındığını gösterir. Farklı buz adayı türleri hakkında daha fazla bilgi edinmek için bkz . RTCIceCandidate: type özelliği.

Şu anda Android SDK, medya ara sunucusu için tek bir IPv4 adresini ve UDP protokollerini desteklemektedir. BIR UDP bağlantı noktası sağlanmazsa, varsayılan bir UDP bağlantı noktası 3478 kullanılır. SDK, setIceServer çağrısı desteklenmeyen girdi ile yapıldığında şu Failed to set media proxy hatayı verir:

  • IceServers listesinde birden fazla ICE sunucusu sağlanır.
  • IceServer'ın url listesinde birden fazla URL sağlanır.
  • IPv6 url'si url listesinde sağlanır.
  • Yalnızca TCP bağlantı noktası sağlanır.
  • Bölge bilgileri sağlanmadı.

Sağlanan ICE sunucusu bilgileri geçersizse başlatma CallClient başarısız olur ve buna göre hatalar oluşturur.

Azure'da TURN sunucusu ayarlama

Azure portalında bir Linux sanal makinesi oluşturabilirsiniz. Daha fazla bilgi için bkz . Hızlı Başlangıç: Azure portalında Linux sanal makinesi oluşturma. TURN sunucusu dağıtmak için coturn kullanın. Coturn, VoIP ve WebRTC için TURN ve STUN sunucusunun ücretsiz ve açık kaynak uygulamasıdır.

TURN sunucusunu ayarladıktan sonra WebRTC Trickle ICE web sayfasındaki yönergeleri kullanarak test edebilirsiniz.

Ara sunucu sinyal trafiği

Bir proxy sunucusunun URL'sini sağlamak için, uygulamasını başlatırken CallClientOptionsözelliğinin NetworkCallClient bir parçası olarak geçirmeniz gerekir. Arama ayarlama hakkında daha fazla bilgi için ses ve video ayarlama hakkında hızlı başlangıç için windows SDK'Azure İletişim Hizmetleri bölümüne bakın.

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.

Azure'da sinyal ara sunucusu ayarlama

Azure portalında bir Linux sanal makinesi oluşturabilir ve üzerinde bir NGINX sunucusu dağıtabilirsiniz. Daha fazla bilgi için bkz . Hızlı Başlangıç: Azure portalında Linux sanal makinesi oluşturma.

Aşağıda örnek olarak kullanabileceğiniz bir NGINX yapılandırması verilmişti:

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