's'
This commit is contained in:
@@ -285,7 +285,7 @@ def run_demucs_pipeline(
|
||||
ffmpeg_out_cmd,
|
||||
stdin=subprocess.PIPE,
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
stderr=subprocess.PIPE,
|
||||
bufsize=1024 * 1024,
|
||||
)
|
||||
|
||||
@@ -331,6 +331,20 @@ def run_demucs_pipeline(
|
||||
reader_t.daemon = True
|
||||
reader_t.start()
|
||||
|
||||
# 监控 proc_out 的 stderr(推流到 YouTube,错误必须可见)
|
||||
def _proc_out_stderr_reader():
|
||||
try:
|
||||
for line in iter(proc_out.stderr.readline, b""):
|
||||
if line:
|
||||
decoded = line.decode("utf-8", errors="replace").strip()
|
||||
if decoded:
|
||||
print(f"[YouTube推流] {decoded}")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
proc_out_reader_t = threading.Thread(target=_proc_out_stderr_reader, daemon=True)
|
||||
proc_out_reader_t.start()
|
||||
|
||||
start_time = last_frame_time = time.time()
|
||||
proc_v.last_out_ts = time.time()
|
||||
|
||||
@@ -338,6 +352,10 @@ def run_demucs_pipeline(
|
||||
try:
|
||||
line = stderr_q.get(timeout=stderr_queue_timeout)
|
||||
except queue.Empty:
|
||||
# 若 proc_out(推流进程)已异常退出,立即报告
|
||||
if proc_out.poll() is not None and proc_out.returncode != 0:
|
||||
print(f"[ERROR] YouTube 推流进程已退出,返回码: {proc_out.returncode}")
|
||||
break
|
||||
if time.time() - getattr(proc_v, "last_out_ts", time.time()) > stale_output_seconds:
|
||||
print("[WARN] 长时间无任何日志,强制重启进程")
|
||||
break
|
||||
@@ -378,6 +396,8 @@ def run_demucs_pipeline(
|
||||
traceback.print_exc()
|
||||
finally:
|
||||
stop_event.set()
|
||||
if proc_out is not None and proc_out.poll() is not None and proc_out.returncode != 0:
|
||||
print(f"[INFO] YouTube 推流进程退出码: {proc_out.returncode}")
|
||||
cleanup_proc_fn(proc_v)
|
||||
cleanup_proc_fn(proc_a)
|
||||
cleanup_proc_fn(proc_out)
|
||||
|
||||
Reference in New Issue
Block a user