将get_latest_n_segments分离出来到utils
This commit is contained in:
@@ -21,9 +21,10 @@ from dataclasses import dataclass
|
||||
from common.processor_factory import get_processor
|
||||
|
||||
from common.camera_config import CameraConfig, parse_cameras_from_json, parse_cameras_from_yaml
|
||||
from common.constants import init_config
|
||||
from common import constants
|
||||
from utils.web_socket_sender import WebSocketSender
|
||||
from utils.logger import get_logger
|
||||
from utils.hls_utils import get_latest_n_segments as get_latest_segments
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
@@ -59,53 +60,8 @@ class HLSFrameProcessor(threading.Thread):
|
||||
self.should_reset_time = False
|
||||
|
||||
def get_latest_n_segments(self, n: int) -> list:
|
||||
"""
|
||||
获取最新的n个TS分片
|
||||
|
||||
逻辑:
|
||||
1. 获取index_code文件夹下所有时间戳文件夹
|
||||
2. 按时间戳名称降序排序(最新的在前)
|
||||
3. 从最新的时间戳文件夹开始获取分片
|
||||
4. 如果分片数不足n,继续从上一个时间戳文件夹获取
|
||||
5. 返回最新的n个分片路径list(按时间顺序,最旧的在前)
|
||||
"""
|
||||
if not os.path.exists(self.camera_root_dir):
|
||||
return []
|
||||
|
||||
# 获取所有时间戳文件夹并排序(字符串排序即时间排序)
|
||||
timestamp_folders = []
|
||||
for folder_name in os.listdir(self.camera_root_dir):
|
||||
folder_path = os.path.join(self.camera_root_dir, folder_name)
|
||||
if os.path.isdir(folder_path):
|
||||
timestamp_folders.append(folder_name)
|
||||
|
||||
if not timestamp_folders:
|
||||
return []
|
||||
|
||||
# 降序排序,最新的在前
|
||||
timestamp_folders.sort(reverse=True)
|
||||
|
||||
# 收集分片
|
||||
all_segments = []
|
||||
for ts_folder in timestamp_folders:
|
||||
ts_folder_path = os.path.join(self.camera_root_dir, ts_folder)
|
||||
pattern = os.path.join(ts_folder_path, "segment_*.ts")
|
||||
segment_files = glob.glob(pattern)
|
||||
|
||||
# 按分片序号排序
|
||||
segment_files.sort(key=lambda x: int(os.path.basename(x).split('_')[-1].split('.')[0]))
|
||||
|
||||
all_segments.extend(segment_files)
|
||||
|
||||
# 已经收集够了
|
||||
if len(all_segments) >= n:
|
||||
break
|
||||
|
||||
# 返回最新的n个(取最后n个,因为最新的在后面)
|
||||
if len(all_segments) >= n:
|
||||
return all_segments[-n:]
|
||||
else:
|
||||
return all_segments
|
||||
"""获取最新的n个TS分片(委托给工具函数)"""
|
||||
return get_latest_segments(self.camera_root_dir, n)
|
||||
|
||||
def get_segment_number(self, filename):
|
||||
"""从文件名中提取序号"""
|
||||
@@ -380,7 +336,8 @@ if __name__ == "__main__":
|
||||
args = parser.parse_args()
|
||||
|
||||
# 初始化全局配置
|
||||
init_config(args.config)
|
||||
constants.init_config(args.config)
|
||||
constants.HLS_ROOT_PATH = args.hls_root_path
|
||||
|
||||
# 优先使用命令行传入的 cameras JSON,否则读取配置文件
|
||||
if args.cameras:
|
||||
|
||||
Reference in New Issue
Block a user