Этот вопрос задавали раньше, но я пока не нашел ответа. У меня в основном та же проблема, что описана здесь и здесь.
Я пытаюсь установить соединение webRTC с помощью PeerJS. Он безупречно работает в локальной сети, но я не могу заставить его работать через Интернет. Я использую coturn в качестве сервера TURN, но пока это не решило проблему. Консоль Chromium выводит на экран следующее:
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
Одноранговый объект, который я использую, выглядит так:
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 при запуске Turnserver с помощью turnserver -L [ip-адрес сервера] выводит следующее:
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)
И, наконец, поскольку я предполагаю, что это может быть проблемой безопасности, моя конфигурация iptables в настоящее время выглядит так:
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
У кого-нибудь есть идея, как заставить эту вещь работать? Любая помощь будет принята с благодарностью!
РЕДАКТИРОВАТЬ. Оказалось, что мой JSON для конфигурации TURN был беспорядочным. Мой новый одноранговый объект теперь выглядит так:
var peer = new Peer(
GetURLParameter('id'), {
key: peerKey,
debug: peerDebug,
config: {
'iceServers': [
{ url: 'stun:[server ip]:3478'},
{ url: 'turn:[server ip]:3478'}
]
}
}
);
Это дает мне гораздо больше отзывов о сервере TURN (так что я думаю, что иду в правильном направлении), но, тем не менее, проблема сохраняется.
РЕДАКТИРОВАТЬ2: Это становится довольно странным. Кажется, это какая-то проблема совместимости между браузерами. Используя инструмент тестирования сервера TURN, предложенный mido, я получаю в Firefox другие результаты, чем в Chromium. Я собираюсь использовать Chromium, потому что его режим киоска очень пригодится для моего приложения. Но вернемся к серверу очереди. В Firefox при использовании учетных записей пользователей все работает нормально: Результат тестовой страницы github:
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
Однако, разрешая анонимный доступ к серверу TURN и пытаясь войти без имени пользователя и пароля, ничего не происходит.
Другая история в Chromium: при вводе имени пользователя и пароля происходит следующее:
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
... пока терминал на сервере TURN снова и снова распечатывает сообщение об ошибке 401. Мне кажется, что учетные данные никогда не доходят до сервера при использовании хрома. В сообщении об ошибке 401 указано пустое имя пользователя.
Я действительно мог бы использовать Chromium для этого. Кто-нибудь знает, как заставить это работать?