一、ffmpeg下载
录制函数
python
def download_video_by_live_url():
playUrl = "rtmp://....." #推流url:rtmp、m3u8等
print(f"已开始录制: playUrl:{playUrl}")
now_time = datetime.now().strftime('%Y_%m_%d__%H_%M_%S')
output_file = now_time + ".mp4"
output_file = re.sub(r'[\\/:*?"<>|]', '', output_file)
ffmpeg_command = [
"ffmpeg",
"-i", playUrl,
"-c", "copy",
"-f", "mp4",
output_file
]
process = subprocess.Popen(
ffmpeg_command,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True, # decode bytes to str
encoding="utf-8",
bufsize=1
)
time_pattern = re.compile(r'time=(\d+:\d+:\d+\.\d+)')
start_time = time.time()
try:
for line in process.stderr:
line = line.strip()
if 'time=' in line:
match = time_pattern.search(line)
if match and time.time() - start_time > 10:
start_time = time.time()
current_time = match.group(1)
print(f" Progress: {current_time}", flush=True)
if 'No such stream' in line:
print(f"直播结束,结束录制!")
break
except KeyboardInterrupt:
print(f"检测到手动中断,正在优雅停止 ffmpeg...")
process.stdin.write('q'.encode("GBK"))
process.communicate()
process.kill()
except Exception as e:
print(f"[{current_name}][{nickname}]录制出错: {e}")
process.wait()