修改清理文件逻辑,改到main_start.py中
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user