modify: ffmpeg -reconnect 参数兼容问题

This commit is contained in:
2026-08-06 12:22:18 +08:00
parent be22c9a7fa
commit 8b810fb5a0
+22 -8
View File
@@ -15,6 +15,23 @@ class StreamManager:
self._semaphore = asyncio.Semaphore(max_streams) self._semaphore = asyncio.Semaphore(max_streams)
self._mediamtx_addr = mediamtx_addr self._mediamtx_addr = mediamtx_addr
self._video_path = video_path self._video_path = video_path
self._support_reconnect = self._check_reconnect_support()
logger.info(f"FFmpeg reconnect support: {self._support_reconnect}")
@staticmethod
def _check_reconnect_support() -> bool:
try:
result = subprocess.run(
["ffmpeg", "-h", "full"],
capture_output=True,
text=True,
timeout=5
)
if result.returncode != 0:
return False
return bool(re.search(r'^-reconnect\b', result.stdout, re.MULTILINE))
except (subprocess.TimeoutExpired, FileNotFoundError):
return False
def _is_local_file(self, url: str) -> bool: def _is_local_file(self, url: str) -> bool:
"""判断是否为本地文件(绝对路径或相对路径)""" """判断是否为本地文件(绝对路径或相对路径)"""
@@ -35,14 +52,11 @@ class StreamManager:
]) ])
else: else:
# ----- RTSP 网络流模式(支持自动重连) ----- # ----- RTSP 网络流模式(支持自动重连) -----
cmd.extend([ base_args = ["-rtsp_transport", "tcp", "-stimeout", "3000000"]
"-rtsp_transport", "tcp", if self._support_reconnect:
"-stimeout", "3000000", # 3 秒超时 base_args.extend(["-reconnect", "1", "-reconnect_streamed", "1", "-reconnect_delay_max", "5"])
"-reconnect", "1", cmd.extend(base_args)
"-reconnect_streamed", "1", cmd.extend(["-i", source_url])
"-reconnect_delay_max", "5",
"-i", source_url
])
# 公共输出部分(流复制,推送到 MediaMTX) # 公共输出部分(流复制,推送到 MediaMTX)
cmd.extend([ cmd.extend([