该仓库包含可用于 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)


免费创建高清无水印Sora视频
Vora是一个免费创建高清无水印Sora视频的AI工具


最适合小白的AI自动化工作流平台
无需编码,轻松生成可复用、可变现的AI自动化工作流

大模型驱动的Excel数据处理工具
基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


AI论文写作指导平台
AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台 可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。


AI一键生成PPT,就用博思AIPPT!
博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。


企业专属的AI法律顾问
iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号