一个基于 React + Vite + TypeScript(前端)和 NestJS + Socket.IO(后端)的多人音视频会议项目。
- 支持创建/加入房间
- 最多 4 人同房间通话
- 支持麦克风、摄像头、屏幕共享、镜像、回声开关
- 支持复制房间链接、聊天室消息
rooma/
├── client/ # 前端(Vite + React + simple-peer)
└── server/ # 信令服务(NestJS + Socket.IO)- Node.js 18+
- Bun 1.0+
当前仓库包含
bun.lock,推荐使用 Bun 进行依赖安装和启动。
# 前端
cd client
bun install
# 后端
cd ../server
bun installcd server
bun run start:dev默认监听:http://localhost:3000
健康检查:GET http://localhost:3000/health
cd client
bun run dev默认地址:http://localhost:5173
- 打开首页后点击 创建新会议 创建会议。
- 将房间链接分享给其他人。
- 其他人可粘贴完整链接或房间号加入。
- 房间人数上限为 4,超过会收到
ROOM_FULL。
bun run dev:启动开发服务器bun run build:构建生产包bun run lint:代码检查bun run preview:预览构建产物
bun run start:dev:开发模式(watch)bun run build:构建bun run start:prod:生产模式运行bun run test:单元测试bun run test:e2e:端到端测试
- 前端开发端口:
5173 - 后端默认端口:
3000
前端通过环境变量配置信令服务地址:
- 变量名:
VITE_SIGNALING_SERVER_URL - 示例文件:
client/.env.example - 默认回退:
http://localhost:3000(未设置时)
配置示例:
cd client
cp .env.example .env
# 按需修改 VITE_SIGNALING_SERVER_URL如果你把后端部署到其他地址,请修改 .env 中的 VITE_SIGNALING_SERVER_URL。
- 前端一直显示“正在连接房间...”
- 确认后端已启动并可访问
http://localhost:3000/health - 检查浏览器控制台是否有 Socket 连接报错
- 确认后端已启动并可访问
- 无法获取摄像头/麦克风
- 确认浏览器授予了媒体权限
- 建议使用最新版 Chrome/Edge
- 局域网多设备联调失败
- 将
VITE_SIGNALING_SERVER_URL改为可被其他设备访问的 IP 地址 - 同时确保防火墙放行对应端口
- 将