nextcloud-spreed-signaling

nextcloud-spreed-signaling

为 Nextcloud Talk 设计的开源 WebRTC 信令服务器

nextcloud-spreed-signaling 是一个为 Nextcloud Talk 开发的独立信令服务器。它支持集群模式以增强可扩展性,能与 NATS 和 Janus WebRTC 网关集成。项目提供了完整的构建和部署文档,包括 Docker 支持,方便搭建实时通信基础设施。

Nextcloud Talk信令服务器WebRTC集群DockerGithub开源项目

Spreed 独立信令服务器

构建状态 覆盖率状态 文档状态 Go 报告

该仓库包含可用于 Nextcloud Talk (https://apps.nextcloud.com/apps/spreed) 的独立信令服务器。

有关信令服务器 API 的更多信息,请参阅 https://nextcloud-spreed-signaling.readthedocs.io/en/latest/。

构建

构建信令服务器需要以下工具:

  • git
  • go >= 1.21
  • make

通常支持 Go 的最新两个版本。这遵循 Go 的发布政策:https://go.dev/doc/devel/release#policy

.proto 文件生成代码还需要以下额外工具:

  • protobuf-compiler >= 3

所有其他依赖项在构建过程中会自动获取。

$ 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

作为守护进程运行

systemd

创建专用组和用户:

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 容器可在 Docker Hub 上获取:https://hub.docker.com/r/strukturag/nextcloud-spreed-signaling

有关详细信息,请参阅 docker 子文件夹中的 README.md

Docker Compose

根据服务器上的具体网络配置,您可能需要调整 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 服务器设置

有关如何安装和运行 NATS 服务器的详细说明,请参阅 https://docs.nats.io/running-a-nats-service/introduction

您可以使用 gnatsd.conf 文件作为 NATS 服务器配置的基础。

Janus 设置

可以使用 Janus 服务器(来自 https://github.com/meetecho/janus-gateway)作为 WebRTC 网关。有关如何配置和运行服务器的信息,请参阅 Janus 文档。至少必须启用 Janus 的 VideoRoom 插件和 websocket 传输。 信令服务器使用Janus的VideoRoom插件来管理会话。所有网关细节对客户端都是隐藏的,所有消息都通过信令服务器发送。只有WebRTC媒体直接在网关和客户端之间交换。

编辑server.conf,在[mcu]部分的url键中输入Janus的websocket端点URL。启动时,信令服务器将连接到Janus并记录网关信息。

每个发布流的最大带宽也可以在[mcu]部分配置,请参见maxstreambitratemaxscreenbitrate属性。

使用多个Janus服务器

为了扩展设置并增加高可用性,一个信令服务器可以连接到一个或多个代理服务器,每个代理服务器提供对单个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或更新版本,支持远程流,即订阅者可以从任何服务器接收已发布的流。为此,您需要在代理配置中配置hostnametoken_idtoken_key。每个代理服务器还支持配置最大incomingoutgoing带宽设置,这也将用于选择远程流。详细信息请参见proxy.conf.inapp部分。

集群

信令服务器支持集群模式,其中多个运行的服务器可以互连形成单个"虚拟"服务器。这可用于增加信令服务器的容量或提供故障转移设置。

为此,所有实例必须使用中央NATS服务器/集群。每个实例必须运行一个GRPC服务器(在grpc部分启用listening,并可选地设置证书、私钥和CA)。其他GRPC目标的列表必须在grpc部分配置为targets,或者可以从etcd集群中检索。配置详情请参见server.conf.ingrpc部分。

前端Web服务器设置

通常,独立信令服务器运行在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

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

要将Apache网络服务配置为独立信令服务器的前端,必须启用 mod_proxy_httpmod_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

Caddy (v1) 配置:

myserver.domain.invalid {
  proxy /standalone-signaling/ http://127.0.0.1:8080 {
    without /standalone-signaling
    transparent
    websocket
  }
}

v2

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

以管理员身份登录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辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
Trae

Trae

字节跳动发布的AI编程神器IDE

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

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多