今年早些时候,我们分享了 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)它已有数月,对于小团队来说运行非常好,但在向整个社区开放之前,请先与您的团队进行测试。默认的点对点路径不支持通话录制,除了用户标记、踢出和“结束通话”之外的审核工具仍在路线图中。
欢迎反馈
请尝试使用并告诉我们您的体验!欢迎在此主题中提出错误报告、想法和问题。也欢迎提交 PR,现在比以往任何时候都更容易:代码位于核心仓库中。![]()








