让Continuwuity支持语音通话:LiveKit与TURN服务器搭建全攻略

发布时间:2026/10/15 16:23:00

让Continuwuity支持语音通话:LiveKit与TURN服务器搭建全攻略 【免费下载链接】continuwuityA community-driven Matrix homeserver项目地址https://gitcode.com/gh_mirrors/co/continuwuity点击查看免费下载Continuwuity 是一款社区驱动的开源 Matrix homeserver但默认开箱并不带语音/视频通话能力。这篇完整指南将带你快速搭建LiveKitMatrixRTC / Element Call 后端和coturnTURN/STUN 中继服务器两大核心组件让你自建的 Matrix 服务器同时支持多人群语音和传统点对点通话。先搞懂Matrix 的两种语音通话技术在动手之前先用一分钟理解架构能帮你少走弯路通话类型依赖服务适用场景MatrixRTC / Element CallLiveKit lk-jwt-service多人语音/视频通话主流方向Legacy Calls传统通话TURN/STUN 服务器如 coturn一对一通话老客户端兼容LiveKit 负责会议TURN 负责穿透 NAT——两者互补建议一起部署。更多架构说明可参阅 docs/calls.mdx。第一步部署 LiveKit 服务组MatrixRTC 后端本节基于 Docker Compose 部署假设你已有服务器和可用域名。1. 准备独立子域名为 LiveKit 分配一个专属子域名本例用livekit.example.com并将 DNS 记录指向服务器。2. 生成认证密钥Matrix 客户端需要一套 key/secret 与 LiveKit 认证docker run --rm livekit/livekit-server:latest generate-keys记下输出的API Key约20位和API Secret约64位后面会用到。3. 编写 docker-compose.ymlLiveKit 需要两个服务livekit本体 lk-jwt-service负责为 Matrix 用户签发连接令牌services: lk-jwt-service: image: ghcr.io/element-hq/lk-jwt-service:latest container_name: lk-jwt-service environment: - LIVEKIT_JWT_BIND:8081 - LIVEKIT_URLwss://livekit.example.com # 你的 LiveKit 域名 - LIVEKIT_FULL_ACCESS_HOMESERVERSexample.com # 你的 server_name - LIVEKIT_KEYLK_MATRIX_KEY # 上一步生成的 API Key - LIVEKIT_SECRETLK_MATRIX_SECRET # 上一步生成的 API Secret restart: unless-stopped ports: - 8081:8081 livekit: image: livekit/livekit-server:latest container_name: livekit command: --config /etc/livekit.yaml restart: unless-stopped network_mode: host # LiveKit 默认绑定所有地址 volumes: - ./livekit.yaml:/etc/livekit.yaml:ro同目录下创建livekit.yamlport: 7880 bind_addresses: - rtc: tcp_port: 7881 port_range_start: 50100 port_range_end: 50200 use_external_ip: true enable_loopback_candidate: false keys: LK_MATRIX_KEY: LK_MATRIX_SECRET # 替换为你的 key/secret room: auto_create: false别忘了放行防火墙端口ufw allow 7881/tcp和ufw allow 50100:50200/udp。第二步告诉 Continuwuity 客户端去哪找 LiveKit在 Continuwuity 配置文件中加入[global.matrix_rtc]段完整配置项见 conduwuit-example.toml[global.matrix_rtc] foci [ { type livekit, livekit_service_url https://livekit.example.com }, ]如果使用环境变量配置则对应CONTINUWUITY_MATRIX_RTC__FOCI[{ type livekit, livekit_service_url https://livekit.example.com }]配置后Continuwuity 会通过/_matrix/client/unstable/org.matrix.msc4143/rtc/transports端点向客户端广播 LiveKit 地址客户端即可自动发现通话服务。第三步配置反向代理Caddy 示例所有路径默认转发到 LiveKit7880 端口但以下三个路径前缀必须转发给lk-jwt-service8081 端口/sfu/get/healthz/get_tokenCaddyfile 示例livekit.example.com { # 这三个路径走 JWT 认证服务 lk-jwt-service path /sfu/get* /healthz* /get_token* route lk-jwt-service { reverse_proxy 127.0.0.1:8081 } # 其余路径走 LiveKit reverse_proxy 127.0.0.1:7880 } 项目内还附带了现成示例nginx 版 docs/public/calls/livekit.nginx.conf、Caddy Docker labels 版 docs/public/calls/livekit.docker-compose.with-caddy-labels.yml可直接参考。第四步部署 coturnTURN/STUN 服务器coturn 是 Continuwuity 官方推荐的 TURN/STUN 实现为传统通话提供 NAT 穿透能力。1. 创建 coturn.confuse-auth-secret static-auth-secret一段64位随机密钥 realmcoturn.example.com可用pwgen -s 64 1生成安全密钥。2. 启动 coturn 容器services: coturn: container_name: coturn image: docker.io/coturn/coturn restart: unless-stopped network_mode: host # 官方推荐 host 网络性能更好 volumes: - ./coturn.conf:/etc/coturn/turnserver.conf运行docker compose up -d即可。3. 端口规划与 LiveKit 错开 ⚠️coturn 默认媒体端口范围是49152-65535会与 LiveKit 的50100-50200冲突。在coturn.conf中设置min-port50201 max-port65535然后放行防火墙ufw allow 3478/udp ufw allow 3478/tcp ufw allow 5349/tcp ufw allow 5349/udp ufw allow 50201:65535/udp第五步配置 Continuwuity 下发 TURN 凭据在 Continuwuity 配置文件中添加客户端将通过voip/turnServer端点自动获取凭据相关逻辑见 src/api/client/voip.rsturn_uris [ turn:coturn.example.com:3478?transportudp, turn:coturn.example.com:3478?transporttcp, # 若启用了 TURN-over-TLS加上这行注意 turns: 前缀 turns:coturn.example.com:5349?transporttcp ] # 必须与 coturn 的 static-auth-secret 完全一致 turn_secret 你的 static-auth-secret # 凭据有效期秒默认 86400 turn_ttl 10800重启 Continuwuity 使配置生效。✅第六步验证测试确认通话就绪测试 TURN 服务器用你的会话 access token 请求凭据端点curl https://matrix.example.com/_matrix/client/r0/voip/turnServer \ -H Authorization: Bearer your_client_token | jq能返回username/password/uris说明 Continuwuity 配置成功。再把凭据粘贴到浏览器端 Trickle ICE 测试工具若出现relay候选项说明 TURN 完全可用。测试 LiveKit 集成请求发现端点确认 foci 已下发curl -H Authorization: Bearer token \ https://matrix.example.com/_matrix/client/unstable/org.matrix.msc4143/rtc/transports打开浏览器中的 Element Call 发起一次通话——如果能看到对方画面/声音恭喜你搭建完成常见问题排查清单症状可能原因MISSING_MATRIX_RTC_FOCUSContinuwuity 配置缺少[global.matrix_rtc].foci通话中一直显示 Waiting for media客户端无法连通 LiveKit检查反代与防火墙OPEN_ID_ERROR查看lk-jwt-service日志通常是容器间网络不通Docker 容器互访超时在 compose 中加extra_hosts: [livekit.example.com:host-gateway]映射域名TURN 测试code701防火墙未放行 3478 / 5349 / 媒体端口TURN 测试code401turn_secret与 coturn 的static-auth-secret不一致未配置 TURN 时turnServer返回 404属正常行为MSC4166检查turn_uris是否为空 调试技巧随时用docker compose logs --follow实时查看各服务日志浏览器客户端还可打开 DevTools 的 Network 面板定位失败请求。写在最后完成以上六步你的 Continuwuity 服务器就已具备完整的语音通话能力LiveKit 支撑多人 MatrixRTC 群通话coturn 保障传统一对一通话穿越各种网络。 深入阅读推荐docs/calls/livekit.mdx — LiveKit 完整指南含 TURN-over-TLS on 443 高级配置docs/calls/turn.mdx — coturn 部署与安全加固建议docs/calls.mdx — 通话功能总览祝搭建顺利享受自托管的畅爽通话体验赞分享【免费下载链接】continuwuityA community-driven Matrix homeserver项目地址https://gitcode.com/gh_mirrors/co/continuwuity点击查看免费下载相关推荐GoldenDict云词典服务搭建自建服务器与API开发全攻略GoldenDict云词典服务搭建自建服务器与API开发全攻略 还在为词典查询速度慢、服务不稳定而烦恼吗一文教你打造专属GoldenDict云词典服务本文桌面应用手机搭建移动服务器全攻略让口袋里的设备变身专业服务器手机搭建移动服务器全攻略让口袋里的设备变身专业服务器 还在为测试网站项目而烦恼吗想在移动设备上搭建一个完整的服务器环境现在通过 MyServer 这个创VisoMaster高级技巧提升换脸效果的7个专业方法VisoMaster高级技巧提升换脸效果的7个专业方法 VisoMaster是一款功能强大且易于使用的视频换脸编辑软件通过直观的界面和专业的算法帮助用户实现桌面应用计算机视觉AI 应用图像处理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/15 16:17:59

彻底搞懂CSS弹性布局:从轴概念到实战避坑指南

1. 为什么弹性布局值得你花时间彻底搞懂做前端这些年,我见过太多人把 Flex 当成"能居中就行"的工具。问起来就是display: flex加justify-content: center加align-items: center,三件套背得滚瓜烂熟,可一旦遇到子项宽度被压缩、换行…

2026/10/15 16:17:59

Android 移植 OctoPrint 实战:Kotlin 壳嵌入 Python 运行时

简介:这份资源是 Octo4a 项目的完整源码包,面向没有树莓派却希望远程控制 3D 打印机的 Android 用户与 Kotlin 开发者。它把 OctoPrint 主机能力搬到手机端,让用户无需 Linux 基础即可在 Android 设备上完成部署,解决硬件成本高、…

2026/10/15 17:13:26

STM32F4 移植 uCOS-II 实战:从裸机到 RTOS 的完整工程指南

简介:这份资源是面向嵌入式开发者的STM32F4移植UCOS_II完整工程,基于STM32F407ZGT6与Keil μVision环境,解决实时操作系统在Cortex-M4平台上的落地问题。内容涵盖UCOS_II任务调度、信号量、消息队列与内存管理机制,并涉及时钟初始…

2026/10/15 17:13:26

PySide6无COM实现Word转PDF:python-docx+pdfkit方案

简介:本资源是一个基于PySide6开发的轻量级Word转PDF桌面工具,面向Python初学者、办公自动化需求者及GUI编程入门者,解决日常文档格式转换中操作繁琐、依赖在线服务或专业软件的问题。压缩包为RAR格式,仅含1个核心Python脚本&…

2026/10/15 17:13:26

嵌入式Linux C编程避坑指南:交叉编译、系统调用与内存管理实战

简介:本资源是面向嵌入式开发初学者的Linux C编程系统入门教程,聚焦ARM平台下的操作系统部署、命令行操作、硬件交互与应用开发全流程,解决从理论到实践脱节的核心痛点。压缩包为RAR格式,大小11.34MB,含完整配套源代码…

2026/10/15 17:13:26

嵌入式Linux C编程实战:从交叉编译到字符设备驱动

简介:本资源是面向嵌入式开发初学者的Linux C编程入门教程,聚焦ARM平台下的系统部署、命令行操作、硬件交互与应用开发全流程,解决从环境搭建到驱动编写的学习断层问题。压缩包为RAR格式,大小11.34MB,含完整配套源代码…

2026/10/15 17:13:26

IMX6ULL嵌入式Linux下Qt交叉编译与linuxfb部署实战

第一次把 Qt 程序跑在 IMX6ULL 开发板的 LCD 屏幕上时,我盯着那个白色窗口愣了好一会儿——不是因为它跑得多流畅,而是这整个过程远比我想象中要绕:先要交叉编译 tslib 做触摸校准,给 Qt 源码配置一大堆构建开关,把几百…

2026/10/14 11:31:03

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/14 17:41:07

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/15 13:42:16

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/15 0:02:22

防关联浏览器哪个好?三款产品实测差异解析

新手做多店铺,最纠结的就是防关联浏览器选哪个。飞跨、网易、站斧这三款被问得最多,先给结论:要一体化省心、长期便宜,选站斧;要网易招牌和稳,选网易;预算紧做东南亚 Lazada,选飞跨。…

2026/10/15 0:02:22

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成 一、技术背景 大模型(LLM)在通用场景下表现强大,但当我们将 GPT-4 或 Qwen 直接用于生成影刀RPA操作指令和 XPath 定位时,准确率通常只有 40%-60%。原因…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑