RTSP / 本地摄像头 / 媒体文件 → 多平台 RTMP/RTMPS(tee)推流,带预览、录制、自愈重连、定时调度与无头运行。GUI /
--headless/systemd三种方式一把梭。
- 模块化工程:将原本“一个
main.py管天下”的代码,按职责拆分为入口、UI、对话框、线程(推流/预览/录制)、工具函数等模块,结构清晰、便于维护与测试。入口只负责模式分发;UI 与线程解耦,通过信号连接。 - 三种运行形态:
- 桌面 GUI;
- 无头 Headless(服务器/后台)
--headless; - systemd 服务安装/卸载(
--install-service/--uninstall-service)。
- 任务行式 UI 与托盘:多路“源→多目标”以列表行呈现,支持全部启动/全部停止、托盘驻留与一键显示/隐藏窗口。
- 输入源更全面:RTSP、媒体文件、**本地摄像头(Windows dshow / Linux v4l2 / macOS avfoundation)**三类输入统一适配,分平台参数完备。
- 现代化对话框组件:使用说明、免责声明、捐赠、现代化消息框(统一信息/警告/错误样式)等模块独立封装,样式自适应浅/深主题。
- “获取推流码”辅助(可选):集成抓包线程(基于 pyshark / tshark)尝试自动解析平台推流地址与密钥,带超时与停止控制。
- 升级检查更稳健:支持多镜像 URL、宽松 JSON 解析、下载进度、SHA256 校验与“最低支持版本”强提醒。
- 定时调度:可选“时间窗内自动运行”,内置 30 秒心跳检查与偏好项联动保存。
- 预览与录制解耦:预览线程使用 FFmpeg 管道输出 rawvideo 到 UI;录制线程单独管理推流/预览互斥,支持 RTSP 与本地摄像头。
- 更完善的错误与引导:Help/FAQ/故障排查页签,涵盖常见报错与排查步骤;提供“导出日志 / 复制诊断信息 / 打开配置目录”。
- 一对多推流(tee):单路输入同时推送到多个 RTMP/RTMPS 目标,默认 H.264/AAC 编码(720p@30)。
- 输入类型:
rtsp://、本地文件(可循环-stream_loop)、本地摄像头(分平台后端与音频组合)。 - 自愈重连/健康状态:线程化推流与日志输出,异常自动重试(详见日志与状态栏)。
- 可视化预览:独立预览线程,按需开启/关闭;摄像头预览期间自动联动按钮状态。
- 本地录制 MP4:支持 RTSP/摄像头录制,文件输入不重复编码保存。
- 托盘与批量操作:全部启动/停止、隐藏到托盘后台运行。
- 一键更新:latest.json → 下载 → 校验 → 打开安装包,全流程引导。
tui/
├─ main.py # 入口(GUI / --headless / systemd 安装)
├─ requirements.txt # 依赖(PyQt5)
├─ README.md # 项目说明文档
├─ app_prefs.json # 应用程序偏好设置
├─ multipush_pairs.json # 配置文件(任务对列表)
├─ assets/ # 资源文件目录
│ ├─ app.ico # 应用图标
│ ├─ certs/ # 证书目录
│ │ └─ cacert.pem # CA证书
│ ├─ donate/ # 捐赠相关
│ │ └─ poster.png # 捐赠海报
│ ├─ ffmpeg/ # FFmpeg工具
│ │ └─ bin/ # FFmpeg二进制文件目录
│ ├─ icons/ # 图标资源
│ │ └─ [各种图标文件] # 各种UI图标
│ └─ wireshark/ # Wireshark工具及依赖(pyshark/tshark 可选)
│ └─ [Wireshark相关文件] # 程序及依赖
└─ multipush/ # 核心模块
├─ __init__.py # 包初始化
├─ constants.py # 常量、路径、resource_path
├─ ffmpeg_utils.py # FFmpeg 检测/下载/CA 证书解析
├─ headless.py # --headless 运行逻辑
├─ systemd_utils.py # systemd 安装/卸载
├─ threads/ # 线程模块
│ ├─ stream_thread.py # 主推流(多目标 tee + 复用/转码/参数)
│ ├─ record_thread.py # 录制(RTSP/摄像头)
│ └─ preview_thread.py # 预览(rawvideo 管道 → UI)
└─ ui/ # UI模块
├─ dialogs.py # 帮助/免责声明/捐赠/消息框等组件
├─ main_window.py # 主窗口:任务行/托盘/更新/定时/日志等
└─ widgets.py # 采集设备选择/地址编辑/抓包辅助等
- Python 3.8+、PyQt5、FFmpeg(程序会做可用性检查/引导安装)。
pip install -r requirements.txtGUI(默认) / 无头 / 服务安装示例同入口脚本注释中的说明:
- GUI:
python main.py - 无头:
python main.py --headless --config /path/to/multipush_pairs.json - 安装服务:
sudo python main.py --install-service
- 任务配置:
multipush_pairs.json(与app_prefs.json区分)。程序会在“加载配置”后把pairs同步到偏好路径,以便下次默认加载;保存/加载按钮在主界面工具栏。 - 常用操作:添加/删除/复制任务行;上移/下移;全部启动/全部停止;导出/复制日志;主题切换;自动换行;定时窗口。
- 预览:支持 RTSP / 文件 / 摄像头,预览对话框与线程绑定,关闭时安全回收;摄像头预览期间禁用“启动”以避免资源冲突。
- 录制:支持 RTSP 与摄像头,媒体文件无需录制(可直接推流)。
内置使用说明对话框,含“快速开始 / 常见问题 / 故障排查”三页签,并提供“打开配置目录 / 导出日志 / 复制诊断信息”。
常见问题示例:RTMP(S) 连接失败、摄像头黑屏、无音频、自动重试提示、FFmpeg/tshark 未找到等。
本软件仅供学习和技术研究使用;请遵守平台与当地法律法规;由违规使用导致的后果由使用者承担。内置独立的免责声明对话框可在 UI 中查看。
- 可选 NVENC/QSV 硬编预设
- 更细粒度的码率/分辨率按任务覆盖
- 跨平台打包与自动更新
MIT(若无特别说明,以仓库 LICENSE 为准)
小结:新版在工程化、稳定性、用户体验与可运维性上全面提升:更清晰的目录、可拔插的线程模块、现代化 UI/对话框、无头/服务化部署、健壮的升级渠道与辅助工具链(抓包/诊断/日志)。如果你是从旧版单文件脚本升级,直接按照“快速开始”运行即可。
