314 lines
14 KiB
Markdown
314 lines
14 KiB
Markdown
# 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. 主页
|
||
|
||
<div style="text-align:center; width: 100%;">
|
||
<img src="./build/picture/main_page.png" alt="替代文本" style="text-align:center; width: 30%; height: auto; max-width: 400px; border: 2px solid black;">
|
||
<h5 style="text-align: center;">主页图示</h5>
|
||
</div>
|
||
|
||
  主页分三大块:相机管理,本地相册,更多(APP相关)。
|
||
|
||
#### 1.2.1.1. 相机管理
|
||
|
||
* 相机管理-添加设备
|
||
|
||
  手机连接设备的AP热点后,自动搜索设备,并添加到设备列表。可多次添加多个设备,设备列表中可对设备进行删除。
|
||
|
||
* 相机管理-连接设备
|
||
|
||
  APP只能连接当前WiFi设备,如果当前WiFi未发现设备,提示用户正确连接设备WiFi。连接设备后,跳转到设备管理页面。
|
||
|
||
#### 1.2.1.2. 本地相册
|
||
|
||
<div style="text-align:center; width: 100%;">
|
||
<img src="./build/picture/phone_local_files.png" alt="替代文本" style="text-align:center; width: 30%; height: auto; max-width: 400px; border: 2px solid black;">
|
||
<h5 style="text-align: center;">本地相册图示</h5>
|
||
</div>
|
||
|
||
  本地相册可查找从相机下载到手机本地的文件(视频/图片)。“紧急”分类里面显示记录仪碰撞时的文件。
|
||
|
||
  在打猎机的产品形态中,“紧急”分类显示PIR触发时拍摄的图片/视频。
|
||
|
||
#### 1.2.1.3. 更多
|
||
|
||
  保持不变。
|
||
|
||
#### 1.2.1.4. 问题列表
|
||
|
||
1. 如果用户未对设备出厂设置进行修改,如何区分不同的设备?
|
||
答:通过wifi名称进行区分。
|
||
2. 如果APP面对多个出厂设备(设备信息完全一样),如何快速判断连接的是哪个设备?
|
||
答:音频互动。滴一声表示链接成功。
|
||
|
||
### 1.2.2. 相机连接页
|
||
|
||
  APP连接设备后,可手动开始/停止录像;可手动拍照。可跳转到相机文件/相机设置界面。
|
||
|
||
<div style="text-align:center; width: 100%;">
|
||
<img src="./build/picture/device.png" alt="替代文本" style="text-align:center; width: 30%; height: auto; max-width: 400px; border: 2px solid black;">
|
||
<h5 style="text-align: center;">相机连接图示</h5>
|
||
</div>
|
||
|
||
#### 1.2.2.1. 实时播放界面
|
||
|
||
* 实时播放rtsp视频流;
|
||
* 可手动开始/停止录像;
|
||
* 可手动拍照;
|
||
|
||
#### 1.2.2.2. 相机文件
|
||
|
||
  对相机端的文件进行分类显示。可下载到手机本地/删除/编辑等操作。
|
||
|
||
<div style="text-align:center; width: 100%;">
|
||
<img src="./build/picture/device_local_files.png" alt="替代文本" style="text-align:center; width: 30%; height: auto; max-width: 400px; border: 2px solid black;">
|
||
<h5 style="text-align: center;">设备端相册图示</h5>
|
||
</div>
|
||
|
||
##### 1.2.2.2.1. 设备端文件分类
|
||
|
||
1. PIR触发图片/视频;
|
||
2. 手动抓拍图片/视频;
|
||
3. 定时抓拍图片/视频;
|
||
4. 全部文件;
|
||
|
||
**文件分类整改方案:**
|
||
|
||
  目前APP支持的四种协议类型显示:循环/拍照/紧急/停车。打猎相机的分类定义为全部/PIR/手动/定时,根据协议进行一一对应回复,全部-循环,PIR-紧急,手动-拍照,定时-停车,在不修改协议的情况下,只需要修改APP的显示文字即可实现APP定制开发。
|
||
|
||
##### 1.2.2.2.2. 相机设置
|
||
|
||
  对设备的参数进行读取/修改。目前基于记录仪产品的设置内容无法满足打猎机产品需求。
|
||
|
||
<div style="text-align:center; width: 100%;">
|
||
<img src="./build/picture/settings.png" alt="替代文本" style="text-align:center; width: 30%; height: auto; max-width: 400px; border: 2px solid black;">
|
||
<h5 style="text-align: center;">相机设置图示</h5>
|
||
</div>
|
||
|
||
**记录仪当前参数列表:**
|
||
|
||
| 参数名称 | 数据类型 | 取值说明 | 公版支持 | 备注 |
|
||
| ---- | ---- | ---- | ---- | ---- |
|
||
| 记录仪WiFi名称 | ---- | ---- | 支持 | ---- |
|
||
| 记录仪WiFi密码 | ---- | ---- | 支持 | ---- |
|
||
| 固件版本 | ---- | ---- | 支持 | ---- |
|
||
| 格式化存储卡 | ---- | ---- | 支持 | ---- |
|
||
| 恢复出厂设置 | ---- | ---- | 支持 | ---- |
|
||
|
||
**打猎机参数需求列表:**
|
||
|
||
  **下述列表中,未支持的设置项作为标准设置项需求,APP在切换语言时需要做对应的翻译。**
|
||
|
||
| 参数名称 | 数据类型 | 取值说明 | 公版支持 | 备注 |
|
||
| ---- | ---- | ---- | ---- | ---- |
|
||
| 记录仪WiFi名称 | ---- | ---- | 支持 | ---- |
|
||
| 记录仪WiFi密码 | ---- | ---- | 支持 | ---- |
|
||
| 固件版本 | ---- | ---- | 支持 | 仅显示 |
|
||
| ---- | ---- | ---- | ---- | ---- |
|
||
| 电量 | ---- | ---- | 未支持 | 仅显示 |
|
||
| 工作模式 | 数字 | 0:图片<br>1:图片+视频 | 未支持 | ---- |
|
||
| 连拍|数字 | 1/2/3 | 未支持 | 单位:P |
|
||
| 连拍间隔 | 数字 | 0~60 | 未支持 | 单位:s |
|
||
| 图片大小 | 数字 | 8/16/24/32/40 | 未支持 | 单位:M |
|
||
| 录像分辨率 | 数字 | 0:WVGA<br>1:HD<br>2:FHD | 未支持 | ---- |
|
||
| 录像帧率 | 数字 | 15/30 | 未支持 | 单位:fps |
|
||
| 视频长度 | 数字 | 10/15 | 未支持 | 单位:s |
|
||
| PIR延时 | 时间 | 00:00:00-23:59:59 | 未支持 | 两个PIR之间的最小间隔 |
|
||
| 定时工作 | 时间 | 00:00:00-23:59:59 | 未支持 | 定时唤醒 |
|
||
| 工作时间 | 时间 | 起始的时间设置<br>例如:起点20:00至终点6:00 | 未支持 | ---- |
|
||
| 循环存储 | 数字 | 0:OFF<br>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<br>0 - 关<br>1 - 开 | 只能设置开/关 |
|
||
| 数字输入框 | 数字(带单位/取值范围) | 协议指定取值范围 | 手动输入 |
|
||
| 任意输入框 | 无限制 | 无限制 | 手动输入任意字符 |
|
||
| 时间 | 时间 | ---- | 设置时间 |
|
||
| 功能 | 功能按钮 | 取消/确定 | 例如:格式化/恢复出厂/重启<br>可通过协议自由定义,协议带显示字符 |
|
||
| 选项 | 数字 | ---- | 协议带选项对应的文字字符 |
|
||
|
||
### 1.4.2. 动态渲染设置界面
|
||
|
||
#### 1.4.2.1. 新增动态设置参数协议
|
||
|
||
**获取动态设置参数列表**
|
||
|
||
| | |
|
||
| ---- | ---- |
|
||
| 描述 | 获取动态设置参数列表。 |
|
||
| 接口 | http://192.168.1.100/app/getdynamicparam |
|
||
| 参数 | ?index=all&language=xx // 获取全部动态设置参数<br>?index=6&language=xx // 获取索引号为6的动态设置参数 |
|
||
| 参数说明 | index:设置项索引,all代表全部<br>language:APP当前语言,由六帧探定义值,设备根据该值回传对应语言的字符串 |
|
||
| 返回参数 | result:0-成功,-1-失败<br>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 | 控件类型:<br>label-字符串,仅显示内容,无法修改<br>inputnum-数字<br>switch-开关(0-关,1-开) <br>inputstring-任意字符(数字/字母/常见字符)输入<br>time-时间设置<br>comfirm-功能按钮(确认框)<br>option-选项设置 |
|
||
| value | ---- | 当前值,类型根据type定义来确定 |
|
||
| length | int | 输入框的长度限制 |
|
||
| unit | String | 单位,如果有则在APP界面显示 |
|
||
| index | int | 索引值,设备使用,根据索引值知道修改哪个参数 |
|
||
|
||
**动态设置项设置协议**
|
||
|
||
| | |
|
||
| ---- | ---- |
|
||
| 描述 | 动态设置项设置协议 |
|
||
| 接口 | http://192.168.1.100/app/dynamicparamset |
|
||
| 参数 | ?index=1&value=0123456789 // 数字输入框<br>?index=2&value=0 // 开关,0-关,1-开<br>?index=3&value=0123abcDEF!@# // 任意字符输入框<br>?index=4&value=23:59:59 // 时间<br>?index=5&value=0 // 0-取消;1-确认 <br>?index=6&value=1 // 0-Option0,1-Option1,以此类推 |
|
||
| 返回参数 | result:0-成功,-1-失败<br>返回成功后重新获取动态参数显示 |
|
||
|
||
**动态设置项设置返回示例:**
|
||
|
||
```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版本?
|