2014-04-25 10 views
17

Ich habe Probleme mit NAT traversal und WebRTC. Videostreaming funktioniert mit einigen Leuten, aber nicht mit jemandem, der hinter einem Wohnheimrouter ist.WebRTC - Wie viele STUN/TURN-Server muss ich angeben?

Ich denke, das sollte mit einem TURN-Server gelöst werden. Ich habe das getan, es funktioniert immer noch nicht, und jetzt frage ich mich, ob der TURN-Server überhaupt funktioniert. In der Folge frage ich mich, ob ich mehrere TURN-Server setzen kann oder sollte, und wenn ja, wie.

Ich fand this list of STUN/TURN servers in another thread. Im Moment bin ich Einstellung sie wie diese

var STUN = { 
    'url': 'stun:stun.l.google.com:19302', 
}; 

var TURN = { 
    url: 'turn:[email protected]:80', 
    credential: 'homeo' 
}; 

var iceServers = 
{ 
    iceServers: [STUN, TURN] 
}; 

var pc = new RTCPeerConnection(iceServers); 

Also meine Frage ist grundsätzlich: Ist es möglich, mehrere STUN/TURN-Server zu setzen? Soll ich es wenn möglich tun und wie würde dieser Code aussehen?

+0

Ich habe Ihre Antwort aktualisiert, weil ich dachte, sie sei hilfreich, da Sie mir gezeigt haben, wie Sie das Array erstellen, um mehrere STUN- oder TURN-Server einzurichten. Aber ich wusste schon, was ein STUN und was ein TURN-Server ist. Ich möchte wissen, ob es nützlich ist, mehrere TURN-Server oder mehrere STUN-Server einzurichten (aus Gründen der Performance wird mein Programm den Server mit der geringsten Latenz auswählen, kann er feststellen, wann ein TURN-Server offline ist und auswählt) der nächste, wenn ja wie lange dauert das ..). Das Fehlen dieser Informationen war, warum ich nicht akzeptierte. Vielleicht war meine Frage einfach zu unspezifisch. – spacecoyote

+0

Dies sind die tatsächlichen Anmeldeinformationen, die Sie geschrieben haben, ich bin mir nicht sicher, wie viel Schaden es Ihnen zufügen kann, aber Sie sollten es aktualisieren: P –

Antwort

12
A STUN server is used to get an external network address. 
TURN servers are used to relay traffic if direct (peer to peer) connection fails. 

URLs für STUN und/oder drehen Server (optional), spezifiziert durch einen WebRTC app im iceServers Konfigurationsobjekt, das das erste Argument für den Konstruktor RTCPeerConnection ist.

Beispiel für die Verwendung mehr, dass die Server:

var ICE_config= { 
    'iceServers': [ 
    { 
     'url': 'stun:stun.l.google.com:19302' 
    }, 
    { 
     'url': 'turn:192.158.29.39:3478?transport=udp', 
     'credential': 'JZEOEt2V3Qb0y27GRntt2u2PAYA=', 
     'username': '28224511:1379330808' 
    }, 
    { 
     'url': 'turn:192.158.29.39:3478?transport=tcp', 
     'credential': 'JZEOEt2V3Qb0y27GRntt2u2PAYA=', 
     'username': '28224511:1379330808' 
    } 
    ] 
} 
pc = new RTCPeerConnection(ICE_config); 

Sobald RTCPeerConnection diese Informationen hat, ist nun mal die ICE Magie automatisch: RTCPeerConnection verwendet den ICE Rahmen den besten Weg zwischen den Peers zu erarbeiten, mit STUN arbeiten und TURN-Server wie nötig.

STUN: STUN-Server im öffentlichen Internet leben und haben eine einfache Aufgabe: Überprüfen Sie die IP: Port-Adresse einer eingehenden Anfrage (von einer Anwendung hinter einem NAT ausgeführt wird) und zurück als Antwort die Adresse senden. Mit anderen Worten, die Anwendung verwendet einen STUN-Server, um ihren IP: -Port aus einer öffentlichen Perspektive zu entdecken. Dieser Prozess ermöglicht es einem WebRTC-Peer, eine öffentlich zugängliche Adresse für sich selbst zu erhalten und diese dann über einen Signalisierungsmechanismus an einen anderen Peer weiterzuleiten, um eine direkte Verbindung aufzubauen. (In der Praxis arbeiten unterschiedliche NATs auf unterschiedliche Weise, und es können mehrere NAT Schichten sein, aber das Prinzip ist immer noch die gleiche.)

TURN: TURN RTCPeerConnection versucht, die direkte Kommunikation zwischen den Peers über UDP einzurichten. Wenn dies fehlschlägt, greift RTCPeerConnection auf TCP zurück. Wenn dies fehlschlägt, können TURN-Server als Fallback verwendet werden, um Daten zwischen Endpunkten weiterzuleiten.

Nur um zu wiederholen: TURN wird verwendet, um Audio/Video/Daten-Streaming zwischen Peers zu übertragen, keine Signalisierung von Daten!

TURN-Server haben öffentliche Adressen, so dass sie von Peers kontaktiert werden können, selbst wenn die Peers hinter Firewalls oder Proxys stehen. TURN-Server haben eine konzeptionell einfache Aufgabe - um einen Stream weiterzuleiten - aber im Gegensatz zu STUN-Servern verbrauchen sie inhärent viel Bandbreite. Mit anderen Worten, TURN-Server müssen stärker sein.

siehe this

+1

Vielen Dank. Dieses Array-Konstrukt mit den Multiple-Turn-Servern war genau das, wonach ich suchte. Ist es sinnvoll, mehrere davon zu setzen? – spacecoyote

+0

@spacecoyote Ein STUN-Server wird verwendet, um eine externe Netzwerkadresse abzurufen. TURN-Server werden verwendet, um den Datenverkehr weiterzuleiten, wenn eine direkte (Peer-to-Peer-) Verbindung fehlschlägt. ja es ist nützlich. jeder verwendet für einen Zweck – Muath

+3

@Muath, die nicht direkt die Frage von spacecoyote beantwortet, die ich denke, eine gültige ist - was sind die Vorteile der Angabe von mehr als einem TURN-Server und wie wird die WebRTC-Implementierung bestimmen, welche zu verwenden? – Ternary

5

In Bezug auf STUN, WebRTC Binding Anfragen an alle senden, und die Ergebnisse zusammengeführt werden. (Beachten Sie, dass in älteren Versionen des WebRTC-Codes anscheinend nur der erste STUN-Server verwendet wird)

Ich würde empfehlen, mehr als einen STUN-Server zu verwenden, da Sie die Verbindungszeit im Durchschnitt reduzieren. Die genaue Anzahl hängt von der Zuverlässigkeit Ihrer STUN-Server ab.Im Allgemeinen sind 2 genug.

In Bezug auf TURN ist das Problem komplexer, da diese Server Ihren Datenverkehr weiterleiten, wenn P2P-Verbindungen nicht möglich sind. Wenn Sie viele Clients haben, wird ein einzelner TURN-Server wahrscheinlich seine maximale Bandbreite erreichen. In diesem Fall hilft das Festlegen mehrerer TURN-Server.

Wie? Während der Konnektivität überprüft Phase, WebRTC wählt das TURN-Relais mit der niedrigsten Umlaufzeit. Wenn Sie also mehrere TURN-Server einrichten, kann Ihre Anwendung in Bezug auf Bandbreite und Anzahl der Benutzer skaliert werden.

Wenn Sie keine große Anwendung entwickeln, 1 oder 2 TURN-Server sind in der Regel ausreichend.

können Sie das Innere ich empfehlen, sich WebRTC Code bei https://chromium.googlesource.com/external/webrtc/+/master

durchsuchen: WebRTC/p2p/client/basicportallocator.cc, WebRTC/p2p/base/stunport.cc und WebRTC/p2p/base/turnport.cc

+0

zu überprüfen Arbeitsüberprüfung der ICE-Server: https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/ – Devaroop

Verwandte Themen