今年早些时候,我们分享了 Resenha,这是一个实验性项目,将 Discord 风格的语音和视频房间直接集成到了 Discourse 中。无需外部应用,只需在侧边栏中使用点对点 WebRTC 即可。
这个实验很成功。从那以后,我们一直用它来举行自己的会议。今天,它正式“毕业”了:Resenha 现在更名为 Voice,并作为核心插件随每个 Discourse 安装包一起提供。![]()
你将获得的功能
- 侧边栏优先的房间 — 点击即可加入或离开,查看带有动画说话指示器的实时参与者头像,并在通话时继续浏览论坛。无需更改路由,也不会弹出窗口。
- 视频和屏幕共享 — 每个房间都有一个包含网格布局的完整页面;摄像头和屏幕共享可即时切换,画质会根据观看者数量自动调整。
- 背景模糊 — 完全在您的浏览器中运行 MediaPipe 人物分割,提供实时预览和可调节的强度。
- 噪声抑制 — 可在三种 AI 引擎(RNNoise、DTLN、DeepFilterNet3)中选择,它们作为 WebAssembly 音频工作线程运行,从轻量级到录音室级质量不等。
- 实时字幕 — 可选功能,由通过 WebGPU 在本地运行的 NVIDIA Parakeet 语音识别驱动,为观看者提供字幕。支持多语言,且音频数据永远不会离开您的浏览器。
- 直接通话 — 直接从用户的个人资料卡或主页发起通话。
- 每房间文本聊天 — 由真正的 Discourse 聊天提供支持:每次通话都会在房间的聊天频道中生成一个独立的帖子。
- 房间权限和管理 — 支持公共、组限制和私人房间;通过组来控制用户创建房间的权限;支持静音、失聪、单独用户音量控制以及踢出用户。
- 主题化音频提示 — 加入/离开和呼叫提示音遵循您的聊天通知声音包,因此 Voice 的音效与您网站的其他部分保持一致。
工作原理
默认情况下,一切均为点对点通信:您的 Discourse 服务器仅处理信令,媒体数据直接在参与者之间传输,并采用 DTLS-SRTP 加密。无需额外基础设施,非常适合最多约 50 人的语音房间,或最多 10 人的视频房间。
所有音频和视频处理(噪声抑制、背景模糊、字幕)都在每个参与者的设备上本地运行。没有任何数据发送给第三方。
需要更大的通话规模吗?您可以将插件指向云端或自托管的 LiveKit 服务器,并通过它路由所有房间(或部分房间)。然后,无论房间规模如何,每个参与者只需发布一次所有轨道。通过 LiveKit 路由的房间还可以录制通话,并且可以直接在 Discourse 的房间 UI 中控制录制。
如何启用
Voice 在我们所有托管计划中均可用。用于大型通话的 LiveKit 集成在我们的 Business 和 Enterprise 计划中可用;自托管用户
可以将其指向自己的 LiveKit 服务器。
Voice 已随 Discourse 捆绑提供,因此无需安装任何东西。通过 Admin > Settings > Plugins > voice enabled 将其开启。该插件会创建一个默认的“Watercooler”(闲聊)房间,以便大家立即有一个可以聚集的地方。
在此之后,voice_allowed_groups 控制谁可以加入房间,voice_create_room_allowed_groups 控制谁可以创建房间(默认情况下为管理员、版主和 TL2)。视频默认开启;字幕可通过 voice_subtitles_enabled 选择开启(需要 WebGPU 支持)。
如果您之前从我的个人仓库运行 Resenha 插件,请在方便时从您的 app.yml 中移除它,因为捆绑的 Voice 插件已取代了它。
当前状态
这仍处于早期阶段。我们每天内部测试(dogfooding)了数月,对于小团体来说运行非常良好,但在向整个社区开放之前,请先与您的团队进行测试。默认的点对点路径不支持通话录制,除了用户标记、踢出和“结束通话”之外的其他管理工具仍在路线图上。
欢迎反馈
请试用并告诉我们您的体验!在此主题中,Bug、想法和问题都欢迎提出。也欢迎 PR(拉取请求),现在比以往任何时候都更容易:代码位于 core 中。![]()








