大佬们, 自建完 Synapse 发现语音呼叫在大部分时候连接都非常慢.

2022-01-03 02:46:20 +08:00
 YamatoRyou

概况:
电信家宽, 有公网 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
2398 次点击
所在节点    问与答
8 条回复
fucker
2022-01-03 13:34:16 +08:00
看到 4 处域名配错了
另外可能要映射一段端口
其他地方没看出区别
我两个手机语音和视频在 4G 网络下非常流畅
YamatoRyou
2022-01-03 19:54:38 +08:00
@fucker 我重新检查了一遍配置文件里的域名, 都是一样的 (只是在公示配置段的时候改成了别的). 所需的端口也已经打开, 包括 49152~65535 这种. 我这里也是, 除了连接慢, 真正接通后的流畅度也还可以.
fucker
2022-01-04 09:32:13 +08:00
那我就不清楚了
我这边后来把 homeserver 放到了公网
turns 用家里的映射了端口
语音接通前等待时间大概两三秒的样子
YamatoRyou
2022-01-06 21:35:15 +08:00
@fucker 今天重新测试了若干个回合, 发现已经恢复了正常 (大多数尝试能在 3 秒内开始说话), 但是我什么都没动. 不知道为什么.
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.***
Gary666666
2023-03-07 10:05:13 +08:00
如果可以,我希望加入您们的通迅工具,十分荣幸!我的电报:@hanigege
YamatoRyou
2023-03-07 10:51:09 +08:00
@Gary666666
1. 检查 coturn 进程有没有带 "--external-ip" 参数 (可能不是主要原因);
2. 连接慢除了配置原因, WebRTC 被禁用也会导致长时间连接 (浏览器能通过扩展禁用 WebRTC, 手机客户端应该不存在此问题);
3. 检查 3478 / 5349 端口的开放状态.
Gary666666
2023-03-12 16:10:25 +08:00
已解决,谢谢, 如果客户端各方面有支持来电提醒等等,那就完美了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/825862

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX