Skip to content

Commit 2e5f553

Browse files
committed
update
1 parent b095e4c commit 2e5f553

48 files changed

Lines changed: 10442 additions & 2781 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

MultiPush.png

19.9 KB
Loading

README.md

Lines changed: 119 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,138 @@
1-
# 🎥 MultiPush · 多目标直播推流工具
1+
# MultiPush多目标直播推流工具
22

3-
> **本地摄像头 / RTSP / 媒体文件 → 一键推流到多个 RTMP/RTMPS 平台**
4-
> 内置本地 RTMP 预览、MP4 录制、配置保存、自动依赖下载与更新检查。
3+
> RTSP / 本地摄像头 / 媒体文件 → 多平台 RTMP/RTMPS(tee)推流,带预览、录制、自愈重连、定时调度与无头运行。GUI / `--headless` / `systemd` 三种方式一把梭。
4+
5+
---
56

67
![screenshot](https://github.com/eisongao/MultiPush/blob/main/MultiPush.png)
78

9+
10+
## 🆕 与旧版(单文件大脚本)相比有什么更新?
11+
12+
- **模块化工程**:将原本“一个 `main.py` 管天下”的代码,按职责拆分为入口、UI、对话框、线程(推流/预览/录制)、工具函数等模块,结构清晰、便于维护与测试。入口只负责模式分发;UI 与线程解耦,通过信号连接。
13+
- **三种运行形态**
14+
- 桌面 GUI;
15+
- **无头 Headless**(服务器/后台)`--headless`
16+
- **systemd 服务**安装/卸载(`--install-service` / `--uninstall-service`)。
17+
- **任务行式 UI 与托盘**:多路“源→多目标”以列表行呈现,支持**全部启动/全部停止**、托盘驻留与一键显示/隐藏窗口。
18+
- **输入源更全面**:RTSP、媒体文件、**本地摄像头(Windows dshow / Linux v4l2 / macOS avfoundation)**三类输入统一适配,分平台参数完备。
19+
- **现代化对话框组件**:使用说明、免责声明、捐赠、**现代化消息框**(统一信息/警告/错误样式)等模块独立封装,样式自适应浅/深主题。
20+
- **“获取推流码”辅助**(可选):集成抓包线程(基于 pyshark / tshark)尝试自动解析平台推流地址与密钥,带超时与停止控制。
21+
- **升级检查更稳健**:支持多镜像 URL、宽松 JSON 解析、下载进度、SHA256 校验与“最低支持版本”强提醒。
22+
- **定时调度**:可选“时间窗内自动运行”,内置 30 秒心跳检查与偏好项联动保存。
23+
- **预览与录制解耦**:预览线程使用 FFmpeg 管道输出 rawvideo 到 UI;录制线程单独管理推流/预览互斥,支持 RTSP 与本地摄像头。
24+
- **更完善的错误与引导**:Help/FAQ/故障排查页签,涵盖常见报错与排查步骤;提供“导出日志 / 复制诊断信息 / 打开配置目录”。
25+
826
---
927

10-
## 🌟 功能特性
28+
## 功能特性
1129

12-
- 🎦 支持 **本地摄像头 / RTSP 流 / 媒体文件** 作为输入源
13-
- 🚀 一次推流到多个 RTMP / RTMPS 平台(如 YouTube、Bilibili、Facebook、抖音等)
14-
- 🖥️ 内置 **本地 RTMP 服务器(MediaMTX)**,实现实时预览
15-
- 🎧 自动检测音视频设备,支持静音推流
16-
- 💾 一键录制 MP4(支持边录边播)
17-
- ⚙️ 自动检查更新 + 依赖缺失下载(FFmpeg / MediaMTX)
18-
- 🌓 可选暗色主题(检测到 `qdarkstyle` 自动启用)
19-
- 💖 内置“请作者喝杯咖啡”与“使用说明”窗口
30+
- **一对多推流(tee)**:单路输入同时推送到多个 RTMP/RTMPS 目标,默认 H.264/AAC 编码(720p@30)。
31+
- **输入类型**`rtsp://`、本地文件(可循环 `-stream_loop`)、本地摄像头(分平台后端与音频组合)。
32+
- **自愈重连/健康状态**:线程化推流与日志输出,异常自动重试(详见日志与状态栏)。
33+
- **可视化预览**:独立预览线程,按需开启/关闭;摄像头预览期间自动联动按钮状态。
34+
- **本地录制 MP4**:支持 RTSP/摄像头录制,文件输入不重复编码保存。
35+
- **托盘与批量操作**:全部启动/停止、隐藏到托盘后台运行。
36+
- **一键更新**:latest.json → 下载 → 校验 → 打开安装包,全流程引导。
2037

2138
---
2239

23-
## 📦 环境要求
40+
## 📦 目前项目结构
2441

25-
- **Windows 10 / 11 (x64)**
26-
- **Python 3.10+**
27-
- 已安装 **pip**
28-
- (可选)FFmpeg 与 MediaMTX 会自动下载,无需手动安装
42+
```text
43+
tui/
44+
├─ main.py # 入口(GUI / --headless / systemd 安装)
45+
├─ requirements.txt # 依赖(PyQt5)
46+
├─ README.md # 项目说明文档
47+
├─ app_prefs.json # 应用程序偏好设置
48+
├─ multipush_pairs.json # 配置文件(任务对列表)
49+
├─ assets/ # 资源文件目录
50+
│ ├─ app.ico # 应用图标
51+
│ ├─ certs/ # 证书目录
52+
│ │ └─ cacert.pem # CA证书
53+
│ ├─ donate/ # 捐赠相关
54+
│ │ └─ poster.png # 捐赠海报
55+
│ ├─ ffmpeg/ # FFmpeg工具
56+
│ │ └─ bin/ # FFmpeg二进制文件目录
57+
│ ├─ icons/ # 图标资源
58+
│ │ └─ [各种图标文件] # 各种UI图标
59+
│ └─ wireshark/ # Wireshark工具及依赖(pyshark/tshark 可选)
60+
│ └─ [Wireshark相关文件] # 程序及依赖
61+
└─ multipush/ # 核心模块
62+
├─ __init__.py # 包初始化
63+
├─ constants.py # 常量、路径、resource_path
64+
├─ ffmpeg_utils.py # FFmpeg 检测/下载/CA 证书解析
65+
├─ headless.py # --headless 运行逻辑
66+
├─ systemd_utils.py # systemd 安装/卸载
67+
├─ threads/ # 线程模块
68+
│ ├─ stream_thread.py # 主推流(多目标 tee + 复用/转码/参数)
69+
│ ├─ record_thread.py # 录制(RTSP/摄像头)
70+
│ └─ preview_thread.py # 预览(rawvideo 管道 → UI)
71+
└─ ui/ # UI模块
72+
├─ dialogs.py # 帮助/免责声明/捐赠/消息框等组件
73+
├─ main_window.py # 主窗口:任务行/托盘/更新/定时/日志等
74+
└─ widgets.py # 采集设备选择/地址编辑/抓包辅助等
75+
```
2976

3077
---
3178

32-
## 🚀 安装与运行
79+
## 🚀 快速开始
3380

34-
### 🧰 方式一:直接运行 Python 源码
35-
```bash
36-
git clone https://github.com/eisongao/MultiPush.git
37-
cd MultiPush
81+
### 环境需求
82+
- Python 3.8+、PyQt5、FFmpeg(程序会做可用性检查/引导安装)。
3883

39-
# 安装依赖
84+
### 安装依赖
85+
```bash
4086
pip install -r requirements.txt
87+
```
4188

42-
# 运行程序
43-
python main.py
89+
### 启动方式
90+
GUI(默认) / 无头 / 服务安装示例同入口脚本注释中的说明:
91+
- GUI:`python main.py`
92+
- 无头:`python main.py --headless --config /path/to/multipush_pairs.json`
93+
- 安装服务:`sudo python main.py --install-service`
94+
95+
---
96+
97+
## ⚙️ 配置说明
98+
99+
- **任务配置**`multipush_pairs.json`(与 `app_prefs.json` 区分)。程序会在“加载配置”后把 `pairs` 同步到偏好路径,以便下次默认加载;保存/加载按钮在主界面工具栏。
100+
- **常用操作**:添加/删除/复制任务行;上移/下移;全部启动/全部停止;导出/复制日志;主题切换;自动换行;定时窗口。
101+
102+
---
103+
104+
## 🖼️ 预览与录制
105+
106+
- **预览**:支持 RTSP / 文件 / 摄像头,预览对话框与线程绑定,关闭时安全回收;摄像头预览期间禁用“启动”以避免资源冲突。
107+
- **录制**:支持 RTSP 与摄像头,媒体文件无需录制(可直接推流)。
108+
109+
---
110+
111+
## ❓帮助 / FAQ / 故障排查
112+
113+
内置**使用说明**对话框,含“快速开始 / 常见问题 / 故障排查”三页签,并提供“打开配置目录 / 导出日志 / 复制诊断信息”。
114+
常见问题示例:RTMP(S) 连接失败、摄像头黑屏、无音频、自动重试提示、FFmpeg/tshark 未找到等。
115+
116+
---
117+
118+
## 🔐 免责声明
119+
120+
本软件仅供学习和技术研究使用;请遵守平台与当地法律法规;由违规使用导致的后果由使用者承担。内置独立的免责声明对话框可在 UI 中查看。
121+
122+
---
123+
124+
## 🗺️ 路线图
125+
126+
- [ ] 可选 NVENC/QSV 硬编预设
127+
- [ ] 更细粒度的码率/分辨率按任务覆盖
128+
- [ ] 跨平台打包与自动更新
129+
130+
---
131+
132+
## 📄 许可证
133+
134+
MIT(若无特别说明,以仓库 LICENSE 为准)
135+
136+
---
44137

45-
# 打包
46-
pyinstaller main.py --noconsole --icon "app.ico" --add-data "ffmpeg/bin;ffmpeg/bin" --add-data "assets;assets" --add-data "app.ico;." --name "MultiPush"
138+
**小结**:新版在**工程化、稳定性、用户体验与可运维性**上全面提升:更清晰的目录、可拔插的线程模块、现代化 UI/对话框、无头/服务化部署、健壮的升级渠道与辅助工具链(抓包/诊断/日志)。如果你是从旧版单文件脚本升级,直接按照“快速开始”运行即可。

assets/app.ico

246 KB
Binary file not shown.

0 commit comments

Comments
 (0)