# 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. 问题列表
1. 如果用户未对设备出厂设置进行修改,如何区分不同的设备?
答:通过wifi名称进行区分。
2. 如果APP面对多个出厂设备(设备信息完全一样),如何快速判断连接的是哪个设备?
答:音频互动。滴一声表示链接成功。
### 1.2.2. 相机连接页
APP连接设备后,可手动开始/停止录像;可手动拍照。可跳转到相机文件/相机设置界面。
相机连接图示
#### 1.2.2.1. 实时播放界面
* 实时播放rtsp视频流;
* 可手动开始/停止录像;
* 可手动拍照;
#### 1.2.2.2. 相机文件
对相机端的文件进行分类显示。可下载到手机本地/删除/编辑等操作。
设备端相册图示
##### 1.2.2.2.1. 设备端文件分类
1. PIR触发图片/视频;
2. 手动抓拍图片/视频;
3. 定时抓拍图片/视频;
4. 全部文件;
**文件分类整改方案:**
目前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. 问题列表
1. 针对软件迭代需求,除了一些和APP业务逻辑相关的参数需要特殊处理外,是否可以通过协议来获取设备自定义的参数设置?方便设备可以随意的增加/删除设置参数。
答:==已经支持==,看协议能力。
2. 没发现升级功能。
答:公版APP不支持升级功能。
## 1.3. APP定制整改总结
**基于WiFi公版基础,未修改原有协议,做界面显示定制和增量开发,方案可控。**
1. “记录仪”统一修改为“相机”;
答:需要定制。
2. 本地相册-“紧急”分类,改为“PIR”;
3. **新增标准的设置项,见前面描述:打猎机参数需求列表;**
4. APP连接设备后,自动录像,改为默认不录像,可手动录像;
答:设备返回非记录仪即可,见能力集。
5. APP上的“循环”改成“全部”,“拍照”改成“手动”,“紧急”改成“PIR”,“停车”改成“定时”,**全部包括手动/PIR/定时**;
6. **相机设置需要新增设备自定义设置项功能;**
## 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:动态参数列表 |
**获取全部动态参数返回示例:**
```code
{
"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-失败
返回成功后重新获取动态参数显示 |
**动态设置项设置返回示例:**
```code
{
"result" : 0,
"info" : "success."
}
```
**动态参数显示/设置UML时序图:**
```mermaid
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版本?