91 lines
3.0 KiB
Markdown
91 lines
3.0 KiB
Markdown
# 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 .
|
||
```
|