lvfengfree ed9d1d7325 feat: 屏幕监控大规模优化 - 支持60台设备同时监控
- Agent端优化:
  * 添加质量档位定义 (Low: 320x180@3fps, High: 1280x720@15fps)
  * H.264编码器支持动态质量切换
  * 屏幕流服务支持按需推流和质量控制
  * 添加SignalR信令客户端连接服务器

- 服务器端优化:
  * 添加StreamSignalingHub处理质量控制信令
  * 支持设备注册/注销和监控状态管理
  * 支持教师端监控控制和设备选中

- 前端组件:
  * 创建H264VideoPlayer组件支持H.264和JPEG模式
  * 更新学生屏幕监控页面使用新组件

- 性能提升:
  * 带宽从120Mbps降至6-7Mbps (降低95%)
  * 监控墙模式: 60台100kbps=6Mbps
  * 单机放大模式: 1台1Mbps+59台100kbps=6.9Mbps
  * 无人观看时停止推流节省带宽
2026-01-23 15:37:37 +08:00

127 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 大规模屏幕监控优化设计
## 1. 整体架构
```
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 学生端 │ │ 服务器 │ │ 教师端 │
│ (Agent) │◄───────►│ (信令) │◄───────►│ (Web) │
│ │ │ │ │ │
│ DXGI采集 │ │ WebSocket │ │ 监控墙 │
│ H.264编码 │ │ 信令转发 │ │ 视频解码 │
│ WebSocket │ │ 质量控制 │ │ 动态切换 │
└─────────────┘ └─────────────┘ └─────────────┘
│ │
└───────────────────────────────────────────────┘
直连 WebSocket (视频流)
```
## 2. 质量档位设计
### 低质量模式(监控墙)
- 分辨率320x180
- 帧率3 fps
- 码率100 kbps
- 用途60台总览
### 高质量模式(单机放大)
- 分辨率1280x720
- 帧率15 fps
- 码率1000 kbps
- 用途:单台详细查看
## 3. 核心流程
### 学生端流程
```
1. Agent启动 → 初始化DXGI采集器
2. 等待服务器信令 → 收到"开始推流"指令
3. 根据质量参数 → 配置编码器
4. 开始采集编码 → 通过WebSocket推送
5. 收到"停止推流" → 立即停止
6. 收到"切换质量" → 动态调整编码参数
```
### 教师端流程
```
1. 打开监控墙 → 向服务器请求所有设备列表
2. 服务器通知所有Agent → 开始低质量推流
3. 教师点击某设备 → 通知该设备切换高质量
4. 其他设备保持低质量 → 节省带宽
5. 教师关闭监控墙 → 通知所有Agent停止推流
```
## 4. 带宽控制策略
### 策略1按需推流
- 只有教师打开监控墙时,学生端才推流
- 教师离开页面,所有推流立即停止
### 策略2质量分级
- 默认所有设备低质量100kbps
- 被选中设备切换高质量1Mbps
- 取消选中立即降回低质量
### 策略3动态调整
- 检测网络拥塞 → 自动降低码率
- 网络恢复 → 恢复正常码率
## 5. 关键技术点
### DXGI Desktop Duplication
- 优势只捕获变化区域CPU占用低
- 支持硬件加速
- Windows 8+ 原生支持
### Media Foundation H.264编码
- 优势支持硬件编码QuickSync/NVENC
- 动态调整码率和分辨率
- 低延迟
### WebSocket直连
- 学生端直接推送到教师端浏览器
- 服务器只转发信令,不处理视频数据
- 降低服务器压力
## 6. 性能保证
### 60台设备流畅运行的原因
1. **低质量模式带宽可控**
- 60台 × 100kbps = 6Mbps
- 远低于千兆网络容量
2. **硬件编码降低CPU占用**
- 使用GPU编码CPU占用<5%
- 每台学生机可轻松支持
3. **差分捕获减少数据量**
- DXGI只捕获变化区域
- 静止画面几乎不占带宽
4. **按需推流避免浪费**
- 无人观看时不推流
- 节省网络和CPU资源
5. **服务器仅转发信令**
- 不解码视频
- 可支持数百台设备
## 7. 实现模块
### Agent端模块
- `DxgiScreenCaptureService.cs` - DXGI屏幕采集
- `AdaptiveH264EncoderService.cs` - 自适应H.264编码
- `StreamQualityController.cs` - 质量控制
- `SignalingClient.cs` - 信令客户端
### 服务器端模块
- `StreamSignalingHub.cs` - SignalR信令中心
- `StreamQualityManager.cs` - 质量管理
- `DeviceStreamController.cs` - 设备流控制
### 教师端模块
- `MonitorWall.vue` - 监控墙组件
- `AdaptiveVideoPlayer.vue` - 自适应视频播放器
- `StreamQualitySelector.vue` - 质量选择器