一、方案目标
实现低延时(500ms 以内)、高并发、高可用的街机游戏直播集群,支持街机推流、观众拉流、动态扩缩容,适配街机游戏高频交互、画面快速变化的场景。
二、核心架构设计
最大优势,自建分布式集群,解决各地用户用节点,内联源节点做低延时接入观看.
采用 "源节点 + 中心调度 + 拉流边缘节点" 独有的三层网状架构,结合 WebRTC 的 P2P 能力与 SFU(Selective Forwarding Unit)转发模式,平衡延时与服务器压力。
[街机端] → [OvSyunLive推流源节点] → [OvSyunLive拉流边缘节点] + [OvPlay观众端]
↑ ↑
└── [调度中心]───────────────────────────┘
接入极简单,演示下载:https://m.ovmeet.com:7702/play/
三、模块详解
1. 推流端处理(主播侧)
- 采集层:通过街机模拟器 SDK(如 MAME、RetroArch)捕获游戏画面(RGB/YUV)和音频(PCM),帧率固定为 60fps(街机游戏高流畅需求)。
- 编码层:使用硬件加速编码器(如 NVENC/VA-API),视频采用 H.264/VP8(低延时优先),码率动态调整(1-5Mbps,根据游戏画面复杂度);音频采用 OPUS(48kHz,256kbps)。
- WebRTC 推流:主播端通过 WebSocket 与推流边缘节点建立信令连接,完成 SDP 交换、NAT 穿透(STUN),若 P2P 失败则通过推流节点的 TURN 服务转发,最终将媒体流推送到就近的边缘节点。
2. 边缘节点集群(就近接入)
- 功能:负责主播推流接入、观众拉流分发,降低跨地域网络延迟。
- 部署 :按地域 / 运营商(如华北、华东、电信、联通)部署边缘节点,每个节点包含:
- 信令代理:处理 WebRTC 信令(SDP 交换、ICE 候选),转发至中心调度。
- 媒体接入网关:接收主播 RTP 流,进行初步校验(时序、完整性)。
- 本地缓存:临时缓存 0.1秒媒体流,应对观众突发接入。
- 扩缩容:基于节点带宽使用率(阈值 80%)和连接数(单节点支持 1000-5000 并发)自动扩容,使用 K8s 管理 Pod 实例。
3. 中心媒体集群(核心转发)
- SFU 服务器 :采用 ovsyunlive +ovplayer配合 作为核心转发节点,负责:
- 接收边缘节点的媒体流,进行流复制(1 进 N 出)。
- 对拉流请求进行负载均衡(按节点 CPU / 内存使用率分发)。
- 支持多流合并(如主播画面 + 弹幕叠加,可选)。
- 集群规模:单 SFU 节点支持 5000-10000 并发拉流(取决于带宽和 CPU),通过一致性哈希算法分配流 ID 到具体节点,避免单点故障。
- 容灾:每个流在 2 个 SFU 节点上备份,主节点故障时自动切换至备节点(RTO < 1 秒)。
4. 拉流端处理(观众侧)
- 信令交互:观众通过 WebSocket 连接就近边缘节点,请求指定直播间流,边缘节点通过中心调度获取最优 SFU 节点地址。
- WebRTC 拉流:观众与拉流边缘节点完成 ICE 协商,优先通过 P2P 从边缘节点拉流(降低中心压力),若网络质量差则由中心 SFU 转发。
- 播放优化:本地缓冲区设置为 200-300ms(低于常规直播),配合 WebRTC 的 Jitter Buffer 动态调整,解决网络抖动导致的卡顿。
5. 调度中心(核心控制)
- 服务发现:基于 Consul/Zookeeper 维护边缘节点、SFU 节点的健康状态(心跳检测,10 秒一次)。
- 智能路由 :
- 推流路由:根据主播 IP 地理位置、运营商,分配最近的推流边缘节点。
- 拉流路由:综合观众 IP、SFU 节点负载、网络延迟(通过 ICMP 探测),选择最优拉流路径。
- 流管理:维护直播间流 ID 与 SFU 节点的映射关系,支持流迁移(节点负载过高时)。
- 监控告警:实时采集节点带宽、CPU、延迟数据,超过阈值(如延迟 > 800ms)触发扩容或告警。
6. 网络与安全
- NAT 穿透:部署公共 STUN 服务器(如 coturn),支持 UDP/TCP 穿透,提升 P2P 成功率。
- 传输协议:优先 UDP(低延时),弱网环境降级为 TCP(可靠性)。
- 安全层 :
- 信令通道:WebSocket over TLS(WSS)加密。
- 媒体流:使用 DTLS-SRTP 加密,防止内容窃取。
- 鉴权:主播推流需 Token 验证(基于 JWT),观众拉流需直播间权限校验。
四、性能指标与优化
- 延时目标 :端到端延时 < 500ms(主播编码→观众解码),优化点:
- 缩短编码缓冲(1 帧缓冲,约 16ms)。
- 边缘节点与中心 SFU 采用专线连接(延迟 < 50ms)。
- 关闭不必要的视频后处理(如降噪、锐化)。
- 并发支持:单集群支持 10 万 + 观众并发(通过 20 个边缘节点 + 5个 源节点)。
- 成本优化 :
- 优先 P2P 分发(节省 30%-50% 带宽),仅在 P2P 失败时使用 SFU。
- 边缘节点采用云厂商弹性计算(如阿里云 ECS、AWS EC2),按流量付费。
五、部署与运维
- 容器化:所有组件(边缘节点、SFU、调度中心)打包为 Docker 镜像,通过 K8s 编排,支持自动扩缩容。
- 监控:使用 Prometheus 采集 metrics(节点负载、流延迟、P2P 成功率),Grafana 可视化,AlertManager 告警。
- 日志:采用 ELK 栈收集信令日志、媒体流错误日志,用于问题排查。
六、总结
该方案通过边缘节点就近接入、SFU 集群高效转发、智能调度优化路径,结合 WebRTC 的低延时特性,可满足街机游戏直播的核心需求。核心优势在于:低延时(<500ms)、高并发(10 万 + 观众)、弹性扩展(K8s 自动扩缩容),同时通过 P2P 降低带宽成本,适合自建直播场景。