我正在尝试为基于WebRTC的应用程序设置COTURN服务器。但是我遇到了一些我无法理解的错误消息,并且无法在互联网上找到任何帮助。
以下是有关应用的一些详细信息:
两个用户登录到应用程序,其中一个用户可以与另一个用户共享屏幕 - 因此流只向一个方向进行
我能够让应用程序在Intranet和某些外部网络上运行。因此,我确信应用程序在STUN模式足够的情况下工作正常。
对于某些网络,STUN候选人经常失败,所以我需要一台TURN服务器来转发流。
我从服务器收集了一些服务器日志,以防有人根据它们识别出问题:
handle_udp_packet: New UDP endpoint: local addr <IP Address>:3478, remote addr <IP Address2>:59942
handle_turn_command: STUN method 0x1 ignored
handle_udp_packet: New UDP endpoint: local addr <IP Address>:3478, remote addr <IP Address2>:59944
handle_turn_command: STUN method 0x1 ignored
session 128000000000000096: realm <server URL> user <>: incoming packet message processed, error 401: Unauthorised
session 128000000000000097: realm <server URL> user <>: incoming packet message processed, error 401: Unauthorised
handle_turn_command: STUN method 0x1 ignored
handle_turn_command: STUN method 0x1 ignored
session 128000000000000096: realm <server URL> user <>: incoming packet message processed, error 401: Unauthorised
session 128000000000000097: realm <server URL> user <>: incoming packet message processed, error 401: Unauthorised
IPv4. Local relay addr: <IP Address>:64306
session 128000000000000096: new, realm=<server URL>, username=<username>, lifetime=600
session 128000000000000096: realm <server URL> user <username>: incoming packet ALLOCATE processed, success
IPv4. Local relay addr: <IP Address>:65384
session 128000000000000097: new, realm=<server URL>, username=<username>, lifetime=600
session 128000000000000097: realm <server URL> user <username>: incoming packet ALLOCATE processed, success
handle_turn_command: STUN method 0x1 ignored
handle_turn_command: STUN method 0x1 ignored
session 128000000000000096: realm <server URL> user <username>: incoming packet ALLOCATE processed, success
session 128000000000000097: realm <server URL> user <username>: incoming packet ALLOCATE processed, success
handle_turn_command: STUN method 0x1 ignored
handle_turn_command: STUN method 0x1 ignored
handle_turn_command: STUN method 0x1 ignored
handle_turn_command: STUN method 0x1 ignored
handle_turn_command: STUN method 0x1 ignored
handle_turn_command: STUN method 0x1 ignored
handle_turn_command: STUN method 0x1 ignored
handle_turn_command: STUN method 0x1 ignored
handle_turn_command: STUN method 0x1 ignored
handle_turn_command: STUN method 0x1 ignored
handle_turn_command: STUN method 0x1 ignored
handle_turn_command: STUN method 0x1 ignored
session 128000000000000096: refreshed, realm=<server URL>, username=<username>, lifetime=0
session 128000000000000096: realm <server URL> user <username>: incoming packet REFRESH processed, success
session 128000000000000097: refreshed, realm=<server URL>, username=<username>, lifetime=0
session 128000000000000097: realm <server URL> user <username>: incoming packet REFRESH processed, success
session 128000000000000096: closed (2nd stage), user <username> realm <server URL> origin <>, local <IP Address>:3478, remote <IP Address2>:59942, reason: allocation timeout
session 128000000000000096: delete: realm=<server URL>, username=<username>
session 128000000000000097: closed (2nd stage), user <username> realm <server URL> origin <>, local <IP Address>:3478, remote <IP Address2>:59944, reason: allocation timeout
session 128000000000000097: delete: realm=<server URL>, username=<username>
以下是 turnserver.conf 文件的外观:
listening-port=3478
#tls-listening-port=443
realm=subdomain.domain.com
server-name=subdomain.domain.com
lt-cred-mech
userdb=/etc/turnserdb.conf
cert=/home/ubuntu/certificate.crt
pkey=/home/ubuntu/qc.key
pkey-pwd=L1ght!t
no-stdout-log
Verbose
我特别关注以下几点:
我应该假设,因为我的代码正在使用STUN服务器,它也适用于工作 TURN服务器吗?因此,错误意味着问题出在TURN服务器上?
我可以看到一些错误,说明“分配超时”。这是否意味着参考任何可能不足的RAM / CPU /网络分配?
部分请求的用户名部分为空,&#39;&lt;&gt;&#39;而不是&#39;&#39; 401 Unauthorized&#39;,而我已经三次检查RTCPeerConnection配置 - 它们确实包含用户名和密码。
除了上面的日志外,我还看到了#43; 438错误的nonce&#39;也经常进来。我对此进行了一些搜索,但它看起来并不像我可以通过JS控制的东西。它与任何服务器配置有关吗?
谢谢!感谢您的帮助。
答案 0 :(得分:1)
您的配置如何?
我的webRTC用法示例:
sudo nano /etc/turnserver.conf - &GT;
listening-port=80
tls-listening-port=1133
fingerprint
lt-cred-mech
userdb=/etc/turnuserdb.conf
realm=subdomain.domain.com
server-name=subdomain.domain.com
total-quota=100
bps-capacity=0
stale-nonce
log-file=/var/log/turnserver/turn.log
no-loopback-peers
no-multicast-peers
sudo nano /etc/turnuserdb.conf - &GT;用户名:Passwort
如果启用,您还需要在防火墙中允许这些端口。 在此处查看您的服务器:Trickle ICE
注意,你总是需要使用你的ip / url和端口,如123.456.789.10:80
答案 1 :(得分:1)
我在TURN服务器设置中遇到了一些问题。
首先,我们从一个大约两岁的博客中获取了它。因此,设置也是两年 - Coturn Monza。开始的理想方式是获取Coturn AMI(亚马逊机器映像)(Version 4.5.0.6 details)并使用它来设置服务器。或者,我们至少应该通过git存储库进行最新的设置。
第二个问题在于配置。即使在此处发布问题之前,我们也错过了在服务器上打开必要的端口。一旦我们这样做了,我们开始得到STUN响应,但是接力还没有工作。
第三个关键问题是Turnserver.config文件中的配置。我们几乎没有完成所有配置,在Polaris回答之后我们做了。配置文件包含对每个配置的充分说明,问题确实在于配置。
最后一个问题是测试用例。我们希望确保继电器“正常工作”,并且在测试的早期阶段我们已经确定了需要中继的特定网络设置(即只有STUN无法完成请求。)最终我们了解到甚至TURN服务器将无法通过该设置。
我们确实花了一些时间尝试NOSTUN模式(它在turnserver.config中),但由于缺乏良好的测试用例,我们无法确认继电器是否正常工作。
我不完全理解Trickle ICE Page上的测试代码,但我相信那里的结果是可靠的。
答案 2 :(得分:0)
以下是一些问题排查提示:
现在尝试使用静态用户名和密码,例如:
用户名=:测试
然后将其包含在PeerConnectionConfig中:
{'url':'turn:yourserver.com:3478',凭据:'测试',用户名:'用户名'}
使用“WebRTC网络限制器”chrome扩展程序强制WebRTC使用TURN服务器。
现在注释掉cert和pkey。