添加测试方案章节

This commit is contained in:
2026-03-19 15:48:45 +08:00
parent 95424a63e5
commit db77b32021

123
README.md
View File

@@ -9,15 +9,14 @@
当前会议投屏需求涉及通过视频矩阵系统向32台终端设备进行同步投屏。具体模式可分为以下两类
1. **模式1主播投屏**单台终端设备作为信号源向MediaMTX服务器投送本地画面流的形式其余31台终端设备读取MediaMTX服务器的流。
- **特殊情况**单独架设1台机器用浏览器读取流然后通过HDMI线将显示画面输出到视频矩阵系统。
- **特殊情况**单独架设1台机器用浏览器读取流然后通过HDMI线将显示画面输出到矩阵系统,矩阵再发送给第三方视频会议系统。这台机器可利用墙上的插座
2. **模式2视频会议**在MediaMTX服务器上用采集卡和FFmpeg读取设备内容发布流全部32台终端设备用浏览器读取MediaMTX服务器的流。
技术说明上述32台终端设备均通过有线网络实现互联互通。
## 解决方案
参考文档:`https://docs.qq.com/flowchart-addon`
参考文档:<https://docs.qq.com/doc/DQXFpdHN5Rk9yRGpC>
## 整体部署步骤(细化版)
@@ -26,16 +25,13 @@
1. **下载并解压MediaMTX**
- 下载地址:`https://github.com/bluenviron/mediamtx/releases`windows-amd64版
- 解压到 `D:\ScreenCast\mediamtx` 目录
2. **配置MediaMTX**
- 编辑 `D:\ScreenCast\mediamtx\mediamtx.yml` 文件:
- 设置 `webRTCAddress``rtmpAddress`
- 添加 `screen` 路径配置,暂时不设鉴权
3. **启动MediaMTX**
- 运行 `mediamtx.exe`
- 观察控制台是否监听对应端口
4. **安装依赖**
- 安装Python`https://www.python.org/downloads/windows/`勾选「Add Python to PATH」
- 安装FFmpeg`https://www.gyan.dev/ffmpeg/builds/ffmpeg-git-full.7z`(解压到 `D:\ScreenCast\ffmpeg`
@@ -43,7 +39,6 @@
```
pip install pyautogui requests subprocess32 psutil mss numpy
```
5. **开启权限**
- 给服务器开启「屏幕录制权限」(设置→隐私和安全性→屏幕录制→允许 Python/CMD
@@ -53,12 +48,14 @@
### 主播端:推送本机屏幕
**方案A使用push_screen.py脚本**
**方案A使用push\_screen.py脚本**
- 双击运行 `push_screen.py`
- 点击「一键全屏投屏」按钮
- 脚本会自动启动MediaMTX并开始推流
**方案B使用mss抓屏+FFmpeg推流**
```python
import subprocess
import time
@@ -117,12 +114,10 @@ with mss.mss() as sct:
1. **打开浏览器**
- 在任意观众机上打开 Chrome 浏览器
2. **访问流地址**
- 输入地址:`http://服务器IP:8889/screen`
- MediaMTX 会自动处理 WebRTC 协商,把 RTMP 流转成 WebRTC 给浏览器
- 确认能看到主播机屏幕画面
3. **批量部署**
- 在31台终端上运行 `auto_receive.py` 脚本
- 脚本会自动打开Chrome并跳转到流地址
@@ -133,10 +128,8 @@ with mss.mss() as sct:
1. **准备一台小机器**
- 配置要求较低能运行Chrome浏览器即可
2. **访问流地址**
- 打开浏览器访问:`http://服务器IP:8889/screen`
3. **HDMI输出到矩阵**
- 通过HDMI线将小机器连接到视频矩阵系统
- 小机器播放的流画面将输出到矩阵系统
@@ -160,6 +153,7 @@ ffmpeg -list_devices true -f dshow -i dummy
```
输出示例:
```
[dshow @ ...] DirectShow video devices
[dshow @ ...] "USB Video Device"
@@ -197,6 +191,7 @@ paths:
### 步骤5用FFmpeg采集采集卡并推流
假设:
- MediaMTX 服务器 IP192.168.1.100
- 推流路径名hdmi
- DirectShow 设备名称:"AVerMedia HD Capture"
@@ -213,6 +208,7 @@ ffmpeg -f dshow -i video="AVerMedia HD Capture" ^
### 步骤6客户端观看
在浏览器中直接访问:
```
http://192.168.1.100:8889/hdmi
```
@@ -221,6 +217,100 @@ MediaMTX 会返回内置的 WebRTC 播放页面浏览器会自动播放HDMI
所有32台终端均可通过浏览器访问上述地址观看视频会议内容。
## 测试方案
使用1台台式机模拟MediaMTX服务器2台笔记本分别模拟信号源和观众测试两种场景。
### 设备准备
| 设备 | 角色 | IP地址示例 |
|------|------|-----------|
| 台式机 | MediaMTX服务器 | 192.168.1.100 |
| 笔记本A | 信号源(主播) | 192.168.1.101 |
| 笔记本B | 观众端 | 192.168.1.102 |
### 前置条件
1. 三台设备处于同一局域网
2. 台式机已安装MediaMTX和FFmpeg
3. 笔记本A已安装Python和FFmpeg
4. 所有设备关闭防火墙或开放对应端口
### 场景1测试主播投屏
**拓扑**笔记本A信号源→ 台式机MediaMTX→ 笔记本B观众
**步骤**
1. **台式机启动MediaMTX**
```
D:\ScreenCast\mediamtx\mediamtx.exe
```
确认控制台显示端口监听正常
2. **笔记本A启动推流**
- 运行 `push_screen.py`
- 或使用命令行推流:
```bat
ffmpeg -f gdigrab -framerate 30 -i desktop -c:v libx264 -preset ultrafast -tune zerolatency -f rtsp rtsp://192.168.1.100:8554/screen
```
3. **笔记本B观看**
- 打开Chrome浏览器
- 访问:`http://192.168.1.100:8889/screen`
- 确认能看到笔记本A的屏幕画面
**验证点**
- [ ] 推流端无错误
- [ ] MediaMTX日志显示有客户端连接
- [ ] 观众端能流畅播放画面
- [ ] 延迟在可接受范围内(<1秒
### 场景2测试视频会议采集卡模式
**拓扑**外部HDMI信号 → 台式机(采集卡+FFmpeg→ 台式机MediaMTX→ 笔记本A/B观众
**前置条件**:台式机已连接视频采集卡
**步骤**
1. **列出采集卡设备**
```bat
ffmpeg -list_devices true -f dshow -i dummy
```
记录设备名称
2. **台式机启动MediaMTX**
```
D:\ScreenCast\mediamtx\mediamtx.exe
```
3. **台式机启动FFmpeg推流**
```bat
ffmpeg -f dshow -i video="采集卡设备名称" -c:v libx264 -preset ultrafast -tune zerolatency -f flv rtmp://192.168.1.100/hdmi
```
4. **笔记本A和B观看**
- 打开Chrome浏览器
- 访问:`http://192.168.1.100:8889/hdmi`
- 确认能看到采集卡的HDMI输入画面
**验证点**
- [ ] 采集卡设备被正确识别
- [ ] FFmpeg推流无错误
- [ ] MediaMTX正确转发流
- [ ] 多客户端能同时观看
### 测试记录表
| 测试项 | 预期结果 | 实际结果 | 是否通过 |
|--------|----------|----------|----------|
| MediaMTX启动 | 端口监听正常 | | |
| 场景1推流 | 无错误 | | |
| 场景1观看 | 画面流畅 | | |
| 场景2推流 | 无错误 | | |
| 场景2多客户端 | 至少2台同时观看 | | |
## 核心文件结构统一放在服务器D:\ScreenCast
```
@@ -236,11 +326,14 @@ D:\ScreenCast
## 核心Python脚本
### 脚本1投屏源推流脚本push_screen.py
### 脚本1投屏源推流脚本push\_screen.py
功能双击即可采集Win10屏幕自动推流到MediaMTX无需敲命令支持「全屏/指定窗口」投屏,带可视化提示。
### 脚本2终端自动打开浏览器脚本auto_receive.py
### 脚本2终端自动打开浏览器脚本auto\_receive.py
功能双击脚本自动打开Chrome浏览器全屏直接跳转到投屏/会议流页面支持批量部署到32台终端无需手动输入地址。
### 脚本3运维总控脚本manage_server.py
### 脚本3运维总控脚本manage\_server.py
功能一站式运维启动MediaMTX、切换两种模式、批量控制32台终端、停止所有服务适合管理员操作。