微语会议 Meet 0.1.0 Preview 发布:开源音视频会议系统
微语会议(Bytedesk Meet)0.1.0 Preview 版本发布。作为微语(Bytedesk)生态中的开源会议系统,微语会议希望为团队提供一个可以自建、自主掌控的音视频会议方案:不依赖第三方 SaaS,数据留在自己的服务器上,并且与微语的账号体系、权限体系天然打通。
0.1.0 Preview 从音频会议起步,优先把「创建会议 - 分享链接 - 加入会议 - 参会记录」这条主链路跑通;视频会议、屏幕共享等能力已在路线图中。本文介绍这个 版本包含的能力、技术架构与快速开始方式。
在线演示
- 会议客户端演示:https://www.weiyuai.cn/meet/
- 会议管理后台演示:https://www.weiyuai.cn/meetadmin
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/meet | React + 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. 开始第一次会议
- 登录 meet,在会议室列表点击「新建会议室」
- 在列表中复制该会议室的邀请链接,发送给同事
- 同事打开链接、登录后点击「加入会议」,授权麦克风即可开始通话
提示:浏览器仅在安全上下文(HTTPS 或 localhost)下开放麦克风采集。局域网 IP + HTTP 访问时,meet 会给出明确指引;生产环境建议通过 nginx 反代提供 HTTPS + WSS。
Roadmap
0.1.0 Preview 之后,微语会议将按以下方向演进:
- 视频会议(Janus VideoRoom)
- 屏幕共享
- 预定会议与快速会议区分
- 会议密码 / PIN 与主持人权限控制
- 会议录制与回放
- 参会实时统计与后端推送
- 移动端接入
相关链接
- 微语官网:https://www.weiyuai.cn
- 微语 GitHub:https://github.com/Bytedesk/bytedesk
- 问题反馈:https://github.com/Bytedesk/bytedesk/issues
- Janus WebRTC Gateway:https://github.com/meetecho/janus-gateway
微语会议仍处于早期版本,欢迎在 GitHub Issues 中反馈使用问题与功能建议。
