This commit is contained in:
eric
2026-03-19 02:50:52 -05:00
parent 43a07f144f
commit 9ccafcc0d5

View File

@@ -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)