fix: 视频时间语义修正 — 绝对时间戳偏移换算 + mtime 起点修正 + 直传超时
三处时间语义 bug(时区统一排查的延伸发现): 1. NVIDIA 集锦偏移语义: frame_timestamps 是绝对时间 'YYYY-MM-DD HH:MM:SS'(当日秒 77474s)被直接当视频内偏移用, seek 超出 30 分钟视频 → 0 帧 → 集锦恒为空 → 视频模式永远降级。 修复: analyze_video 增加 event_start_time 参数,偏移 = 帧时间 - 视频开始时间(跨午夜 +86400);orchestrator 两处 调用点透传。另加 ffprobe 时长过滤跳过超界片段(日志明示), fps=15 统一 CFR 输出。 2. NAS dispatcher event_start_time: 原用文件 mtime(=录制结束 时刻),真实开始时间应为 mtime - 视频时长,事件时间整体偏移 一个视频周期(~30min)。新增 _probe_duration 用 ffmpeg 解析 Duration(NAS 无独立 ffprobe)。 3. 直传超时: 压缩后 ~19MB 略低于 20MB 分块阈值走直传, timeout(10,120) 在 1Mbps 下传 19MB 需 ~152s 必超时(task 42 三连败 FAILED)。加大到 (10, 300)。 测试数据陷阱记录: 两轮 0KB/9.47s 集锦异常均为测试时间戳超出 视频时长所致(1801s>1800s),单输入/多输入 concat 行为本身正常。
This commit is contained in:
@@ -54,7 +54,8 @@ class AIOrchestrator:
|
||||
frame_timestamps: List[str],
|
||||
known_members_context: str,
|
||||
rate_limiter=None,
|
||||
video_path: str = None) -> Dict[str, dict]:
|
||||
video_path: str = None,
|
||||
event_start_time: str = '') -> Dict[str, dict]:
|
||||
"""视觉分析阶段:仅 role=vision 的适配器参与
|
||||
|
||||
支持 analyze_video 的适配器(如 NVIDIA Omni)优先走原生视频输入,
|
||||
@@ -97,7 +98,8 @@ class AIOrchestrator:
|
||||
try:
|
||||
logger.info(f"[{adapter.provider_name}] 尝试原生视频输入分析")
|
||||
output = adapter.analyze_video(
|
||||
video_path, frame_timestamps, known_members_context)
|
||||
video_path, frame_timestamps, known_members_context,
|
||||
event_start_time=event_start_time)
|
||||
if not output:
|
||||
logger.warning(f"[{adapter.provider_name}] 视频模式失败,降级逐帧模式")
|
||||
except Exception as ve:
|
||||
@@ -371,7 +373,8 @@ class AIOrchestrator:
|
||||
# 3. 并行视觉分析
|
||||
model_outputs = self.run_visual_analysis(
|
||||
healthy_adapters, compressed_frames, frame_timestamps,
|
||||
known_members, video_path=video_path
|
||||
known_members, video_path=video_path,
|
||||
event_start_time=event_start_time
|
||||
)
|
||||
|
||||
if not model_outputs:
|
||||
@@ -467,7 +470,8 @@ class AIOrchestrator:
|
||||
# 3. 并行视觉分析
|
||||
model_outputs = self.run_visual_analysis(
|
||||
healthy_adapters, compressed_frames, frame_timestamps,
|
||||
known_members, rate_limiter, video_path=video_path
|
||||
known_members, rate_limiter, video_path=video_path,
|
||||
event_start_time=event_start_time
|
||||
)
|
||||
if not model_outputs:
|
||||
raise Exception('All models failed in visual analysis')
|
||||
|
||||
Reference in New Issue
Block a user