Diese Frage wurde bisher gestellt, aber ich habe noch keine Antwort gefunden. Ich habe im Grunde das gleiche Problem wie beschrieben here und here.iceConnectionState wird getrennt (bei Verwendung über das Internet)
Ich versuche, eine WebRTC-Verbindung mit PeerJS einzurichten. Es funktioniert einwandfrei im LAN, aber ich kann es nicht über das Internet arbeiten. Ich verwende coturn als TURN-Server, aber bisher hat dies nicht die Problem.Die Chromium Konsole druckt die folgenden gelöst:
PeerJS: Added ICE candidate for: client1
peer.js:1476 PeerJS: Set remoteDescription: ANSWER for: client1
peer.js:1476 PeerJS: Set remoteDescription: OFFER for: client1
peer.js:1476 PeerJS: Set remoteDescription: ANSWER for: client1
peer.js:1476 PeerJS: Received remote stream
peer.js:1476 PeerJS: Receiving stream MediaStream
peer.js:1476 PeerJS: Created answer.
peer.js:1476 PeerJS: Set localDescription: answer for: client1
3peer.js:1476 PeerJS: Received ICE candidates for: client1
3peer.js:1476 PeerJS: Added ICE candidate for: client1
peer.js:1476 PeerJS: iceConnectionState is disconnected, closing connections to client1
peer.js:1476 PeerJS: Cleaning up PeerConnection to client1
2peer.js:1476 PeerJS: iceConnectionState is disconnected, closing connections to client1
Das Peer-Objekt Ich verwende sieht wie folgt aus:
var peer = new Peer(
GetURLParameter('id'),
{ key: peerKey, debug: peerDebug},
{config:
{ 'iceServers': [
{ url: 'stun:[server ip here]:3478'},
{ url: 'turn:[server ip here]:3478'}
]}
}
);
coturn, auf die turnserver mit turnserver -L [server ip] starten, druckt die folgenden:
0: Relay address to use: [server ip here]
0: pid file created: /var/run/turnserver.pid
0: IO method (main listener thread): epoll (with changelist)
0: WARNING: I cannot support STUN CHANGE_REQUEST functionality because only one IP address is provided
0: Wait for relay ports initialization...
0: relay [server ip here] initialization...
0: relay [server ip here] initialization done
0: Relay ports initialization done
0: IO method (general relay thread): epoll (with changelist)
0: turn server id=0 created
0: IPv4. UDP listener opened on: [server ip here]:3478
0: IPv4. TCP listener opened on : [server ip here]:3478
0: Total UDP servers: 1
0: Total General servers: 1
0: IO method (cli thread): epoll (with changelist)
0: IPv4. CLI listener opened on : 127.0.0.1:5766
0: IO method (auth thread): epoll (with changelist)
Und schließlich, da ich denke, dass dies ein Sicherheitsproblem sein könnte, curr meine iptables-Konfiguration sieht so aus:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:3478
ACCEPT udp -- anywhere anywhere udp dpt:3478
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:3478
ACCEPT udp -- anywhere anywhere udp dpt:3478
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:3478
ACCEPT udp -- anywhere anywhere udp dpt:3478
Wer hat eine Idee, wie man dieses Ding funktioniert? Jede Hilfe würde sehr geschätzt werden!
EDIT: Es stellt sich heraus, mein JSON für die TURN-Konfiguration war chaotisch. Mein neues Peer Objekt sieht nun wie folgt aus:
var peer = new Peer(
GetURLParameter('id'), {
key: peerKey,
debug: peerDebug,
config: {
'iceServers': [
{ url: 'stun:[server ip]:3478'},
{ url: 'turn:[server ip]:3478'}
]
}
}
);
Das gibt mir viel mehr Feedback über den TURN-Server (also denke ich, ich bin in die richtige Richtung) - aber das Problem weiterhin besteht dennoch.
EDIT2: Nun, wird es ziemlich seltsam. Es scheint eine Art Cross-Browser-Kompatibilitätsproblem zu sein. Mit dem TURN-Server-Test-Tool, das in der Mitte vorgeschlagen wurde, erhalte ich in Firefox andere Ergebnisse als in Chrom. Ich beabsichtige, Chromium zu verwenden, da der Kioskmodus für meine Anwendung sehr nützlich ist. Aber zurück zum Turn-Server. In Firefox, wenn Benutzerkonten verwendet, scheint alles gut zu funktionieren: Den Ausgang der Github Testseite:
0.004 1 host 0 UDP 192.168.178.28 39919 126 | 32512 | 255
0.005 2 host 0 UDP 192.168.178.28 56123 126 | 32512 | 254
0.076 1 srflx 1 UDP 178.39.74.108 39919 100 | 32543 | 255
0.077 1 relay 2 UDP [Server IP ] 52147 5 | 32543 | 255
0.098 2 srflx 1 UDP 178.39.74.108 56123 100 | 32543 | 254
0.099 2 relay 2 UDP [Server IP ] 60002 5 | 32543 | 254
0.099 Done
jedoch erlaubt anonymen Zugriff auf den TURN-Server und versuchen, ohne Benutzername und Passwort einloggen, absolut nichts passiert.
Verschiedene Geschichte in Chrom: Mit Benutzername und Passwort geliefert wird, passiert folgendes:
0.002 1 host 138421141 udp 192.168.178.28 42343 126 | 30 | 255
0.002 2 host 138421141 udp 192.168.178.28 49001 126 | 30 | 254
0.028 1 srflx 842163049 udp 178.39.74.108 42343 100 | 30 | 255
0.049 2 srflx 842163049 udp 178.39.74.108 49001 100 | 30 | 254
... während das Terminal auf dem TURN-Server 401 Fehler Ausdrucken von Nachrichten über und über. Es scheint mir, dass die Anmeldeinformationen niemals den Server erreichen, wenn Chrom verwendet wird. Die Fehlermeldung 401 gibt einen leeren Benutzernamen an.
Ich könnte wirklich Chrom für diese Sache verwenden. Hat jemand eine Idee, wie man das schafft?
für Starter, wo hosten Sie Ihren Turn-Server, hat es eine öffentliche IP? – mido
können Sie testen, ob die TURN unabhängig arbeitet, überprüfen Sie diese [link] (https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/), und in der Regel für die Wende geben die Menschen Benutzername Passwort Sie fehlen in Ihrer TURN-Konfiguration. – mido