更新 push_screen.py

This commit is contained in:
2026-03-27 17:56:20 +08:00
parent 41ccd4174e
commit afba38497b

View File

@@ -26,7 +26,6 @@ def load_config():
return json.load(f) return json.load(f)
return { return {
"server_ip": "192.168.1.100", "server_ip": "192.168.1.100",
"mediamtx_path": r"D:\ScreenCast\mediamtx\mediamtx.exe",
"ffmpeg_path": r"D:\ScreenCast\ffmpeg\bin\ffmpeg.exe", "ffmpeg_path": r"D:\ScreenCast\ffmpeg\bin\ffmpeg.exe",
"stream_path": "screen" "stream_path": "screen"
} }
@@ -41,28 +40,22 @@ class ConfigDialog(QDialog):
super().__init__(parent) super().__init__(parent)
self.config = config self.config = config
self.setWindowTitle("设置") self.setWindowTitle("设置")
self.setFixedSize(450, 220) self.setFixedSize(450, 180)
layout = QFormLayout(self) layout = QFormLayout(self)
self.server_ip_edit = QLineEdit(config["server_ip"]) self.server_ip_edit = QLineEdit(config["server_ip"])
self.mediamtx_path_edit = QLineEdit(config["mediamtx_path"])
self.ffmpeg_path_edit = QLineEdit(config["ffmpeg_path"]) self.ffmpeg_path_edit = QLineEdit(config["ffmpeg_path"])
self.stream_path_edit = QLineEdit(config["stream_path"]) self.stream_path_edit = QLineEdit(config["stream_path"])
self.mediamtx_btn = QPushButton("浏览...")
self.mediamtx_btn.clicked.connect(lambda: self.browse("mediamtx"))
self.ffmpeg_btn = QPushButton("浏览...") self.ffmpeg_btn = QPushButton("浏览...")
self.ffmpeg_btn.clicked.connect(lambda: self.browse("ffmpeg")) self.ffmpeg_btn.clicked.connect(lambda: self.browse("ffmpeg"))
path_layout1 = QGridLayout() path_layout1 = QGridLayout()
path_layout1.addWidget(self.mediamtx_path_edit, 0, 0) path_layout1.addWidget(self.ffmpeg_path_edit, 0, 0)
path_layout1.addWidget(self.mediamtx_btn, 0, 1) path_layout1.addWidget(self.ffmpeg_btn, 0, 1)
path_layout1.addWidget(self.ffmpeg_path_edit, 1, 0)
path_layout1.addWidget(self.ffmpeg_btn, 1, 1)
layout.addRow("服务器IP:", self.server_ip_edit) layout.addRow("服务器IP:", self.server_ip_edit)
layout.addRow("MediaMTX路径:", self.mediamtx_path_edit)
layout.addRow("FFmpeg路径:", self.ffmpeg_path_edit) layout.addRow("FFmpeg路径:", self.ffmpeg_path_edit)
layout.addRow("推流路径:", self.stream_path_edit) layout.addRow("推流路径:", self.stream_path_edit)
@@ -72,11 +65,7 @@ class ConfigDialog(QDialog):
layout.addRow(buttons) layout.addRow(buttons)
def browse(self, field): def browse(self, field):
if field == "mediamtx": if field == "ffmpeg":
path = QFileDialog.getOpenFileName(self, "选择MediaMTX", "", "Executable (*.exe)")[0]
if path:
self.mediamtx_path_edit.setText(path)
elif field == "ffmpeg":
path = QFileDialog.getOpenFileName(self, "选择FFmpeg", "", "Executable (*.exe)")[0] path = QFileDialog.getOpenFileName(self, "选择FFmpeg", "", "Executable (*.exe)")[0]
if path: if path:
self.ffmpeg_path_edit.setText(path) self.ffmpeg_path_edit.setText(path)
@@ -84,7 +73,6 @@ class ConfigDialog(QDialog):
def get_config(self): def get_config(self):
return { return {
"server_ip": self.server_ip_edit.text().strip(), "server_ip": self.server_ip_edit.text().strip(),
"mediamtx_path": self.mediamtx_path_edit.text().strip(),
"ffmpeg_path": self.ffmpeg_path_edit.text().strip(), "ffmpeg_path": self.ffmpeg_path_edit.text().strip(),
"stream_path": self.stream_path_edit.text().strip() "stream_path": self.stream_path_edit.text().strip()
} }
@@ -96,7 +84,6 @@ class ConnectionChecker(QThread):
while True: while True:
cfg = self.config cfg = self.config
status = { status = {
"mediamtx": self.check_mediamtx(cfg["mediamtx_path"]),
"ffmpeg": self.check_ffmpeg(cfg["ffmpeg_path"]), "ffmpeg": self.check_ffmpeg(cfg["ffmpeg_path"]),
"server": self.check_server(cfg["server_ip"]), "server": self.check_server(cfg["server_ip"]),
"server_port": self.check_port(cfg["server_ip"], 8554), "server_port": self.check_port(cfg["server_ip"], 8554),
@@ -107,12 +94,6 @@ class ConnectionChecker(QThread):
def set_config(self, config): def set_config(self, config):
self.config = config self.config = config
def check_mediamtx(self, path):
for proc in psutil.process_iter(['name']):
if proc.info['name'] == 'mediamtx.exe':
return True
return False
def check_ffmpeg(self, path): def check_ffmpeg(self, path):
return os.path.exists(path) return os.path.exists(path)
@@ -167,13 +148,10 @@ class MainWindow(QMainWindow):
config_group = QGroupBox("本地配置") config_group = QGroupBox("本地配置")
config_layout = QGridLayout() config_layout = QGridLayout()
self.mediamtx_label = QLabel("MediaMTX: 未检测")
self.ffmpeg_label = QLabel("FFmpeg: 未检测") self.ffmpeg_label = QLabel("FFmpeg: 未检测")
self.server_label = QLabel("服务器连接: 未检测") self.server_label = QLabel("服务器连接: 未检测")
self.port_label = QLabel("RTSP端口: 未检测") self.port_label = QLabel("RTSP端口: 未检测")
self.mediamtx_indicator = QLabel("")
self.mediamtx_indicator.setFixedWidth(20)
self.ffmpeg_indicator = QLabel("") self.ffmpeg_indicator = QLabel("")
self.ffmpeg_indicator.setFixedWidth(20) self.ffmpeg_indicator.setFixedWidth(20)
self.server_indicator = QLabel("") self.server_indicator = QLabel("")
@@ -181,14 +159,12 @@ class MainWindow(QMainWindow):
self.port_indicator = QLabel("") self.port_indicator = QLabel("")
self.port_indicator.setFixedWidth(20) self.port_indicator.setFixedWidth(20)
config_layout.addWidget(self.mediamtx_indicator, 0, 0) config_layout.addWidget(self.ffmpeg_indicator, 0, 0)
config_layout.addWidget(self.mediamtx_label, 0, 1) config_layout.addWidget(self.ffmpeg_label, 0, 1)
config_layout.addWidget(self.ffmpeg_indicator, 1, 0) config_layout.addWidget(self.server_indicator, 1, 0)
config_layout.addWidget(self.ffmpeg_label, 1, 1) config_layout.addWidget(self.server_label, 1, 1)
config_layout.addWidget(self.server_indicator, 2, 0) config_layout.addWidget(self.port_indicator, 2, 0)
config_layout.addWidget(self.server_label, 2, 1) config_layout.addWidget(self.port_label, 2, 1)
config_layout.addWidget(self.port_indicator, 3, 0)
config_layout.addWidget(self.port_label, 3, 1)
config_group.setLayout(config_layout) config_group.setLayout(config_layout)
main_layout.addWidget(config_group) main_layout.addWidget(config_group)
@@ -254,13 +230,6 @@ class MainWindow(QMainWindow):
self.log_label.setText("日志: 配置已更新") self.log_label.setText("日志: 配置已更新")
def update_status(self, status): def update_status(self, status):
if status["mediamtx"]:
self.mediamtx_indicator.setStyleSheet("color: green; font-size: 16px;")
self.mediamtx_label.setText("MediaMTX: ✓ 运行中")
else:
self.mediamtx_indicator.setStyleSheet("color: red; font-size: 16px;")
self.mediamtx_label.setText("MediaMTX: ✗ 未运行")
if status["ffmpeg"]: if status["ffmpeg"]:
self.ffmpeg_indicator.setStyleSheet("color: green; font-size: 16px;") self.ffmpeg_indicator.setStyleSheet("color: green; font-size: 16px;")
self.ffmpeg_label.setText("FFmpeg: ✓ 已安装") self.ffmpeg_label.setText("FFmpeg: ✓ 已安装")
@@ -282,22 +251,9 @@ class MainWindow(QMainWindow):
self.port_indicator.setStyleSheet("color: orange; font-size: 16px;") self.port_indicator.setStyleSheet("color: orange; font-size: 16px;")
self.port_label.setText("RTSP端口: ✗ 端口关闭") self.port_label.setText("RTSP端口: ✗ 端口关闭")
def start_mediamtx(self):
cfg = self.config
if not self.checker.check_mediamtx(cfg["mediamtx_path"]):
logger.info("启动MediaMTX服务")
subprocess.Popen([cfg["mediamtx_path"]], cwd=os.path.dirname(cfg["mediamtx_path"]), creationflags=subprocess.CREATE_NEW_CONSOLE)
time.sleep(3)
logger.info("MediaMTX服务已启动")
self.log_label.setText("日志: MediaMTX服务已启动")
else:
logger.info("MediaMTX已在运行")
self.log_label.setText("日志: MediaMTX已在运行")
def push_full_screen(self): def push_full_screen(self):
cfg = self.config cfg = self.config
logger.info("开始全屏投屏") logger.info("开始全屏投屏")
self.start_mediamtx()
if not os.path.exists(cfg["ffmpeg_path"]): if not os.path.exists(cfg["ffmpeg_path"]):
logger.error("FFmpeg未安装") logger.error("FFmpeg未安装")