一个基于 ASP.NET Core + SignalR 的轻量“房间”应用:在浏览器里用 WebRTC(Mesh 点对点) 做语音/视频通话,并提供弹幕聊天、房间密码、房主/管理员等能力。
- 房间列表 / 创建 / 加入(人数上限、可选密码、房间头像)
- 房间内实时协作:WebRTC 音视频、弹幕聊天(含历史)、成员列表与在线状态
- 房主能力:房间设置(名称/人数上限/密码/头像)、设置管理员、删除房间
- 匿名身份:基于 Cookie 自动生成
dr.uid(用户 ID)与dr.name(昵称)
- .NET 8 / ASP.NET Core MVC
- SignalR(信令/实时状态,Hub 路径:
/hubs/room) - WebRTC(浏览器点对点 Mesh;服务器不转发媒体流)
- EF Core + SQLite(默认数据库文件:
darkroom/darkroom.db)
- 安装 .NET SDK 8.x
- (可选)Visual Studio 2022
darkroom/Program.cs 在 附加调试器 时会监听:https://0.0.0.0:45678。
- 用 Visual Studio 打开
darkroom.sln - F5 运行
- 访问
https://localhost:45678
dotnet build .\darkroom.sln说明:直接在命令行执行
dotnet run(未附加调试器)会走“生产监听”分支,默认绑定3392并要求证书文件/home/darkroom/cert.pfx(见下文)。
darkroom/Program.cs 在未附加调试器时会使用 Kestrel 监听:https://0.0.0.0:3392,并加载证书:/home/darkroom/cert.pfx(PFX,密码为空字符串)。
- 端口:
3392(HTTPS) - 证书:
/home/darkroom/cert.pfx(如需自定义请修改darkroom/Program.cs)
配置文件:darkroom/appsettings.json
- 默认连接串:
ConnectionStrings:Default = Data Source=darkroom.db - 默认数据库文件:
darkroom/darkroom.db - 启动时自动建库(
EnsureCreated())并做少量 schema 自举(见darkroom/Data/SqliteSchemaBootstrapper.cs)
支持通过配置注入 ICE Servers:
WebRtc:IceTransportPolicy:all或relayWebRtc:IceServers:Urls(必填数组)、Username/Credential(可选)
TURN 部署与配置示例见:darkroom/docs/turn.md
- 麦克风/摄像头需要“安全上下文”:
https或http://localhost。 - 当前为 WebRTC Mesh(每人对每人一条连接):人数越多越吃带宽且更不稳,建议小房间使用;大规模建议 SFU。
- 房间无人在线持续 >= 1 小时后,下一位加入者会自动接管房主并清空管理员(见
darkroom/Hubs/RoomHub.cs)。
darkroom/:Web 项目Controllers/:页面与房间管理Hubs/:SignalR Hub(信令)Data/:EF Core / SQLiteServices/:在线状态、Join TokenViews/、wwwroot/:页面与前端逻辑(wwwroot/js/room.js)