修改清理文件逻辑,改到main_start.py中

This commit is contained in:
zqc
2026-03-09 12:17:01 +08:00
parent cbf06ddc22
commit 74f555f38c
3 changed files with 277 additions and 42 deletions

View File

@@ -1,6 +1,6 @@
# hls_downloader.py
# HLS分片TS下载管理进程
# 功能管理ffmpeg下载HLS直播流支持异常重试、定时轮换、文件清理
# 功能管理ffmpeg下载HLS直播流支持异常重试、定时轮换
import os
import sys
@@ -8,7 +8,6 @@ import json
import argparse
import signal
import subprocess
import shutil
import time
from datetime import datetime, timedelta
from typing import Optional
@@ -35,7 +34,6 @@ def parse_args():
parser.add_argument("--camera-id", required=True, type=int, help="Camera ID")
parser.add_argument("--hls-root-path", required=True, help="HLS root path")
parser.add_argument("--rotate-hour", required=True, type=int, help="Daily rotate hour (0-23)")
parser.add_argument("--retention-days", required=True, type=int, help="File retention days")
parser.add_argument("--retry-interval", required=True, type=int, help="Retry interval seconds")
return parser.parse_args()
@@ -152,37 +150,6 @@ def stop_ffmpeg():
ffmpeg_process = None
def cleanup_old_folders(hls_root_path: str, index_code: str, retention_days: int):
"""清理过期的下载文件夹"""
try:
index_folder = os.path.join(hls_root_path, index_code)
if not os.path.exists(index_folder):
return
cutoff_date = datetime.now() - timedelta(days=retention_days)
cutoff_str = cutoff_date.strftime("%Y%m%d")
deleted_count = 0
for folder_name in os.listdir(index_folder):
folder_path = os.path.join(index_folder, folder_name)
if os.path.isdir(folder_path):
# 从文件夹名称解析日期 (yyyyMMdd_HHmmss)
try:
date_str = folder_name.split("_")[0]
if date_str < cutoff_str:
shutil.rmtree(folder_path)
logger.info(f"Deleted old folder: {folder_path}")
deleted_count += 1
except Exception as e:
logger.warning(f"Failed to parse folder date {folder_name}: {e}")
if deleted_count > 0:
logger.info(f"Cleaned up {deleted_count} old folders")
except Exception as e:
logger.error(f"Error cleaning up old folders: {e}")
def get_next_rotate_time(rotate_hour: int) -> datetime:
"""计算下次轮换时间"""
now = datetime.now()
@@ -243,7 +210,7 @@ def main():
logger.info(f"HLS Downloader starting for camera: {args.camera_name} (index: {args.index_code})")
logger.info(f"Config: hls_root={args.hls_root_path}, rotate_hour={args.rotate_hour}, "
f"retention_days={args.retention_days}, retry_interval={args.retry_interval}")
f"retry_interval={args.retry_interval}")
# 计算下次轮换时间
next_rotate_time = get_next_rotate_time(args.rotate_hour)
@@ -284,17 +251,14 @@ def main():
now = datetime.now()
if now >= next_rotate_time:
logger.info("Daily rotation triggered")
# 停止当前ffmpeg
stop_ffmpeg()
# 清理旧文件
cleanup_old_folders(args.hls_root_path, args.index_code, args.retention_days)
# 计算下次轮换时间
next_rotate_time = get_next_rotate_time(args.rotate_hour)
logger.info(f"Next rotation scheduled at: {next_rotate_time}")
# 继续循环会重新启动ffmpeg
time.sleep(1)
continue