aa60ca1caddeceb65d89122c5bb111b8e8ec9351
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,文件名格式为:
{device_uuid}-{year}-{month}-{day}-{aligned_alarm_timestamp}.MP4
当前代码通过系统命令调用 FFmpeg:
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 版本:
ffmpeg -version
建议将输出第一行记录到本节,例如:
ffmpeg version <实际版本号>
构建与验证记录
最近一次文档记录中的构建信息:
go version: go1.26.4
GOOS: linux
GOARCH: arm64
CGO_ENABLED: 0
binary: bin/fireleave_tool
常用验证命令:
go test ./...
go build -o bin/fireleave_tool.new .
Description
Languages
Go
96%
Shell
3.7%
Dockerfile
0.3%