跳到主要内容

微语会议 Meet 0.1.0 Preview 发布:开源音视频会议系统

· 阅读需 6 分钟
Jack Ning
Maintainer of Bytedesk

微语会议(Bytedesk Meet)0.1.0 Preview 版本发布。作为微语(Bytedesk)生态中的开源会议系统,微语会议希望为团队提供一个可以自建、自主掌控的音视频会议方案:不依赖第三方 SaaS,数据留在自己的服务器上,并且与微语的账号体系、权限体系天然打通。

0.1.0 Preview 从音频会议起步,优先把「创建会议 - 分享链接 - 加入会议 - 参会记录」这条主链路跑通;视频会议、屏幕共享等能力已在路线图中。本文介绍这个版本包含的能力、技术架构与快速开始方式。

在线演示​

0.1.0 Preview 包含什么​

1. 会议室管理​

  • 会议室信息存储在 RoomEntity(会议名称、会议号 inviteUid、类型、描述、创建时间等)
  • meet 前端使用 antd ProTable 展示会议室列表,支持新建、删除会议室
  • 会议号 inviteUid 天然充当会议分享码,无需额外生成二维码或口令

2. 一键邀请链接​

  • 创建会议后即可复制邀请链接,形如 https://your-domain/meet/room/{inviteUid}
  • 收到链接的成员打开后,未登录会被引导到登录页,登录成功后自动进入会议
  • 参会者以登录用户身份加入会议,会议室内显示其昵称,无需现场输入姓名

3. 音频会议​

基于 Janus AudioBridge 插件实现:

  • 加入 / 退出会议
  • 麦克风开关(静音 / 取消静音)
  • 实时参与者列表(来自 Janus 事件推送)
  • 服务端混音播放,多人同时说话互不干扰
  • 房间按需动态创建:同一会议号稳定映射到同一个 Janus 房间,重复创建自动转为加入

4. 参会记录(CDR 式)​

每次加入会议都会生成一条参会记录(ParticipantEntity):

  • 记录加入时间、离开时间、参会时长(秒)
  • 记录参会者、关联会议室、是否主持人、Janus 参与者 ID
  • 参会状态(在会 / 已离开),断网未正常退出的「在会」遗留记录会在下次操作时自动结算

这些记录为后续的会议统计、考勤与审计打下数据基础。

5. meetAdmin 管理后台​

配套的管理后台 meetAdmin 同步上线:

  • 会议室管理:查询、新建、编辑、删除会议室
  • 参会记录管理:查询参会明细、查看单条记录详情
  • 细粒度权限控制:会议室与参会记录分别对应独立权限模块,可按角色授权增删改查
  • Janus 服务器监控:服务器信息、运行配置、活动会话、Token 四个监控页面(超级管理员可见),实时掌握媒体服务器状态

6. 浏览器兼容与权限预检​

  • 加入会议前自动预检麦克风权限,按「权限被拒绝 / 无麦克风设备 / 浏览器不支持 / 非安全上下文」分类给出可操作的提示
  • 自动检测非安全上下文(HTTP + 非 localhost)场景,指引切换 localhost 或配置 HTTPS

7. 国际化​

meet 与 meetAdmin 前端均支持简体中文、繁体中文、English 三种语言,会议室类型、参会状态等枚举字段全部走国际化翻译。

技术架构​

微语会议采用「浏览器直连 Janus WebSocket」的架构,后端不做信令转发,结构简单、时延更低:

层次组成说明
媒体层Janus AudioBridge服务端混音、房间管理、参与者事件
浏览器WebRTC + janus-gateway JS SDK浏览器直连 Janus WS,采集 / 推流 / 播放
后端modules/webrtc会议室 RoomEntity、参会记录 ParticipantEntity 与 REST API
前端frontend/apps/meetReact + TypeScript + antd ProTable
管理后台frontend/apps/meetAdmin会议室 / 参会记录管理、Janus 监控

几个关键设计:

  • 会议号稳定映射:邀请码 inviteUid 通过稳定哈希映射为正整数 Janus 房间号,保证所有参与者进入同一音频房间,不依赖服务器预配置
  • 动态建房:首次加入时发送 create,房间已存在(错误码 486)则自动转 join,无需人工开通房间
  • 登录即身份:加入会议复用微语登录态,后端返回用户昵称作为会议展示名,同时记录参与关系
  • 安全边界:邀请链接受登录保护;Janus Admin API 由 admin_secret 独立保护;客户端配置接口不暴露任何密钥

快速开始​

1. 启动 Janus 媒体服务器​

cd deploy/docker
./start.sh webrtc

该命令会启动 Janus 容器,WebSocket API 位于 ws://localhost:18188/janus,Admin API 位于 18091 端口。

2. 启动微语后端​

按常规方式启动 starter(默认已开启 bytedesk.webrtc.janus.enabled=true,并配置了 Janus WS 地址与 ICE 服务器)。

3. 启动 meet 前端​

cd frontend
pnpm install
turbo dev --filter=meet

4. 开始第一次会议​

  1. 登录 meet,在会议室列表点击「新建会议室」
  2. 在列表中复制该会议室的邀请链接,发送给同事
  3. 同事打开链接、登录后点击「加入会议」,授权麦克风即可开始通话

提示:浏览器仅在安全上下文(HTTPS 或 localhost)下开放麦克风采集。局域网 IP + HTTP 访问时,meet 会给出明确指引;生产环境建议通过 nginx 反代提供 HTTPS + WSS。

Roadmap​

0.1.0 Preview 之后,微语会议将按以下方向演进:

  • 视频会议(Janus VideoRoom)
  • 屏幕共享
  • 预定会议与快速会议区分
  • 会议密码 / PIN 与主持人权限控制
  • 会议录制与回放
  • 参会实时统计与后端推送
  • 移动端接入

相关链接​

微语会议仍处于早期版本,欢迎在 GitHub Issues 中反馈使用问题与功能建议。