modify: ffmpeg -reconnect 参数兼容问题
This commit is contained in:
@@ -15,6 +15,23 @@ class StreamManager:
|
||||
self._semaphore = asyncio.Semaphore(max_streams)
|
||||
self._mediamtx_addr = mediamtx_addr
|
||||
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:
|
||||
"""判断是否为本地文件(绝对路径或相对路径)"""
|
||||
@@ -35,14 +52,11 @@ class StreamManager:
|
||||
])
|
||||
else:
|
||||
# ----- RTSP 网络流模式(支持自动重连) -----
|
||||
cmd.extend([
|
||||
"-rtsp_transport", "tcp",
|
||||
"-stimeout", "3000000", # 3 秒超时
|
||||
"-reconnect", "1",
|
||||
"-reconnect_streamed", "1",
|
||||
"-reconnect_delay_max", "5",
|
||||
"-i", source_url
|
||||
])
|
||||
base_args = ["-rtsp_transport", "tcp", "-stimeout", "3000000"]
|
||||
if self._support_reconnect:
|
||||
base_args.extend(["-reconnect", "1", "-reconnect_streamed", "1", "-reconnect_delay_max", "5"])
|
||||
cmd.extend(base_args)
|
||||
cmd.extend(["-i", source_url])
|
||||
|
||||
# 公共输出部分(流复制,推送到 MediaMTX)
|
||||
cmd.extend([
|
||||
|
||||
Reference in New Issue
Block a user