fix 修复一些边录边传下载器的bug (#1220)

This commit is contained in:
XiaoMiku01 authored and GitHub committed 2025-04-03 05:42:21 +00:00
1 parent bb2e54f7fc
commit 9fa0c2cbcc
1 file changed
+29 -22
+29 -22
View File
@@ -85,9 +85,9 @@ class SyncDownloader:
self.video_queue.put(data)
ffmpeg_proc.wait()
# 输出 ffmpeg 的错误信息(如果有的话)
err = ffmpeg_proc.stderr.read()
if err:
logger.error("[run] ffmpeg err " + err.decode("utf-8", errors="replace"))
# err = ffmpeg_proc.stderr.read()
# if err:
# logger.error("[run] ffmpeg err " + err.decode("utf-8", errors="replace"))
return True # 如果正常执行,返回 True
def run_streamlink_with_ffmpeg(self, streamlink_cmd, ffmpeg_cmd, output_filename):
@@ -124,13 +124,13 @@ class SyncDownloader:
ffmpeg_proc.wait()
logger.info("[run] ffmpeg 已到达输出大小并退出。结束本段写入。")
# 打印 ffmpeg 子进程的错误输出
ffmpeg_err = ffmpeg_proc.stderr.read()
if ffmpeg_err:
logger.error("[run] ffmpeg err " + ffmpeg_err.decode("utf-8", errors="replace"))
# ffmpeg_err = ffmpeg_proc.stderr.read()
# if ffmpeg_err:
# logger.error("[run] ffmpeg err " + ffmpeg_err.decode("utf-8", errors="replace"))
# 打印 streamlink 子进程的错误输出
streamlink_err = streamlink_proc.stderr.read()
if streamlink_err:
logger.error("[run] streamlink err " + streamlink_err.decode("utf-8", errors="replace"))
# streamlink_err = streamlink_proc.stderr.read()
# if streamlink_err:
# logger.error("[run] streamlink err " + streamlink_err.decode("utf-8", errors="replace"))
return True # 如果一切正常,返回 True
def build_ffmpeg_cmd(self, input_source, output_filename, headers, segment_duration):
@@ -141,13 +141,17 @@ class SyncDownloader:
]
if headers:
cmd += ["-headers", ''.join(f'{key}: {value}\r\n' for key, value in headers.items())]
for i in ["-i", input_source, # 输入源
# "-t", str(segment_duration),
"-fs", f"{self.max_file_size}M",
"-c:v", "copy",
"-c:a", "copy",
"-movflags", "+frag_keyframe+empty_moov",
"-f", "matroska"]:
for i in [
"-fflags", "+genpts",
"-i", input_source, # 输入源
# "-t", str(segment_duration),
"-fs", f"{self.max_file_size}M",
"-c:v", "copy",
"-c:a", "copy",
"-reset_timestamps", "1",
"-avoid_negative_ts", "1",
"-movflags", "+frag_keyframe+empty_moov",
"-f", "matroska"]:
cmd.append(i)
cmd.append("-")
@@ -193,14 +197,17 @@ class SyncDownloader:
# print("[run] 输入源是 HLS 地址,将使用 streamlink + ffmpeg 进行录制。")
logger.info("[run] 输入源是 HLS 地址,将使用 streamlink + ffmpeg 进行录制。")
streamlink_cmd = [
"streamlink",
"--stream-segment-threads", "3",
"--hls-playlist-reload-attempts", "1",
"--http-header", ';'.join([f'{key}={value}' for key, value in self.headers.items()]),
'streamlink',
'--stream-segment-threads', '3',
'--hls-playlist-reload-attempts', '1'
]
for key, value in self.fake_headers.items():
streamlink_cmd.extend(['--http-header', f'{key}={value}'])
streamlink_cmd.extend([
self.stream_url,
self.quality,
"-O" # 输出到 stdout
]
'-O'
])
# output_filename = "-"
ffmpeg_cmd = self.build_ffmpeg_cmd("pipe:0", output_filename, None, self.segment_duration)
if not self.run_streamlink_with_ffmpeg(streamlink_cmd, ffmpeg_cmd, output_filename):