该仓库包含可用于 Nextcloud Talk (https://apps.nextcloud.com/apps/spreed) 的独立信令服务器。
有关信令服务器 API 的更多信息,请参阅 https://nextcloud-spreed-signaling.readthedocs.io/en/latest/。
构建信令服务器需要以下工具:
通常支持 Go 的最新两个版本。这遵循 Go 的发布政策:https://go.dev/doc/devel/release#policy
从 .proto
文件生成代码还需要以下额外工具:
所有其他依赖项在构建过程中会自动获取。
$ make build
在 FreeBSD 上使用:
$ gmake build
之后,二进制文件将创建为 bin/signaling
。
默认配置文件包含在 server.conf.in
中。将其复制为 server.conf
并根据本地设置进行必要的调整。请参阅文件中有关可以更改的不同参数的注释。
信令服务器连接到 NATS 服务器 (https://nats.io/) 以在不同实例之间分发消息。请参阅 NATS 文档了解如何设置和运行服务器。
一旦 NATS 服务器运行(并且为信令服务器配置了 NATS 服务器的 URL),您就可以启动信令服务器。
$ ./bin/signaling
默认情况下,配置从当前目录中的 server.conf
加载,但可以通过 --config
选项传递不同的路径。
$ ./bin/signaling --config /etc/signaling/server.conf
创建专用组和用户:
sudo groupadd --system signaling sudo useradd --system \ --gid signaling \ --shell /usr/sbin/nologin \ --comment "Nextcloud Talk 的独立信令服务器。" \ signaling
将 server.conf.in
复制到 /etc/signaling/server.conf
并修复权限:
sudo chmod 600 /etc/signaling/server.conf sudo chown signaling: /etc/signaling/server.conf
将 dist/init/systemd/signaling.service
复制到 /etc/systemd/system/signaling.service
(调整 ExecStart
中的绝对路径以匹配您的二进制文件位置!)
启用并启动服务:
systemctl enable signaling.service systemctl start signaling.service
信令服务器和代理的官方 Docker 容器可在 Docker Hub 上获取:https://hub.docker.com/r/strukturag/nextcloud-spreed-signaling
有关详细信息,请参阅 docker
子文件夹中的 README.md
。
根据服务器上的具体网络配置,您可能需要调整 Janus 命令行选项。请参阅 Janus 设置 和 Janus 文档以了解如何配置 Janus 服务器。
将 server.conf.in
复制到 server.conf
并根据需要进行调整。
如果您按原样使用 docker-compose.yml 配置,则必须将 MCU Url 设置为 ws://localhost:8188
,NATS Url 设置为 nats://localhost:4222
,TURN Servers 设置为 turn:localhost:3478?transport=udp,turn:localhost:3478?transport=tcp
。
docker-compose build docker-compose up -d
请注意,构建需要 docker-compose v2,而大多数发行版会提供较旧的版本。您可以从 https://docs.docker.com/compose/install/ 下载最新版本。
有关如何安装和运行 NATS 服务器的详细说明,请参阅 https://docs.nats.io/running-a-nats-service/introduction
您可以使用 gnatsd.conf
文件作为 NATS 服务器配置的基础。
可以使用 Janus 服务器(来自 https://github.com/meetecho/janus-gateway)作为 WebRTC 网关。有关如何配置和运行服务器的信息,请参阅 Janus 文档。至少必须启用 Janus 的 VideoRoom
插件和 websocket 传输。
信令服务器使用Janus的VideoRoom
插件来管理会话。所有网关细节对客户端都是隐藏的,所有消息都通过信令服务器发送。只有WebRTC媒体直接在网关和客户端之间交换。
编辑server.conf
,在[mcu]
部分的url
键中输入Janus的websocket端点URL。启动时,信令服务器将连接到Janus并记录网关信息。
每个发布流的最大带宽也可以在[mcu]
部分配置,请参见maxstreambitrate
和maxscreenbitrate
属性。
为了扩展设置并增加高可用性,一个信令服务器可以连接到一个或多个代理服务器,每个代理服务器提供对单个Janus服务器的访问。
为此,将[mcu]
部分的type
键设置为proxy
,并将url
设置为运行代理服务器的URL列表(以空格分隔)。
每个连接到代理的信令服务器需要一个唯一的令牌ID和一个公钥/私钥RSA密钥对。令牌ID必须在[mcu]
部分配置为token_id
,私钥文件路径配置为token_key
。
代理服务器通过标准make命令make build
构建为bin/proxy
二进制文件。将proxy.conf.in
复制为proxy.conf
并编辑[tokens]
部分,列出允许的令牌ID和每个令牌ID的 公钥文件名。其他配置选项请参见proxy.conf.in
中的注释。
当代理进程收到SIGHUP
信号时,允许的令牌ID/公钥列表将被重新加载。SIGUSR1
信号可用于在所有客户端断开连接后优雅地关闭代理进程。在这种情况下,不会接受新的发布者。
使用Janus 1.1.0或更新版本,支持远程流,即订阅者可以从任何服务器接收已发布的流。为此,您需要在代理配置中配置hostname
、token_id
和token_key
。每个代理服务器还支持配置最大incoming
和outgoing
带宽设置,这也将用于选择远程流。详细信息请参见proxy.conf.in
的app
部分。
信令服务器支持集群模式,其中多个运行的服务器可以互连形成单个"虚拟"服务器。这可用于增加信令服务器的容量或提供故障转移设置。
为此,所有实例必须使用中央NATS服务器/集群。每个实例必须运行一个GRPC服务器(在grpc
部分启用listening
,并可选地设置证书、私钥和CA)。其他GRPC目标的列表必须在grpc
部分配置为targets
,或者可以从etcd集群中检索。配置详情请参见server.conf.in
的grpc
部分。
通常,独立信令服务器运行在Web服务器后面,该Web服务器处理SSL协议或作为多个信令服务器的负载均衡器。
以下配置示例假设预先配置了Web服务器(nginx或Apache),具有有效的HTTPS设置,并在托管独立信令服务器的服务器的外部接口上监听。
设置完成后,可以使用curl
测试配置:
$ curl -i https://myserver.domain.invalid/standalone-signaling/api/v1/welcome
HTTP/1.1 200 OK
Date: Thu, 05 Jul 2018 09:28:08 GMT
Server: nextcloud-spreed-signaling/1.0.0
Content-Type: application/json; charset=utf-8
Content-Length: 59
{"nextcloud-spreed-signaling":"Welcome","version":"1.0.0"}
Nginx可以作为独立信令服务器的前端使用,无需任何额外要求。
后端应单独配置,以便可以在单一位置更改,并允许从单个前端服务器使用多个后端。
假设独立信令服务器在本地接口上的端口8080
上运行,请将以下块添加到/etc/nginx/sites-enabled
中的nginx服务器定义中(就在server
定义之前):
upstream signaling {
server 127.0.0.1:8080;
}
要将所有独立信令的请求代理到正确的后端,必须在同一文件的server
定义内添加以下location
块:
location /standalone-signaling/ {
proxy_pass http://signaling/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /standalone-signaling/spreed { proxy_pass http://signaling/spreed; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
示例(例如 /etc/nginx/sites-enabled/default
):
upstream signaling { server 127.0.0.1:8080; }
server { listen 443 ssl http2; server_name myserver.domain.invalid;
# ... 其他现有配置 ...
location /standalone-signaling/ {
proxy_pass http://signaling/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /standalone-signaling/spreed {
proxy_pass http://signaling/spreed;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
要将Apache网络服务配置为独立信令服务器的前端,必须启用 mod_proxy_http
和 mod_proxy_wstunnel
模块,以便可以代理WebSocket和API后端请求:
$ sudo a2enmod proxy $ sudo a2enmod proxy_http $ sudo a2enmod proxy_proxy_wstunnel
现在可以扩展Apache VirtualHost
配置,将请求转发到独立信令服务器(假设服务器在本地接口的8080端口上运行):
<VirtualHost *:443>
# ... 现有配置 ...
# 启用代理WebSocket请求到独立信令服务器。
ProxyPass "/standalone-signaling/" "ws://127.0.0.1:8080/"
RequestHeader set X-Real-IP %{REMOTE_ADDR}s
RewriteEngine On
# 来自客户端的WebSocket连接。
RewriteRule ^/standalone-signaling/spreed/$ - [L]
# 来自Nextcloud的后端连接。
RewriteRule ^/standalone-signaling/api/(.*) http://127.0.0.1:8080/api/$1 [L,P]
# ... 现有配置 ...
</VirtualHost>
Caddy (v1) 配置:
myserver.domain.invalid {
proxy /standalone-signaling/ http://127.0.0.1:8080 {
without /standalone-signaling
transparent
websocket
}
}
Caddy (v2) 配置:
myserver.domain.invalid {
route /standalone-signaling/* {
uri strip_prefix /standalone-signaling
reverse_proxy http://127.0.0.1:8080
header_up X-Real-IP {remote_host}
}
}
以管理员身份登录Nextcloud并打开附加设置页面。向下滚动到"Talk"部分,在"外部信令服务器"字段中输入独立信令服务器的基本URL。
请注意,如果您的Nextcloud也在 https
上运行,则必须使用 https
。通常,您应该输入 https://myhostname/standalone-signaling
作为URL。
"外部信令服务器的共享密钥"的值必须与 server.conf
文件中 backend
部分的 secret
属性相同。
如果您正在使用自签名证书进行开发,则需要取消选中"验证SSL证书"复选框,以便Nextcloud可以向信令服务器发送后端请求。
存在一个简单的客户端用于对服务器进行基准测试。请注意,被测试的功能可能不涵盖全部功能,有关客户端的详细信息,请查看 src/client
中的实现。
为了验证新客户端连接到信令服务器,客户端在本地接口上启动一个虚拟身份验证处理程序,并在 hello
请求中传递URL。因此,应将信令服务器配置为允许所有后端主机(backend
部分中的 allowall
选项)。
默认情况下不编译客户端,但可以使用 client
目标进行编译:
$ make client
用法:
$ ./bin/client Usage of ./bin/client: -addr string http服务地址(默认为 "localhost:28080") -config string 要使用的配置文件(默认为 "server.conf") -maxClients int 客户端连接数(默认为 100)
AI小说写作助手,一站式润色、改写、扩写
蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高 效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号