mediasoup_service WebRTC SFU · mediasoup v3

基于 mediasoup 的 WebRTC SFU 基础设施:一个房间一个 Router,音频/视频/屏幕共享经 SFU 转发, 浏览器、安卓 WebView、Node/Go 客户端均可接入。

地址与鉴权

项目值
管理 APIhttps://mediasoup.ai-x-service.top
WebSocket 信令wss://mediasoup.ai-x-service.top/ws
在线测试页https://mediasoup.ai-x-service.top/
API Key<你的密钥>(节点 /opt/mediasoup_service/config.json 或 --show-key)
媒体端口UDP/TCP 40000-40099,announcedIp 8.134.135.91

管理 API 使用请求头 X-API-Key: <密钥> 或 Authorization: Bearer <密钥>。

HTTP 接口

方法路径说明
GET/health存活探针(免鉴权)
GET/docs · /openapi.json本文档 / OpenAPI(免鉴权)
GET/api/docMarkdown 交接文档(需密钥)
GET/api/statusworker / 房间 / transport / producer 统计
GET/api/config只读配置(密钥已掩码)
GET/api/rooms房间列表
POST/api/rooms创建房间 {"roomId":"demo","maxPeers":12}
GET/api/rooms/{id}房间详情
POST/api/rooms/{id}/close关闭房间(踢出所有连接)

WebSocket 信令

连接:wss://mediasoup.ai-x-service.top/ws?room=<房间ID>&token=<房间token>,或 wss://mediasoup.ai-x-service.top/ws?room=<房间ID>&key=<API Key>(用 Key 时可自动创建房间)。

消息格式:客户端 {"id":"1","method":"join","data":{...}}; 服务端响应 {"id":"1","ok":true,"data":{...}};服务端通知 {"method":"newProducer","data":{...}}。

方法方向说明
getRouterRtpCapabilitiesC→S取 Router 能力,用于 device.load()
joinC→S加入房间(device 加载后)
createWebRtcTransportC→S{"producing":true} 创建发送/接收 transport
connectWebRtcTransportC→S提交 DTLS 参数
produceC→S发布音视频/屏幕共享
consumeC→S订阅他人的 producer
resumeConsumerC→S恢复消费(开始收流)
closeProducerC→S停止发布
getProducersC→S列出房间内容(不含自己)
restartIceC→SICE 重启
newProducer / producerClosed / peerJoined / peerLeft / consumerClosedS→C房间事件通知

快速验证

# 健康
curl -s https://mediasoup.ai-x-service.top/health

# 创建房间
curl -s -H "X-API-Key: <密钥>" -H 'Content-Type: application/json' \
  -d '{"roomId":"demo"}' https://mediasoup.ai-x-service.top/api/rooms

# 状态
curl -s -H "X-API-Key: <密钥>" https://mediasoup.ai-x-service.top/api/status

浏览器打开 https://mediasoup.ai-x-service.top/,两个标签页用同一个房间即可互通。

安全提示:媒体端口已按 40000-40099 限制;请勿把 API Key 写入前端公开代码。 生产应用建议由自己的后端用 API Key 创建房间并下发 room token,客户端只拿 room token。