# FireLeave_tool ## 当前代码情况 本仓库是动火离人/火焰检测边缘端工具,主程序使用 Go 编写,模块名为 `FireLeave_tool`,当前 `go.mod` 指定 Go 1.19。 主要能力: - 启动并管理 `fire_leave` 和 `fire_check` 两路推理进程。 - 接收推理进程通过 HTTP 上报的检测结果和心跳。 - 维护设备运行状态、告警冷却、禁报时间窗口和本地缓存。 - 通过 WebSocket 与平台通信,支持告警、禁报时间等主题。 - 检测到告警后合成事件前后视频,并上传到 Nginx/平台。 - 支持 GPIO 按键触发本地告警暂停。 主要目录: - `main.go`:主流程入口,负责设备初始化、推理进程启动、状态监控和告警判断。 - `connect/`:WebSocket 通信、设备配置存储、推理进程心跳与重启。 - `httpreader/`:本地 HTTP 服务,接收推理结果、视频片段和心跳。 - `reporter/`:告警视频上传、事件上报、禁报时间持久化。 - `video_server/`:视频合成与上传逻辑。 - `gpio_monitor/`:GPIO 按键监控。 - `logger/`:日志封装。 - `docs/`、`usr_doc/`:变更记录和客户操作说明。 - `bin/fireleave_tool`:当前构建产物。 ## 视频合成逻辑 视频合成入口在 `video_server/video_merge.go`: - 根据告警时间对齐到 10 秒边界。 - 优先查找告警前 10 秒、告警时刻、告警后 10 秒对应的视频片段。 - 支持 `.mp4` 和 `.h264` 输入。 - 如果精确时间片段不足,会在目录中查找最接近目标时间的候选片段。 - 至少找到 2 个片段才会执行合成。 - 合成完成后复制到 `/data/upload`,文件名格式为: ```text {device_uuid}-{year}-{month}-{day}-{aligned_alarm_timestamp}.MP4 ``` 当前代码通过系统命令调用 FFmpeg: ```text ffmpeg -hide_banner -loglevel error -y ... ``` `.h264` 片段会先按时间顺序拼接为临时 `.h264` 文件,再使用 FFmpeg 封装为 MP4;`.mp4` 或混合输入则使用 FFmpeg concat list 方式合成,并使用 `-c copy` 与 `-movflags +faststart`。 ## 本次视频合成使用的 FFmpeg 版本 当前仓库代码没有内置 FFmpeg 二进制,也没有在代码中锁定 FFmpeg 版本;运行时依赖部署环境 PATH 中可执行的 `ffmpeg` 命令。 本仓库可确认的相关信息: - `Dockerfile` 中安装的视频合成相关包为 `mp4-merge_0.1.11-1_arm64.deb`。 - `video_server/video_merge.go` 实际调用的是 `ffmpeg` 命令。 - 当前 Windows 工作区未检测到可执行的 `ffmpeg`,因此无法从本机直接读取 `ffmpeg -version` 输出。 部署设备或容器中可用下面命令确认本次实际使用的 FFmpeg 版本: ```sh ffmpeg -version ``` 建议将输出第一行记录到本节,例如: ```text ffmpeg version <实际版本号> ``` ## 构建与验证记录 最近一次文档记录中的构建信息: ```text go version: go1.26.4 GOOS: linux GOARCH: arm64 CGO_ENABLED: 0 binary: bin/fireleave_tool ``` 常用验证命令: ```sh go test ./... go build -o bin/fireleave_tool.new . ```