everything works

This commit is contained in:
guest
2026-05-14 17:17:10 +08:00
parent 8cb1f1e654
commit 170febf0b0
3 changed files with 350 additions and 53 deletions

View File

@@ -285,6 +285,22 @@ class Settings(BaseSettings):
"BIOMASS_SONAR_VIDEO_SLICE_SEC", "biomass_sonar_video_slice_sec"
),
)
#: 声呐切片顺序:``tail`` = 每次取文件末尾 N 秒(``-sseof````sequential`` = 从 t=0 起按 N 秒顺序切完整块(不足一块不发布)。**BIOMASS_SONAR_SLICE_ORDER**
biomass_sonar_slice_order: str = Field(
default="sequential",
validation_alias=AliasChoices(
"BIOMASS_SONAR_SLICE_ORDER", "biomass_sonar_slice_order"
),
)
#: 顺序模式下每轮监控循环最多发布几块完整切片;``0`` = 不限制(长视频可能长时间占住循环)。**BIOMASS_SONAR_MAX_CHUNKS_PER_POLL**
biomass_sonar_max_chunks_per_poll: int = Field(
default=1,
ge=0,
validation_alias=AliasChoices(
"BIOMASS_SONAR_MAX_CHUNKS_PER_POLL",
"biomass_sonar_max_chunks_per_poll",
),
)
#: 发布到 MEDIA_ROOT 的 H.264 文件名。**BIOMASS_SONAR_VIDEO_MEDIA_NAME**
biomass_sonar_video_media_name: str = "biomass_sonar.mp4"
#: 为 True 时声呐发布管线在 ffmpeg 转 H.264 之前先做 Farneback 光流 overlay与 ``/sonar/video/`` 返回的仍是同一 ``video_path`` 字段)。**BIOMASS_SONAR_OPTICAL_FLOW**
@@ -396,6 +412,21 @@ class Settings(BaseSettings):
return None
return v
@field_validator("biomass_sonar_slice_order", mode="before")
@classmethod
def _normalize_biomass_sonar_slice_order(cls, v: object) -> str:
if v is None:
return "sequential"
s = str(v).strip().lower()
if s in frozenset({"tail", "last", "last_n", "sseof"}):
return "tail"
if s in frozenset({"sequential", "seq", "from_start"}):
return "sequential"
raise ValueError(
"biomass_sonar_slice_order must be 'tail' or 'sequential' "
f"(got {v!r})"
)
@field_validator(
"action_watch_dir",
"biomass_water_video_source",