Apple 设备上的 Webrtc 连接 5 分钟后断开(使用 coturn 服务器)

问题描述 投票:0回答:1

我已经为我的 WebRTC 应用程序设置了一个转向服务器。在 Windows 和 Android 上,应用程序(和转向服务器)按预期工作。当我在 iOS 或 MacOS 上尝试该应用程序时(目前仅在 Safari 上以及某些设备上发生),WebRTC 连接一开始可以工作,但大约 5 分钟后就会断开。

这是来自回合服务器的日志。连接断开的时刻就在这条线附近

TLS/TCP socket buffer operation error (callback)

746: : session 000000000000000003: peer usage: realm=<metasim.io>, username=<testname>, rp=1767, rb=1642473, sp=281, sb=45819
750: : session 001000000000000006: peer 192.168.100.100 lifetime updated: 300
750: : session 001000000000000006: realm <metasim.io> user <testname>: incoming packet CREATE_PERMISSION processed, success
750: : session 001000000000000006: peer 37.63.64.9 lifetime updated: 300
750: : session 001000000000000006: realm <metasim.io> user <testname>: incoming packet CREATE_PERMISSION processed, success
750: : session 000000000000000003: peer 10.154.0.14 lifetime updated: 300
750: : session 000000000000000003: realm <metasim.io> user <testname>: incoming packet CREATE_PERMISSION processed, success
750: : session 000000000000000003: peer 10.154.0.14 lifetime updated: 600
750: : session 000000000000000003: realm <metasim.io> user <testname>: incoming packet CHANNEL_BIND processed, success
750: : session 000000000000000003: usage: realm=<metasim.io>, username=<testname>, rp=285, rb=47449, sp=1765, sb=1642092
750: : session 000000000000000003: peer usage: realm=<metasim.io>, username=<testname>, rp=1763, rb=1632229, sp=283, sb=46101
755: : session 000000000000000003: usage: realm=<metasim.io>, username=<testname>, rp=289, rb=47974, sp=1759, sb=1630876
755: : session 000000000000000003: peer usage: realm=<metasim.io>, username=<testname>, rp=1759, rb=1621207, sp=289, sb=46818
759: : session 000000000000000003: usage: realm=<metasim.io>, username=<testname>, rp=285, rb=47375, sp=1763, sb=1645836
759: : session 000000000000000003: peer usage: realm=<metasim.io>, username=<testname>, rp=1763, rb=1636011, sp=285, sb=46235
763: : session 000000000000000003: usage: realm=<metasim.io>, username=<testname>, rp=286, rb=47229, sp=1762, sb=1650592
763: : session 000000000000000003: peer usage: realm=<metasim.io>, username=<testname>, rp=1762, rb=1640926, sp=286, sb=46085
767: : session 000000000000000003: usage: realm=<metasim.io>, username=<testname>, rp=286, rb=47549, sp=1762, sb=1641564
767: : session 000000000000000003: peer usage: realm=<metasim.io>, username=<testname>, rp=1762, rb=1631749, sp=286, sb=46405
771: : session 000000000000000003: usage: realm=<metasim.io>, username=<testname>, rp=283, rb=47488, sp=1765, sb=1648212
771: : session 000000000000000003: peer usage: realm=<metasim.io>, username=<testname>, rp=1765, rb=1638599, sp=283, sb=46356
775: : session 000000000000000003: usage: realm=<metasim.io>, username=<testname>, rp=279, rb=47039, sp=1769, sb=1649852
775: : session 000000000000000003: peer usage: realm=<metasim.io>, username=<testname>, rp=1769, rb=1640051, sp=279, sb=45923
779: : session 000000000000000003: usage: realm=<metasim.io>, username=<testname>, rp=285, rb=47248, sp=1763, sb=1639700
779: : session 000000000000000003: peer usage: realm=<metasim.io>, username=<testname>, rp=1763, rb=1630019, sp=285, sb=46108
780: : session 001000000000000006: refreshed, realm=<metasim.io>, username=<testname>, lifetime=0, cipher=ECDHE-RSA-AES256-GCM-SHA384, method=TLSv1.2
780: : session 001000000000000006: realm <metasim.io> user <testname>: incoming packet REFRESH processed, success
780: : session 001000000000000006: TLS/TCP socket disconnected: 34.147.162.187:1090
780: : session 001000000000000006: usage: realm=<metasim.io>, username=<testname>, rp=8, rb=748, sp=8, sb=732
780: : session 001000000000000006: peer usage: realm=<metasim.io>, username=<testname>, rp=0, rb=0, sp=0, sb=0
780: : session 001000000000000006: closed (2nd stage), user <testname> realm <metasim.io> origin <>, local 0.0.0.0:3478, remote 34.147.162.187:1090, reason: TLS/TCP socket buffer operation error (callback)
780: : session 001000000000000006: delete: realm=<metasim.io>, username=<testname>
780: : session 001000000000000006: peer 37.63.64.9 deleted
780: : session 001000000000000006: peer 192.168.100.100 deleted

这也是turn.conf 文件:

# Realm settings
realm=<domain>

# Name
server-name=turnserver

fingerprint

# The TURN server IP address to be sent to external peers
external-ip=<ip>
listening-ip=0.0.0.0
listening-port=3478
min-port=10000
max-port=20000

# Validate credentials
lt-cred-mech
cli-password=<pass>

# Designate username and password
user=<user>:<pass>

# Certificate
cert=<path/to/certificate.crt>
pkey=<path/to/certificate.key>

# Logs
simple-log
verbose
log-file=/var/log/turn.log

# Possible fixes for 5-minutes bug, currently no success
#no-tlsv1
#no-tlsv1_1
#max-allocate-lifetime=36000
#permission-lifetime=36000
#stale-nonce=36000

这是Turn服务器的Trickle ICE测试的screenshot。在我没有出现下面的错误(代码=600)之前,但无论哪种方式,主要问题始终存在。

这是我们尝试过但不成功的事情的列表:

  • 在turn.conf中增加不同的超时(您可以在配置文件的最后一个注释中看到它们)
  • 使用/不使用证书启动 Turn 服务器
  • 按照建议禁用除 v3 之外的其他版本的 tls here

预期结果:使用 Turn 服务器为所有可能的设备与我们的应用程序建立无限的 WebRTC 连接。 实际结果:Apple 设备大约 5 分钟后连接断开。

非常感谢任何帮助!

ios webrtc stun turn coturn
1个回答
0
投票

事实证明问题不是出在回合服务器上。这是 websocket 一段时间后关闭,因为建立连接后未使用它(websocket 默认超时为 300 秒,如here所述)。

对于我们的用例,我们通过每 10 秒从 Web 客户端发送一次保持活动消息来修复此问题(可以调整间隔秒数)。

© www.soinside.com 2019 - 2024. All rights reserved.