iceConnectionState ist nicht verbunden (bei Verwendung über das Internet)

Diese Frage wurde bereits gestellt, aber ich habe noch keine Antwort gefunden. Ich habe im Grunde das gleiche Problem wie beschriebenHie undHie.

Ich versuche, mit PeerJS eine webRTC-Verbindung aufzubauen. Es funktioniert einwandfrei im LAN, aber ich kann es nicht über das Internet zum Laufen bringen. Ich verwende coturn als TURN-Server, aber das hat das Problem bisher nicht gelöst. Die Chromium-Konsole druckt Folgendes aus:

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, das ich verwende, sieht folgendermaßen 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 gibt beim Starten des Turnservers mit Turnserver -L [Server-IP] Folgendes aus:

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 da ich schätze, dass dies ein Sicherheitsproblem sein könnte, sieht meine iptables-Konfiguration derzeit 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

Hat jemand eine Idee, wie man dieses Ding zum Laufen bringt? Jede Hilfe wäre sehr dankbar!

BEARBEITE: Es stellte sich heraus, dass mein JSON für die TURN-Konfiguration chaotisch war. Mein neues Peer-Objekt sieht jetzt so aus:

var peer = new Peer(
    GetURLParameter('id'), {
        key: peerKey,
        debug: peerDebug,
        config: {
            'iceServers': [
                { url: 'stun:[server ip]:3478'},
                { url: 'turn:[server ip]:3478'}
            ]
        }
    }
);

Dies gibt mir viel mehr Feedback zum TURN-Server (also gehe ich wahrscheinlich in die richtige Richtung) - aber das Problem bleibt trotzdem bestehen.

EDIT2: Nun, es wird ziemlich seltsam. Es scheint sich um eine Art browserübergreifendes Kompatibilitätsproblem zu handeln. Mit dem von mido vorgeschlagenen TURN-Server-Testtool erhalte ich in Firefox andere Ergebnisse als in Chromium. Ich beabsichtige, Chromium zu verwenden, da der Kiosk-Modus für meine Anwendung sehr nützlich wäre. Aber zurück zum Turn-Server. In Firefox scheint bei der Verwendung von Benutzerkonten alles in Ordnung zu sein: Die Ausgabe 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

enn Sie jedoch anonymen Zugriff auf den TURN-Server gewähren und versuchen, sich ohne Benutzernamen und Kennwort anzumelden, geschieht absolut nicht

Unterschiedliche Ereignisse in Chromium: Bei Angabe von Benutzername und Kennwort geschieht 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 immer wieder 401 Fehlermeldungen ausgibt. Es scheint mir, dass die Anmeldeinformationen bei Verwendung von Chrom niemals auf den Server gelangen. Die 401-Fehlermeldung gibt einen leeren Benutzernamen an.

Ich könnte Chrom wirklich für dieses Ding verwenden. Hat jemand eine Idee, wie man das zum Laufen bringt?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage