.. | ||
build | ||
include | ||
src | ||
CMakeLists.txt | ||
README.md |
1. 打猎相机APP(WiFi单机版)设计文档
版本 | 时间 | 说明 |
---|---|---|
V1.0 | 2024-5-21 | 首次评审。 |
V1.1 | 2024-5-25 | 增加标准设置项和动态设置参数协议。 |
V1.2 | 2024-5-27 | 完善自定义协议描述。 |
1.1. 概述
打猎相机手机APP是用于查看相机的实时视频,回放保存在SD卡的MP4视频文件,以及对相机进行设置/管理。
备注: 本文基于六帧探APP现有功能,最小修改量实现APP的定制开发。
1.2. APP功能详解
1.2.1. 主页

主页图示
主页分三大块:相机管理,本地相册,更多(APP相关)。
1.2.1.1. 相机管理
- 相机管理-添加设备
手机连接设备的AP热点后,自动搜索设备,并添加到设备列表。可多次添加多个设备,设备列表中可对设备进行删除。
- 相机管理-连接设备
APP只能连接当前WiFi设备,如果当前WiFi未发现设备,提示用户正确连接设备WiFi。连接设备后,跳转到设备管理页面。
1.2.1.2. 本地相册

本地相册图示
本地相册可查找从相机下载到手机本地的文件(视频/图片)。“紧急”分类里面显示记录仪碰撞时的文件。
在打猎机的产品形态中,“紧急”分类显示PIR触发时拍摄的图片/视频。
1.2.1.3. 更多
保持不变。
1.2.1.4. 问题列表
- 如果用户未对设备出厂设置进行修改,如何区分不同的设备? 答:通过wifi名称进行区分。
- 如果APP面对多个出厂设备(设备信息完全一样),如何快速判断连接的是哪个设备? 答:音频互动。滴一声表示链接成功。
1.2.2. 相机连接页
APP连接设备后,可手动开始/停止录像;可手动拍照。可跳转到相机文件/相机设置界面。

相机连接图示
1.2.2.1. 实时播放界面
- 实时播放rtsp视频流;
- 可手动开始/停止录像;
- 可手动拍照;
1.2.2.2. 相机文件
对相机端的文件进行分类显示。可下载到手机本地/删除/编辑等操作。

设备端相册图示
1.2.2.2.1. 设备端文件分类
- PIR触发图片/视频;
- 手动抓拍图片/视频;
- 定时抓拍图片/视频;
- 全部文件;
文件分类整改方案:
目前APP支持的四种协议类型显示:循环/拍照/紧急/停车。打猎相机的分类定义为全部/PIR/手动/定时,根据协议进行一一对应回复,全部-循环,PIR-紧急,手动-拍照,定时-停车,在不修改协议的情况下,只需要修改APP的显示文字即可实现APP定制开发。
1.2.2.2.2. 相机设置
对设备的参数进行读取/修改。目前基于记录仪产品的设置内容无法满足打猎机产品需求。

相机设置图示
记录仪当前参数列表:
参数名称 | 数据类型 | 取值说明 | 公版支持 | 备注 |
---|---|---|---|---|
记录仪WiFi名称 | ---- | ---- | 支持 | ---- |
记录仪WiFi密码 | ---- | ---- | 支持 | ---- |
固件版本 | ---- | ---- | 支持 | ---- |
格式化存储卡 | ---- | ---- | 支持 | ---- |
恢复出厂设置 | ---- | ---- | 支持 | ---- |
打猎机参数需求列表:
下述列表中,未支持的设置项作为标准设置项需求,APP在切换语言时需要做对应的翻译。
参数名称 | 数据类型 | 取值说明 | 公版支持 | 备注 |
---|---|---|---|---|
记录仪WiFi名称 | ---- | ---- | 支持 | ---- |
记录仪WiFi密码 | ---- | ---- | 支持 | ---- |
固件版本 | ---- | ---- | 支持 | 仅显示 |
---- | ---- | ---- | ---- | ---- |
电量 | ---- | ---- | 未支持 | 仅显示 |
工作模式 | 数字 | 0:图片 1:图片+视频 |
未支持 | ---- |
连拍 | 数字 | 1/2/3 | 未支持 | 单位:P |
连拍间隔 | 数字 | 0~60 | 未支持 | 单位:s |
图片大小 | 数字 | 8/16/24/32/40 | 未支持 | 单位:M |
录像分辨率 | 数字 | 0:WVGA 1:HD 2:FHD |
未支持 | ---- |
录像帧率 | 数字 | 15/30 | 未支持 | 单位:fps |
视频长度 | 数字 | 10/15 | 未支持 | 单位:s |
PIR延时 | 时间 | 00:00:00-23:59:59 | 未支持 | 两个PIR之间的最小间隔 |
定时工作 | 时间 | 00:00:00-23:59:59 | 未支持 | 定时唤醒 |
工作时间 | 时间 | 起始的时间设置 例如:起点20:00至终点6:00 |
未支持 | ---- |
循环存储 | 数字 | 0:OFF 1:ON |
未支持 | ---- |
红外灯功率 | 数字 | 0/1/2 | 未支持 | 低/中/高 |
PIR灵敏度 | 数字 | 0~9 | 未支持 | ---- |
恢复出厂 | ---- | ---- | 支持 | 功能 |
格式化SD卡 | ---- | ---- | 支持 | 功能 |
重启 | ---- | ---- | 未支持 | 功能 |
1.2.2.3. 问题列表
- 针对软件迭代需求,除了一些和APP业务逻辑相关的参数需要特殊处理外,是否可以通过协议来获取设备自定义的参数设置?方便设备可以随意的增加/删除设置参数。 答:==已经支持==,看协议能力。
- 没发现升级功能。 答:公版APP不支持升级功能。
1.3. APP定制整改总结
基于WiFi公版基础,未修改原有协议,做界面显示定制和增量开发,方案可控。
- “记录仪”统一修改为“相机”; 答:需要定制。
- 本地相册-“紧急”分类,改为“PIR”;
- 新增标准的设置项,见前面描述:打猎机参数需求列表;
- APP连接设备后,自动录像,改为默认不录像,可手动录像; 答:设备返回非记录仪即可,见能力集。
- APP上的“循环”改成“全部”,“拍照”改成“手动”,“紧急”改成“PIR”,“停车”改成“定时”,全部包括手动/PIR/定时;
- 相机设置需要新增设备自定义设置项功能;
1.4. 设置界面动态渲染方案设计
为了实现设置参数可自由定制,例如:可随意的增加/减少常见类型的参数设置。此功能APP无需多语言翻译,直接显示协议字符即可。
1.4.1. 常见设置类型
参数类型 | 数据类型 | 取值说明 | 备注 |
---|---|---|---|
显示参数 | ---- | 协议自定义 | 仅显示,无法修改 |
开关 | 数字 | 只有0和1 0 - 关 1 - 开 |
只能设置开/关 |
数字输入框 | 数字(带单位/取值范围) | 协议指定取值范围 | 手动输入 |
任意输入框 | 无限制 | 无限制 | 手动输入任意字符 |
时间 | 时间 | ---- | 设置时间 |
功能 | 功能按钮 | 取消/确定 | 例如:格式化/恢复出厂/重启 可通过协议自由定义,协议带显示字符 |
选项 | 数字 | ---- | 协议带选项对应的文字字符 |
1.4.2. 动态渲染设置界面
1.4.2.1. 新增动态设置参数协议
获取动态设置参数列表
描述 | 获取动态设置参数列表。 |
接口 | http://192.168.1.100/app/getdynamicparam |
参数 | ?index=all&language=xx // 获取全部动态设置参数 ?index=6&language=xx // 获取索引号为6的动态设置参数 |
参数说明 | index:设置项索引,all代表全部 language:APP当前语言,由六帧探定义值,设备根据该值回传对应语言的字符串 |
返回参数 | result:0-成功,-1-失败 info:动态参数列表 |
获取全部动态参数返回示例:
{
"result": 0, // 0代表成功,-1代表失败
"info":
[
{
"name": "SettingName", // 直接显示在APP界面
"type": "label", // 显示控件类型,只显示
"value": "0-表示字符串", // 当前值
"index": 0 // 设置项索引,直接回传给设备
},
{
"name": "NumberName",
"type": "inputnum", // 数字输入框,带单位显示
"value": 123456789,
"length": 9, // 输入字符最大长度
"unit": "s", // 单位,可选,如果有则显示单位
"index": 1 // 设置项索引,直接回传给设备
},
{
"name": "SwitchName",
"type": "switch", // 开关,0-关,1-开
"value": 0, // 当前值,0-关,1-开
"index": 2 // 设置项索引,直接回传给设备
},
{
"name": "InputStringName",
"type": "inputstring", // 任意字符(数字/字母/常见字符)输入框
"value": "0123abcDEF!@#", // 当前值
"length": 15, // 输入字符最大长度
"index": 3 // 设置项索引,直接回传给设备
},
{
"name": "TimeSettingName",
"type": "time", // 时间设置(24小时制),格式:hh-mm-ss
"value": "23:59:59", // 当前值,格式:hh-mm-ss
"index": 4 // 设置项索引,直接回传给设备
},
{
"name": "ConfirmName",
"tips": "Confirm?", // 提示信息,没有时使用name
"type": "comfirm", // 功能按钮(确认框)
"index": 5 // 设置项索引,直接回传给设备
},
{
"name": "OptionName",
"type": "option", // 选项设置
"items": ["Option0","Option1"], // 选项列表,格式:["选项1","选项2",...]
"value": 1, // 当前值, 索引值,0-Option0,1-Option1
"index": 6 // 设置项索引,直接回传给设备
}
]
}
响应值描述:
参数名 | 类型 | 描述 |
---|---|---|
name | String | 直接显示在APP |
type | String | 控件类型: label-字符串,仅显示内容,无法修改 inputnum-数字 switch-开关(0-关,1-开) inputstring-任意字符(数字/字母/常见字符)输入 time-时间设置 comfirm-功能按钮(确认框) option-选项设置 |
value | ---- | 当前值,类型根据type定义来确定 |
length | int | 输入框的长度限制 |
unit | String | 单位,如果有则在APP界面显示 |
index | int | 索引值,设备使用,根据索引值知道修改哪个参数 |
动态设置项设置协议
描述 | 动态设置项设置协议 |
接口 | http://192.168.1.100/app/dynamicparamset |
参数 | ?index=1&value=0123456789 // 数字输入框 ?index=2&value=0 // 开关,0-关,1-开 ?index=3&value=0123abcDEF!@# // 任意字符输入框 ?index=4&value=23:59:59 // 时间 ?index=5&value=0 // 0-取消;1-确认 ?index=6&value=1 // 0-Option0,1-Option1,以此类推 |
返回参数 | result:0-成功,-1-失败 返回成功后重新获取动态参数显示 |
动态设置项设置返回示例:
{
"result" : 0,
"info" : "success."
}
动态参数显示/设置UML时序图:
sequenceDiagram
participant APP
participant CAMERA
APP ->> APP:进入设置界面
APP ->> +CAMERA:http:getdynamicparam?index=all&language=xx
CAMERA -->> -APP:return
loop 设置界面停留
opt 用户切换语言
note over APP: 语言切换后,APP重新获取动态参数
APP ->> +CAMERA:http:getdynamicparam?index=2&language=xx
CAMERA -->> -APP:return
end
opt 用户修改参数
APP ->> APP:用户修改参数
APP ->> +CAMERA:http:dynamicparamset?index=2
CAMERA -->> -APP:return
alt result=0
APP ->> APP:修改成功
APP ->> +CAMERA:http:getdynamicparam?index=2&language=xx
CAMERA -->> -APP:return
APP ->> APP:刷新设置项显示
else result=-1
APP ->> APP:修改失败
end
end
end
opt 设备端修改参数
note over CAMERA: 设备端修改参数未能同步(未发现同步协议)
end
APP ->> APP:退出设置界面
1.4.3. 拓展规划
后续如何拓展为4G版本?