V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
YamatoRyou
V2EX  ›  问与答

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

  •  
  •   YamatoRyou · 2022-01-03 02:46:20 +08:00 · 2378 次点击
    这是一个创建于 1074 天前的主题,其中的信息可能已经有所发展或是发生改变。

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