直播:类 Discord 的语音和视频房间,现已集成到 Discourse 🎙

:warning: 我们刚刚将“Voice”重命名为“Live”。该插件现在称为 Discourse Live,或者简称为 Live。

去年年底,我们分享了 Resenha,这是一个实验性项目,直接在 Discourse 中添加了类似 Discord 的语音和视频房间。无需外部应用,只需在侧边栏中使用点对点 WebRTC 即可。

这个实验很成功。从那以后,我们一直用它来开自己的会议,而今天它正式毕业:Resenha 现在改名为 Voice,并作为核心插件随每个 Discourse 安装包一起发布。:tada:

你能获得什么

  • 侧边栏优先的房间 — 点击即可加入或离开,查看带有动态说话指示器的实时参与者头像,并在通话时继续浏览论坛。无需更改路由,无弹窗窗口,且紧凑的通话小部件会跟随你在站点各处移动。
  • 视频和屏幕共享 — 每个房间都有一个包含平铺网格的全页面;摄像头和屏幕共享可即时切换,画质会根据观看者数量自动调整。
  • 背景虚化 — MediaPipe 人体分割完全在你的浏览器中运行,提供实时预览和可调节的强度。
  • 降噪 — 可在三种 AI 引擎(RNNoise、DTLN、DeepFilterNet3)之间进行选择,它们以 WebAssembly 音频工作线程的形式运行,从轻量级到录音室级别应有尽有。
  • 实时字幕 — 可选功能,基于 NVIDIA Parakeet 语音识别技术,通过 WebGPU 在本地运行,为观看者提供字幕。多语言支持,处于行业领先水平,本地 AI。你还可以直接将通话记录保存到主题草稿中。
  • 直接呼叫 — 直接从用户的个人资料卡或个人主页呼叫某人。
  • 每房间文本聊天 — 由真正的 Discourse 聊天提供支持:每次通话都会在房间的聊天频道中获得一个独立的帖子。
  • 房间权限和管理 — 公共、群组限制和私有房间;用户创建房间的功能受群组控制;静音、失聪、单用户音量控制以及踢出用户。
  • 主题化音频提示 — 加入/离开和呼叫音调遵循你的聊天通知声音包,因此 Voice 听起来与你站点的其他部分风格一致。

工作原理

默认情况下,一切都是点对点的:你的 Discourse 服务器只处理信令,媒体流直接在参与者之间传输,并使用 DTLS-SRTP 加密。零额外基础设施,非常适合最多约 50 人的语音房间,或最多 10 人的视频房间。

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

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

如何启用

:discourse: Voice 在我们所有的托管计划中都可用。用于大型通话的 LiveKit 集成在我们的 Business 和 Enterprise 计划中可用;自托管用户 :discourse-bw: 可以将其指向自己的 LiveKit 服务器。

Voice 已捆绑在 Discourse 中,因此无需安装任何东西。通过 管理 > 设置 > 插件 > voice enabled 开启它。该插件会创建一个默认的“闲聊室”(Watercooler),让你立即有个地方可以闲逛。

在那里,voice_allowed_groups 控制谁可以加入房间,而 voice_create_room_allowed_groups 控制谁可以创建房间(默认为管理员、版主和 TL2)。视频默认开启。直接呼叫在你选择 voice_direct_calls_allowed_groups 中的某些群组之前是关闭的,字幕是通过 voice_subtitles_enabled 选择的(这需要 WebGPU,且每个用户只需下载一次约 2.5 GB 的模型)。

如果你之前正在使用我个人仓库中的 Resenha 插件,请在方便时从你的 app.yml 中移除它,因为捆绑的 Voice 插件已经取代了它。

状态

这仍然处于早期阶段。我们每天内部试用它已经好几个月了,对于小团体来说效果非常好,但在向整个社区开放之前,请先与你的团队进行测试。默认的点对点路径没有通话录制功能,除了用户标记、踢出和“结束通话”之外的管理工具仍在路线图中。

欢迎反馈

试试看,告诉我们效果如何!Bug、想法和问题都欢迎在这个主题中提出。PR 也欢迎,现在比以往任何时候都更容易:代码位于 core。:microphone:

69 个赞

等等……哇……视频也?

Man's Mind Blown Reaction

太棒了!

13 个赞

哇,真的吗?

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

2 个赞

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

6 个赞

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

14 个赞

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

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

3 个赞

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

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

3 个赞

这是个好消息!我早就觉得会这样,谢谢你 @Falco

4 个赞

帖子已拆分至新话题:在站点设置序列化器中公开 LiveKit 状态

我错过了最初的公告,但我对此感到非常兴奋,所以尽管上次更新才过去4天,我还是刚刚更新了 discourse。

迫不及待想让大家用上这个功能了!

谢谢!!!! :tada:

一个大问题——任何人都能创建视频房间吗?还是说这可以基于权限或信任等级进行限制?

补充编辑:我找到了启用后的相关设置。

4 个赞

太棒了 :clap: !我认为 Discourse 现在已经具备了相当完善的功能,甚至可以取代一些 Discord 社区,并真正与之竞争。

10 个赞

3 个帖子已拆分至新主题:摄像头和屏幕共享的细粒度权限

可以按组进行限制。

3 个赞

Kerehn-1: 戴墨镜的酷猫

2 个赞

如果能像聊天功能那样添加一个按钮,点击后弹出一个语音插件的窗口,显示频道列表和用户列表,并支持搜索功能,那就太棒了。尤其是在移动端使用时。这只是一个想法 :sweat_smile:

1 个赞

语音房间可以显示在聊天中,这是否满足您的需求?

该按钮并非专门用于语音,而是适用于所有聊天,用户可以从那里进入或离开语音房间 :ok_hand:

3 个赞

你能给我截几张结果图的图吗?因为我没太明白这部分(沙龙/聊天)::sweat_smile:

哦,你真的可以试试。只需勾选“启用语音聊天”设置,然后打开最大化的聊天界面 :slight_smile:

语音聊天已经开启了,但我在全屏模式下没看到任何变化,除非我完全搞错了:rofl:

好的,我找到了 :sweat_smile: 抱歉打扰了

1 个赞