语音:Discord 风格的语音和视频房间,现已集成到 Discourse 中 🎙

今年早些时候,我们分享了 Resenha,这是一个实验性功能,将类似 Discord 的语音和视频房间直接集成到了 Discourse 中。无需外部应用,只需在侧边栏使用点对点 WebRTC 即可。

这个实验很成功。从那以后,我们一直在用它进行内部会议,而今天它正式“毕业”了:Resenha 现在更名为 Voice,并作为核心插件随每个 Discourse 安装包一起提供。:tada:

您将获得的功能

  • 侧边栏优先的房间 — 点击即可加入或离开,查看带有动画说话指示器的实时参与者头像,并在通话的同时继续浏览论坛。无需更改路由,无弹窗窗口。
  • 视频和屏幕共享 — 每个房间都有一个包含网格布局的完整页面;摄像头和屏幕共享可即时切换,画质会根据观看者数量自动调整。
  • 背景模糊 — 完全在您的浏览器中运行 MediaPipe 人物分割,提供实时预览和可调节的强度。
  • 降噪 — 从轻量级到专业级,可在三种 AI 引擎(RNNoise、DTLN、DeepFilterNet3)中选择,它们作为 WebAssembly 音频工作线程运行。
  • 实时字幕 — 可选功能,由在本地通过 WebGPU 运行的 NVIDIA Parakeet 语音识别提供驱动,为观看者生成字幕。支持多语言,且音频永远不会离开您的浏览器。
  • 直接通话 — 直接从用户的个人资料卡或个人主页发起通话。
  • 房间专属文字聊天 — 由真实的 Discourse 聊天提供支持:每次通话都会在房间的聊天频道中生成一个独立的帖子。
  • 房间权限和管理 — 支持公开、群组限制和私有房间;通过群组控制用户创建房间的权限;支持静音、屏蔽、单用户音量调节和踢出用户。
  • 主题化音频提示 — 加入/离开和通话提示音遵循您的聊天通知声音包,因此 Voice 听起来与您的网站其他部分保持一致。

工作原理

默认情况下,一切均为点对点:您的 Discourse 服务器仅处理信令,媒体直接在参与者之间流动,并采用 DTLS-SRTP 加密。无需额外的基础设施,非常适合最多约 50 人的语音房间,或最多 10 人的视频房间。

所有音频和视频处理(降噪、背景模糊、字幕)都在每个参与者的设备上本地运行。没有任何数据发送给第三方。

需要更大的通话规模吗?将插件指向云端或自托管的 LiveKit 服务器,并将所有房间(或仅部分房间)通过该服务器路由。这样,无论房间规模如何,每个参与者只需发布一次所有轨道。通过 LiveKit 路由的房间还可以录制通话,录制功能可直接在 Discourse 的房间 UI 中控制。

如何启用

:discourse: Voice 在我们所有托管计划中均可用。用于大型通话的 LiveKit 集成在我们的 BusinessEnterprise 计划中可用;自托管用户 :discourse-bw: 可以将其指向自己的 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,现在比以往任何时候都更容易:代码位于核心仓库中。:microphone:

24 个赞

等等……哇……视频

Man's Mind Blown Reaction

太棒了!

6 个赞

哇,真的吗?

有没有关于如何在自托管实例上测试此功能的说明?比如使用一个单独的 Docker 容器?

2 个赞

只需重新构建并更新到最新版本,然后在管理页面上启用新插件即可。无需进行其他额外操作。

5 个赞

我想你指的是 Discourse 风格的语音和视频房间? :innocent: :grin:

2 个赞

所以我可以不用在 Nats 中保留公钥/私钥、子域名、Coturn 服务器,也不用创建我试图编写的那些脚本,就能拥有一个安全的 Livekit 服务器作为桥梁吗?

即使我还需要继续研究,也感谢你构建了这个项目!

1 个赞

我的意思是,如果你想在你的实例上专门部署 Coturn 来处理 STUN/TURN,那完全可以。LiveKit 也一样,如果你想用它,尽管用。

开箱即用的通话功能并不强制要求这些配置,但我们确实提供了这种灵活性。

1 个赞