概况:
电信家宽, 有公网 IP (v4 + v6);
Synapse 在群晖的 Docker 上, Matrix 服务通过端口转发的方式暴露在公网 (IPv4, IPv6 则是直接暴露指定的端口).
客户端: Element for Android
连接慢体现在 2 个手机之间. 即使这 2 个手机都用移动数据, A 打给 B, B 以第一时间接听, A 此时知道对方已接, 于是接下来就是漫长的等待, 10 次呼叫大概只有一两次能秒通, 剩下的至少 30 秒甚至 1 分钟, 偶尔会长时间卡在连接中. 不知道为什么.
我以为是没有中继导致的, 于是又在 Docker 上弄了个 coturn, 也按官方的说明文档开放了端口. 然而问题依旧.
开着中继的情况下用以下 2 个网站进行测试:
https://test.voip.librepush.net/
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
我看不懂测试结果, 只能看出来其中一个测试失败了.
诡异的是, 无论用手机测试还是用以上网站测试, cotrun 似乎都有反应, 主要体现在日志上 (用手机的移动数据测试, 日志能打印出手机的 IP 地址).
也试过让域名只保留解析后的 v4 或 v6 地址的其中一种, 也不行.
折腾了大概两三天还是这样, 现在已经没办法了.
附上配置文件:
turnserver.conf
cert=/etc/cert.pem
log-binding
log-file=/etc/turn.log
no-multicast-peers
no-rfc5780
no-sslv3
no-stun-backward-compatibility
no-tcp-relay
no-tlsv1
no-tlsv1_1
no-tlsv1_2
pkey=/etc/pkey.pem
realm=example.com
response-origin-only-with-rfc5780
server-name=example.com
static-auth-secret={B8A60FEC-FB0B-9094-BECF-5D1E8E59153E}
total-quota=1200
use-auth-secret
verbose
homeserver.yaml
turn_uris: [ "turns:example.com?transport=udp", "turns:example.com?transport=tcp" ]
turn_shared_secret: "{B8A60FEC-FB0B-9094-BECF-5D1E8E59153E}"
turn_user_lifetime: 86400000
turn_allow_guests: true
1
fucker 2022-01-03 13:34:16 +08:00
看到 4 处域名配错了
另外可能要映射一段端口 其他地方没看出区别 我两个手机语音和视频在 4G 网络下非常流畅 |
2
YamatoRyou OP @fucker 我重新检查了一遍配置文件里的域名, 都是一样的 (只是在公示配置段的时候改成了别的). 所需的端口也已经打开, 包括 49152~65535 这种. 我这里也是, 除了连接慢, 真正接通后的流畅度也还可以.
|
3
fucker 2022-01-04 09:32:13 +08:00
那我就不清楚了
我这边后来把 homeserver 放到了公网 turns 用家里的映射了端口 语音接通前等待时间大概两三秒的样子 |
4
YamatoRyou OP @fucker 今天重新测试了若干个回合, 发现已经恢复了正常 (大多数尝试能在 3 秒内开始说话), 但是我什么都没动. 不知道为什么.
|
5
Gary666666 2023-03-07 10:03:46 +08:00
两位大佬,我也碰到了这个问题,我是甲骨文 vps 建立的,docker 拉了官方的 coturn ,Synapse 已经 ok 了,就差 coturn ,配置文件按照上面贴出来的换成自己的 ip 也不行,希望给予指导帮助,配置文件,我直接启动映射到本机下:coturn 正常启动!
use-auth-secret static-auth-secret=t4Sjw2Qn2qAPOQTPCNqeP8uzkW60EzPBRQFlgLmpx6x6dqtMPenPMwiJ7fh80x8KK realm=*****.top syslog # VoIP traffic is all UDP. There is no reason to let users connect to arbitrary TCP endpoints via the relay. no-tcp-relay # don't let the relay ever try to connect to private IP address ranges within your network (if any) # given the turn server is likely behind your firewall, remember to include any privileged public IPs too. denied-peer-ip=10.0.0.0-10.255.255.255 denied-peer-ip=192.168.0.0-192.168.255.255 denied-peer-ip=172.16.0.0-172.31.255.255 # special case the turn server itself so that client->TURN->TURN->client flows work allowed-peer-ip=172.17.0.1 # consider whether you want to limit the quota of relayed streams per user (or total) to avoid risk of DoS. user-quota=12 # 4 streams per video call, so 12 streams = 3 simultaneous relayed calls per user. total-quota=1200 # TLS certificates, including intermediate certs. # For Let's Encrypt certificates, use `fullchain.pem` here. cert=/etc/turn_server_cert.pem #这个我在本机下生成,cp 到容器里相应文件夹 # TLS private key file pkey=/etc/turn_server_pkey.pem#这个我在本机下生成,cp 到容器里相应文件夹 external-ip=131.186.26.*** |
6
Gary666666 2023-03-07 10:05:13 +08:00
如果可以,我希望加入您们的通迅工具,十分荣幸!我的电报:@hanigege
|
7
YamatoRyou OP @Gary666666
1. 检查 coturn 进程有没有带 "--external-ip" 参数 (可能不是主要原因); 2. 连接慢除了配置原因, WebRTC 被禁用也会导致长时间连接 (浏览器能通过扩展禁用 WebRTC, 手机客户端应该不存在此问题); 3. 检查 3478 / 5349 端口的开放状态. |
8
Gary666666 2023-03-12 16:10:25 +08:00
已解决,谢谢, 如果客户端各方面有支持来电提醒等等,那就完美了。
|