1. 概述
Sigmstar当前是记录仪行业的主流SOC之一,原厂提供了基本协议框架和标准,但在落地是各个方案商有一定的扩展,给APP的适配带来了一定的复杂性;
由于记录仪行业的业务本质上是可以标准化的,故本文档会拟定一个‘6帧探’适配的标准文档,如果有方案商想采用本APP作为公版使用的,有统一的标准将会带来双方更大适配便利性,也会给行业带来更大的效率提升;
2. 标准适配
标准适配分为三类:
- 视频流播放的标准化:进行预览的协议格式、回放的文件格式等;
- 控制命令的标准化:进行拍照、录像、设置项的查询和设置;
- 事件通知的标准化:设备发生事件变化,比如TF插拔等;
2.1 视频预览协议和地址
视频预览当前支持RTSP协议,编码格式支持H.264(推荐)、H.265、MJPEG; 播放器使用RTSP地址进行预览码流的播放,样例如下:
rtsp://192.168.1.1/liveRTSP/av4
根据对接经验,这个地址不同方案商、不同设备型号、以及同一个设备的前后路都可能不一样:
当前RTSP地址的定义标准如下:
2.1.1 单路摄像头:
从接口“Camera.Preview.*”中进行查询:
http://192.168.1.1/cgi-bin/Config.cgi?action=get&property=Camera.Preview.* 0 OK Camera.Preview.RTSP.av=4 Camera.Preview.Source.1.Camid=front
其中:
- Camera.Preview.RTSP.av指定当前预览的av通道;对应的值将会作为RTSP协议的参数,当前对应关系如下:
"1":av1
"2":v1
"3":av2
"4":av4
"5":v3
"6":v2
如果有需要,可以通知我们继续补充对应关系
比如:
“Camera.Preview.RTSP.av=3” 对应RTSP地址为:rtsp://192.168.1.1/liveRTSP/av2
“Camera.Preview.RTSP.av=4” 对应RTSP地址为:rtsp://192.168.1.1/liveRTSP/av4
2.1.2 双路摄像头
是否支持双路摄像头现在有两种机制,选其一即可:
- 方式一:通过Camera.Menu.中查询到的key:Camera.Menu.RearStarus的值判断:*ON-设备有后路镜头,OFF-设备没有后路镜头;
http://192.168.1.1/cgi-bin/Config.cgi?action=get&property=Camera.Menu.*
……
Camera.Menu.RearStarus=OFF
……
- 方式二: 通过接口“Camera.Preview.*”中进行查询
如果 Camera.Preview.RTSP.av 的值有两个,则认为当前有两路摄像头:
http://192.168.1.1/cgi-bin/Config.cgi?action=get&property=Camera.Preview.*
0
OK
Camera.Preview.RTSP.av=4/5
Camera.Preview.Source.1.Camid=front
- 对应的RTSP地址根据av=4/5的顺序来区分,分别对应av的值:
- 前路镜头的播放地址front:rtsp://192.168.1.1/liveRTSP/av4
- 后路镜头的播放地址rear:rtsp://192.168.1.1/liveRTSP/av5
注意:当前是在看哪一路,app需要从设备查询获取到,Camera.Preview.*中返回的Camid中指示当前观看:
- Camera.Preview.Source.1.Camid指定当前的是前路还是后路, front为前路, rear为后路,单镜头设备默认为font;
2.1.3 多路摄像头
当前多路的场景越来越多,该方案是对上述方案的补充,最终>=2路的摄像头都可以采用此方案
1. 查询
通过接口“Camera.Preview.*”中进行查询
如果 Camera.Preview.RTSP.av 的值有>=2个,则认为当前有多路摄像头
http://192.168.1.1/cgi-bin/Config.cgi?action=get&property=Camera.Preview.*
0
OK
Camera.Preview.RTSP.av=4/5/7/8/9
Camera.Preview.Source.1.Camid=front
Camera.Preview.RTSP.av=4/5/7/8/9中av的值以"/"分割,有几个值就表示当前有几个摄像头,比如上面有4、5、7、8、9 五个值,就是5个摄像头;
Camera.Preview.Source.1.Camid=front Camid的值是哪个表示当前app正常预览的时哪路摄像头;其中注意点:
- 切换摄像头时的指令参数:前三个摄像头固定为 fornt、rear、mid,大于三路的部分用AV的值,比如上8、9 ,切换摄像头指令:
- 预览RTSP地址的指令参数为av对应的值;
举例:
//第1个摄像头
setcamid&property=Camera.Preview.Source.1.Camid&value=front // 切换摄像头指令
rtsp://ip/liveRTSP/av4 // rtsp播放地址
//第2个摄像头
setcamid&property=Camera.Preview.Source.1.Camid&value=rear
rtsp://ip/liveRTSP/av5
//第3个摄像头
setcamid&property=Camera.Preview.Source.1.Camid&value=mid
rtsp://ip/liveRTSP/av7
//第4个摄像头
setcamid&property=Camera.Preview.Source.1.Camid&value=8
rtsp://ip/liveRTSP/av8
//第5个摄像头
setcamid&property=Camera.Preview.Source.1.Camid&value=9
rtsp://ip/liveRTSP/av9
2. 摄像头插拔变化
通过udp的socket(端口是49142),推送消息:
CAM_NUM_CHANGE=4
其中‘4’,是当前变化后的摄像头总个数;收到该消息后,app会主动查询get&property=Camera.Preview.*,获取当前最新摄像头的情况和当前预览的摄像头ID;
3. 文件列表的获取
当文件列表获取仅支持4路获取,分别对应的字段是dir、reardir、middir、outsidedir,超过4路的,暂时不支持文件列表的获取;
action=dir&property=Normal&format=all&backward=1&count=20&from=0
action=reardir&property=Normal&format=all&backward=1&count=20&from=0
action=middir&property=Normal&format=all&backward=1&count=20&from=0
action=outsidedir&property=Normal&format=all&backward=1&count=20&from=0
其中:
dir:前路
reardir:后路
middir:中路
outsidedir:对外(第4路)
2.3 视频回放
视频回放是指APP不用先下载视频,直接播放TF卡上的视频文件,这块的要求主要以下几点,基本上目前方案商都满足:
- 设置支持http server,且server支持http range;
- 如果是MP4格式的文件,最好将moov的box放在文件头部,而不是文件尾部,这样会加快播放器获取MP4文件索引信息;
目前我们支持的视频格式有:MP4(推荐)、TS、MOV、AVI,其中只有MP4支持文件编辑,APP内部有文件封装转化功能,当前会自动转换TS到MP4;
2.4 接口命令的标准化
进行拍照、录像、设置项的查询和设置;
接口的组成部分:
操作类型: get / set
操作的属性:
- 查询类(get):比如:property=Camera.Menu.SDInfo,带上“Camera.Menu.” 前缀;
- 设置类(set):比如:property=Video&value=recordoff; 指定操作的属性key和对应的value;
样例如下:
2.4.1 查询类的接口样例
请求:
http://192.168.1.1/cgi-bin/Config.cgi?action=get&property=Camera.Menu.SDInfo
响应:
0
OK
Get SD Status
SD0INFO=1
Camera.Menu.SDInfo=ON
注意:响应内容的格式分为三类:
1) 0:对应该请求的错误码,如果正常返回,返回0,非0,表示该接口异常(比如不支持该命令) 2) OK:为响应结果的文字描述,当前APP未使用; 3) 结果信息:以key=value的形式,每行一个值,如果有多个值用多行表示; APP在处理时,会首先解析第一行(固定在第一行)的值是否为0 或 非0 的数字;然后解析剩余行是否有key-value这种结构,如果有则进行解析,其他非key-value结构的行app不解析,不处理;
2.4.2 操作类的接口样例
样例:停止录像
请求:
http://192.168.1.1/cgi-bin/Config.cgi?action=set&property=Video&value=recordoff
响应:
0
OK
注意:操作类接口只关注第一行(固定第一行):对应该请求的错误码,如果正常返回,返回0,非0,表示该操作异常;对应操作失败;
2.5 接口标准定义
APP和设备命令操作对接涉及到两个变化的点需要对齐,标准化旨在对齐这些变化的点:
- 设置或查询操作的“属性key”,比如上面停止录像中的property=Video中的Video;
- 设置或查询操作对应的”选项参数“,比如对录像操作的参数: recordon/recordoff; 循环录制的时长参数 : "1MIN", "3MIN", "5MIN"
2.5.1 两种接口对接方式
2.5.1.1 对接方式的区别
注意:当前Sigmstar的接口定义有两种方式:
- 方式一(推荐):设备端在cammenu.xml中定义,这种方式设备端可以灵活定义设置项的“选项参数”值,比如:循环录制文件时长参数,A设备是 1,3,5分钟;B设备是1,2,3分钟,这种不同的设备需求,cammenu.xml中定义不同即可,APP根据连接的不同设备中的cammenu.xml的定义来给用户显示和对设备进行设置操作;
- 方式二:APP端写死所有的设置项的“属性key” 和 ”选项参数“; APP和设备端定义必须完全一一对应,且这些项的字符串完全一致,功能才能正常;本文档的一个很重要的作用就是规范大家都定义成一致,让功能能够正常运行起来;
方式一也是有约束的,设备可以灵活定义设置中 ”选项参数“,但是设置项本身的”属性key“要和本规范文档定义一致;
方案二是”选项参数“和设置项本身的”属性key“这两点都要完全一致,功能才正常;
我们用设置项[循环录制时长]举例如下:
A设备中cammenu.xml的定义:
<menu title="LOOPING VIDEO" id="LoopingVideo"> <item id="1MIN">1 min</item> <item id="3MIN">3 min</item> <item id="5MIN">5 min</item> </menu>
这里面的‘LoopingVideo’必须要和本文档规范定义一致;但是其中的item设备可以灵活定义,比如例子中B设备可以改为1,2,3MIN,APP也能正确适配:
<menu title="LOOPING VIDEO" id="LoopingVideo"> <item id="1MIN">1 min</item> <item id="3MIN">2 min</item> <item id="5MIN">3 min</item> </menu>
如果是方案二,APP端写死的:"1MIN", "3MIN", "5MIN",则APP显示给用户和下发给设备的参数就固定为 "1MIN", "3MIN", "5MIN",B设备侧无法自行灵活修改这个”选项参数“列表;
所以我们推荐方案商后面采用方式一来和APP进行对接;如果方案商采用方式二,且和下面的文档规范定义不一致的,需要联系我们单独进行适配处理;
2.5.1.2 对接方式的选择
方式一满足的条件:
菜单Camera.Menu.menuXML = ON ;
如果上述两点满足,我们则认为使用方式一对接接口;否则是采用方式二(按APP上固定的“属性key” 和 ”选项参数“)进行对接;
举例:
http://192.168.1.1:80/cgi-bin/Config.cgi?action=get&property=Camera.Menu.*
……
Camera.Menu.menuXML=ON
……
下载的cammenu.xml内容样例:
<?xml version="1.0"?> <camera xmlns="urn:schemas-ait-dvr:device-1-0"> <version>0.1</version> <menu title="VIDEO RESOLUTION" id="Videores"> <!-- 录制分辨率/帧率 --> <item id="1080P30fps">1080P 30fps</item> <item id="720P30fps">720P 30fps</item> </menu> <menu title="CAPTURE RESOLUTION" id="Imageres"> <!-- 照片像素 --> <item id="3M">3M Pixels</item> <item id="2M">2M Pixels</item> <item id="1D2M">1.2M Pixels</item> </menu> <menu title="SoundRecord" id="SoundRecord"> <!-- 麦克风 --> <item id="OFF">OFF</item> <item id="ON">ON</item> </menu> <menu title="Volume" id="Volume"> <!-- 外放音量 --> <item id="OFF">OFF</item> <item id="LOW">LOW</item> <item id="MID">MID</item> <item id="HIGH">HIGH</item> </menu> <menu title="VoiceControl" id="VoiceControl"> <!-- 声控开关 --> <item id="OFF">OFF</item> <item id="ON">ON</item> </menu> <menu title="LOOPING VIDEO" id="LoopingVideo"> <!-- 循环录影 --> <item id="1MIN">1 min</item> <item id="3MIN">3 min</item> <item id="5MIN">5 min</item> </menu> <menu title="Timelapse fps" id="Timelapse"> <!-- 缩时录影帧率 --> <item id="OFF">OFF</item> <item id="1SEC">1 FPS</item> <item id="2SEC">1/2 FPS</item> <item id="4SEC">1/4 FPS</item> </menu> <menu title="Timelapse time" id="TimelapseTime"> <!-- 缩时录影时间 --> <item id="2H">2 h</item> <item id="8H">8 h</item> <item id="12H">12 h</item> <item id="24H">24 h</item> </menu> <menu title="GSensor" id="GSensor"> <!-- Gsensor灵敏度 --> <item id="OFF">off</item> <item id="LEVEL0">low</item> <item id="LEVEL2">mid</item> <item id="LEVEL4">high</item> </menu> <menu title="Parking" id="Parking"> <!-- 停车监控 --> <item id="OFF">OFF</item> <item id="LEVEL0">low</item> <item id="LEVEL1">mid</item> <item id="LEVEL2">high</item> </menu> <menu title="Flicker" id="Flicker"> <!-- 光源频率 --> <item id="50HZ">50HZ</item> <item id="60HZ">60HZ</item> </menu> <menu title="SpeedUint" id="SpeedUint"> <!-- 速度单位 --> <item id="km/h">km/h</item> <item id="mph">mph</item> </menu> <menu title="RecStamp" id="RecStamp"> <!-- 时间水印 --> <item id="DATE">DATE</item> <item id="OFF">OFF</item> </menu> </camera>
2.5.2 接口字段定义
好了,上面已经清楚的说明两种对接方式,以及每种方式的约束点,下面来统一定义每个业务的“属性key” 和 ”选项参数“,其中方式一中的“选项参数” 可以灵活定义;
属性 | 命令功能 | 操作类型 | 备注 |
---|---|---|---|
同步日期时间 | TimeSettings | set | |
获取当前设备的SSID | Net.WIFI_AP.SSID | get/set | 返回当前设备wifi 的全ssid,和手机系统看到的wifi ssid一致 |
获取设备当前电量 | Camera.Battery.Level | get | 返回设备当前电池的电量值,[0-100] |
录像分辨率 | Videores | get/set | 如 |
拍照分辨率 | Imageres | get/set | |
录音开关 | SoundRecord | get/set | |
扬声器音量 | Volume | get/set | "0", "1", "5", "9" |
语音开关 | VoiceControl | get/set | |
录像文件时长 | LoopingVideo | get/set | |
缩时录影帧率 | Timelapse | get/set | |
停车监控时间 | TimelapseTime | get/set | |
碰撞感应灵敏度 | GSensor | get/set | 关闭;低;中;高 |
停车监控碰撞灵敏度 | PowerOnGSensor | get/set | 关闭;低;中;高 |
光源频率 | Flicker | get/set | |
速度单位 | SpeedUint | get/set | km/h,mph |
视频水印选项 | RecStamp | get/set | DATELOGO:时间和图标,DATE:时间,OFF:关闭 |
曝光补偿 | EV | get/set | |
视频编码格式 | EncodeType | get/set | H.264;H.265 |
低电压保护设置 | BatProtect | get/set | 设置电瓶电压门限,达到门限后设备自动关机 |
时间制式 | HoursType | get/set | "12H", "24H" |
设备语言 | Language | get/set | "SCHINESE", "ENGLISH" |
- 上面的每个字段对设备都是可选项,如果设备支持这个接口字段,请和文档描述的属性key和参数一致,详情见下面的描述;
2.5.2.1 同步日期时间
设置属性key:TimeSettings
操作类型:set
参数:年$月$日$时$分$秒,比如:2021$12$30$15$46$33
样例:
http://192.168.1.1/cgi-bin/Config.cgi?action=set&property=TimeSettings&value=2021$12$30$15$46$33 0 OK
2.5.2.2 查询设备WiFi的SSID
设置属性key:Net.WIFI_AP.SSID
读属性:Net.WIFI_AP.SSID
操作类型:get
响应消息:返回当前设备wifi 的全ssid,和手机系统看到的wifi ssid一致
样例:
http://192.168.1.1/cgi-bin/Config.cgi?action=get&property=Net.WIFI_AP.SSID 0 OK Net.WIFI_AP.SSID=CTD_I6-876788
2.5.2.3 查询设备当前电量
该接口一般用在运动相机上
读属性:Camera.Battery.Level
操作类型:get
响应消息:返回设备当前电池的电量值,[0-100]
样例:
http://192.168.1.1/cgi-bin/Config.cgi?action=get&property=Camera.Battery.Level 0 OK Camera.Battery.Level=28
2.5.2.3 获取设备的固件版本
读属性key:Camera.menu.FWVersion
操作类型:get
响应消息:设备当前的固件版本
样例:
http://192.168.1.1/cgi-bin/Config.cgi?action=get&property=Camera.menu.FWVersion 0 OK Camera.Menu.FWversion=V1.0.1_20210306
2.5.2.4 获取设备存储卡信息
存储卡的状态包含: 当前卡的插拔和健康状态;卡的容量情况;
这是个多属性合在一起返回的接口,所以使用的是CardInfo.*
读属性key:Camera.Menu.CardInfo.*
操作类型:get
响应消息:
- 返回卡状态status:
- NORMAL:正常,
- NEED_FORMAT:需要格式化,
- NONE:未插入卡
- 存储卡总容量:total, 单位:G/M ;注意:G 代表GB, M代表MB;
剩余容量: remain,单位:G/M
如果当前卡异常,无法得知容量时, 则total和remain都设置为0;
- 返回卡状态status:
样例:
http://192.168.1.1/cgi-bin/Config.cgi?action=get&property=Camera.Menu.CardInfo.* 0 OK Camera.Menu.CardInfo.CardStatus=NORMAL Camera.Menu.CardInfo.total=29.2G Camera.Menu.CardInfo.remain=789.2M
2.5.2.5 获取设备录像状态信息
读属性key:Camera.Preview.MJPEG.status.*
操作类型:get
响应消息:返回设备录像状态,其中key为:Camera.Preview.MJPEG.status.record,值为:Recording:正在录像,Standby:暂停录像
样例:
http://192.168.1.1/cgi-bin/Config.cgi?action=get&property=Camera.Preview.MJPEG.status.* 0 OK Camera.Preview.MJPEG.status.record=Recording
备注: 不同的方案商响应消息里面可能还有其他行的key-value,但只要有Camera.Preview.MJPEG.status.record=Recording即可,其他行app不关心,也不解析;
2.5.2.6 拍照
设置属性key:Video
操作类型:set
参数:capture
样例:
http://192.168.1.1/cgi-bin/Config.cgi?action=set&property=Video&value=capture 0 OK
2.5.2.7 开关录像
控制记录仪启动、停止录像的指令
设置属性key:Video
操作类型:set
参数:启动-recordon 、停止-recordoff
样例:
http://192.168.1.1/cgi-bin/Config.cgi?action=set&property=Video&value=recordon http://192.168.1.1/cgi-bin/Config.cgi?action=set&property=Video&value=recordoff 0 OK
2.5.2.8 普通心跳
每隔2秒发送一次,如果设备不需要,可以不用实现这个接口
设置属性key:Heartbeat
操作类型:set
参数:无
样例:
http://192.168.1.1/cgi-bin/Config.cgi?action=set&property=Heartbeat 0 OK
2.5.2.9 预览心跳
部分设备需要在预览时发送心跳命令,否则设备端预览会自动停止,这个取决于设备,如果设备有这样的需求,按这个接口的字段对齐
设置属性key:StreamStatus
操作类型:set
参数:ON (固定这个参数)
样例:
http://192.168.1.1:80/cgi-bin/Config.cgi?action=set&property=StreamStatus&value=ON 0 OK
2.5.2.10 录制分辨率
操作当前循环视频录制的分辨率,当前这个是变化最多的接口,公版接口只定义 :"1080P30", "720P30"两种,
设置属性key:Videores
读属性key:Camera.Menu.VideoRes
操作类型:set
参数:"1080P30", "720P30"
样例:
http://192.72.1.1/cgi-bin/Config.cgi?action=set&property=Videores&value=720P30 0 OK
注意:该指令在menu.中对应的key是:Camera.Menu.*VideoRes (R的大小写不一样)
2.5.2.11 拍照分辨率
拍照操作保存在设备上的照片的分辨率设置
设置属性key:Imageres
读属性key:Camera.Menu.ImageRes
操作类型:set
参数:"1.2MP", "2MP"
样例:
``` http://192.72.1.1/cgi-bin/Config.cgi?action=set&property=Imageres&value=2MP
0 OK
注意:该指令在menu.中对应的key是:Camera.Menu.*ImageRes (R的大小写不一样)
2.5.2.12 录制视频编码方式
选择视频的编码方式:H.264 、H.265
设置属性key:EncodeType
读属性key:Camera.Menu.EncodeType
操作类型:set
参数:"H264", "H265"
样例:
http://192.72.1.1/cgi-bin/Config.cgi?action=set&property=EncodeType&value=H265 0 OK
2.5.2.13 碰撞感应灵敏度
行车过程中,车辆发生碰撞后的自动锁档视频的灵敏度设置
设置属性key:GSensor
读属性key:Camera.Menu.GSensor
操作类型:set
参数:"OFF", "LEVEL0", "LEVEL2", "LEVEL4" 分别对应 关闭、低、中、高
样例:
http://192.72.1.1/cgi-bin/Config.cgi?action=set&property=GSensor&value=LEVEL0 0 OK
2.5.2.14 循环录制文件的时长
循环录制视频文件的单个文件的最大时长
设置属性key:LoopingVideo
读属性key:Camera.Menu.LoopingVideo
操作类型:set
参数:"1MIN", "3MIN", "5MIN"
样例:
http://192.72.1.1/cgi-bin/Config.cgi?action=set&property=LoopingVideo&value=1MIN 0 OK
2.5.2.15 停车监控
是否开启停车监控,是个开关
设置属性key:ParkingGuard
读属性key:Camera.Menu.ParkingGuard
操作类型:set
参数:ON/OFF
样例:
http://192.72.1.1/cgi-bin/Config.cgi?action=set&property=ParkingGuard&value=ON 0 OK
2.5.2.16 停车监控碰撞感应灵敏度
在停车监控时,发生车辆碰撞的检测灵敏度
设置属性key:ParkingMonitor
读属性key:Camera.Menu.ParkingMonitor
操作类型:set
参数:"LEVEL2", "LEVEL1", "LEVEL0", "OFF", 分别对应 高、中、低、关闭
样例:
http://192.72.1.1/cgi-bin/Config.cgi?action=set&property=ParkingMonitor&value=LEVEL1 0 OK
2.5.2.17 停车监控时长
在停车监控时,会消耗车辆电瓶的电量,通过此处定义监控的时长,停车监控室,时长到了之后设备会自动关机
设置属性key:TimelapsePowerOff
读属性key:Camera.Menu.TimelapsePowerOff
操作类型:set
参数:"OFF", "12H", "24H"
样例:
http://192.72.1.1/cgi-bin/Config.cgi?action=set&property=TimelapsePowerOff&value=12H 0 OK
2.5.2.18 缩时录影的帧率
在停车监控时,部分设备会采用缩时录影的方式,其录制的帧率通过该项进行设置
设置属性key:Timelapse
读属性key:Camera.Menu.Timelapse
操作类型:set
参数:"OFF", "1fps/s", "2fps/s", "5fps/s"
样例:
http://192.72.1.1/cgi-bin/Config.cgi?action=set&property=Timelapse&value=1fps/s 0 OK
2.5.2.19 视频水印选项
视频中是否叠加水印
设置属性key:RecStamp
读属性key:Camera.Menu.RecStamp
操作类型:set
参数:"DATE", "DATELOGO", "OFF" ,说明:DATELOGO-水印上有时间和logo图标,DATE-水印上只有时间,OFF-视频上不叠加水印
样例:
http://192.72.1.1/cgi-bin/Config.cgi?action=set&property=RecStamp&value=DATELOGO 0 OK
2.5.2.20 视频曝光度
设置属性key:Exposure
读属性key:Camera.Menu.EV
操作类型:set
参数:"EVN200", "EVN167", "EVN133", "EVN100", "EVN067", "EVN033", "EV0", "EVP033", "EVP067", "EVP100", "EVP133", "EVP167",
"EVP200"
对应的显示项为: "-2.0", "-1.6", "-1.3", "-1.0", "-0.6", "-0.3", "+0.0", "+0.3", "+0.6", "+1.0", "+1.3", "+1.6", "+2.0"
样例:
http://192.72.1.1/cgi-bin/Config.cgi?action=set&property=Exposure&value=EV0 0 OK
注意:该指令在menu.中对应的key是:Camera.Menu.*EV (和写属性不一样)
2.5.2.21 mic录音
是否对循环录制的视频进行静音
设置属性key:SoundRecord
读属性key:Camera.Menu.SoundRecord
操作类型:set
参数:"OFF", "ON"
样例:
http://192.72.1.1/cgi-bin/Config.cgi?action=set&property=SoundRecord&value=ON 0 OK
2.5.2.22 扬声器音量
对设备的扬声器的音量大小进行设定
设置属性key:Volume
读属性key:Camera.Menu.Volume
操作类型:set
参数:"0", "1", "5", "9",对应显示项:静音、低、中、高
样例:
http://192.72.1.1/cgi-bin/Config.cgi?action=set&property=Volume&value=5 0 OK
2.5.2.23 按键音
带屏的机器一般会有物理按键,其按键时是否播放按键音此处设置
设置属性key:Tone
读属性key:Camera.Menu.Tone
操作类型:set
参数:"OFF", "ON"
样例:
http://192.72.1.1/cgi-bin/Config.cgi?action=set&property=Tone&value=ON 0 OK
2.5.2.24 光源频率
设置光源频率
设置属性key:Flicker
读属性key:Camera.Menu.Flicker
操作类型:set
参数:"50Hz", "60Hz"
样例:
http://192.72.1.1/cgi-bin/Config.cgi?action=set&property=Flicker&value=50Hz 0 OK
2.5.2.25 声控开关
是否启用语音控制设备的功能
设置属性key:VoiceControl
读属性key:Camera.Menu.VoiceControl
操作类型:set
参数:"OFF", "ON"
样例:
http://192.72.1.1/cgi-bin/Config.cgi?action=set&property=VoiceControl&value=ON 0 OK
2.5.2.26 图像翻转
是指图像360度翻转
设置属性key:UpsideDown
读属性key:Camera.Menu.UpsideDown
操作类型:set
参数:"OFF", "ON"
样例:
http://192.72.1.1/cgi-bin/Config.cgi?action=set&property=UpsideDown&value=ON 0 OK
2.5.2.27 速度单位
主要是针对海外客户的GPS机型使用
设置属性key:SpeedUint
读属性key:Camera.Menu.SpeedUint
操作类型:set
参数:"km/h", "mph"
样例:
http://192.72.1.1/cgi-bin/Config.cgi?action=set&property=SpeedUint&value=mph 0 OK
2.5.2.28 低电压保护设置
针对接车辆电瓶的场景,设置保护电源,达到后设备会自动关机,以保护车辆电瓶不亏电
设置属性key:BatProtect
读属性key:Camera.Menu.BatProtect
操作类型:set
参数:"LEVEL0", "LEVEL1", "LEVEL2";分别对应的显示项为:"LOW(11.8V)", "MIDDLE(12.0V)", "HIGH(12.2V)"
样例:
http://192.72.1.1/cgi-bin/Config.cgi?action=set&property=BatProtect&value=LEVEL1 0 OK
2.5.2.29 格式化
设置属性key:SD0
操作类型:set
参数:format
样例:
http://192.168.1.1/cgi-bin/Config.cgi?action=set&property=SD0&value=format 0 OK
2.5.2.30 恢复出厂设置
设置属性key:FactoryReset
操作类型:set
参数:FactoryReset
样例:
http://192.168.1.1/cgi-bin/Config.cgi?action=set&property=FactoryReset&value=FactoryReset 0 OK
2.5.2.31 修改WiFi名称
需要重启WiFi才会生效
设置属性key:Net.WIFI_AP.SSID
操作类型:set
参数:用户新输入的ssid
样例:
http://192.168.1.1/cgi-bin/Config.cgi?action=set&property=Net.WIFI_AP.SSID&value=NewSSID 0 OK
2.5.2.32 修改WiFi密码
设置属性key:Net.WIFI_AP.CryptoKey
操作类型:set
参数:用户新输入的密码
样例:
http://192.168.1.1/cgi-bin/Config.cgi?action=set&property=Net.WIFI_AP.CryptoKey&value=12345678 0 OK
2.5.2.33 重启WiFi
设置属性key:Net.Dev.1.Type
操作类型:set
参数:reset
样例:
http://192.168.1.1/cgi-bin/Config.cgi?action=set&property=Net.Dev.1.Type&value=AP&property=Net&value=reset 0 OK
2.5.2.34 HDR
HDR
设置属性key:Hdr
读属性key:Camera.Menu.HDR
操作类型:set
参数:"OFF", "ON"
样例:
http://192.72.1.1/cgi-bin/Config.cgi?action=set&property=Hdr&value=ON 0 OK
2.5.2.35 延时关机
断电后设备几秒后关机
设置属性key:PowerOffDelay
读属性key:Camera.Menu.PowerOffDelay
操作类型:set
参数:"OFF", "5SEC", "10SEC", "30SEC",对应显示项:关闭、5秒、10秒、30秒
样例:
http://192.72.1.1/cgi-bin/Config.cgi?action=set&property=PowerOffDelay&value=5SEC 0 OK
2.6 文件列表
2.6.1 文件数据结构
<file>
<name>/SD/Normal/F/FILE211229-163306F.MOV</name>
<format size="1920x1080" fps="30" time="60.0">MOV</format>
<size>92143616</size>
<attr>RW</attr>
<time>2021-12-29 16:33:06</time>
</file>
<file>
<name>/SD/Photo/F/IMG211228-195225F.JPG</name>
<format size="2304x1296">jpeg</format>
<size>196608</size>
<attr>RW</attr>
<time>2021-12-28 19:52:25</time>
</file>
- name: 文件的路径
- format: 当前使用了其中的 time子属性:文件时长,单位:秒
- size:文件大小,单位:Byte
- time:文件起始时间,视频数据结构中
中的time是视频时长
2.6.2 获取文件列表
APP会从设备上按文件获取文件列表,其文件类型如下:
Normal:普通循环录制视频;
Photo:拍照的图片
Event:紧急视频,由碰撞锁档产生的视频文件;
Parking:停车监控时的录制的视频文件,以下二选一
1. 如果有独立的文件夹,按Parking命名;
2.和Normal放在一起的:当前sigmstar的原始方案是不支持对停车监控进行分类的,当前满足app将停车监控从循环视频中分类出来的条件是:
文件名包含_T, 如FILE200712-145754F_T.MOV('_T'不区分大小)
前后路镜头的文件列表也是分开获取的:
- 前路:dir;
- 后路:reardir
上述前后路标记拼接在url中的action=dir字段,进行不同镜头的文件列表的获取,
样例:
http://192.168.1.1/cgi-bin/Config.cgi?action=dir&property=Normal&format=all&count=10&from=0 // 获取前路普通循环录制视频(Normal)文件
http://192.168.1.1/cgi-bin/Config.cgi?action=dir&property=Photo&format=all&count=10&from=0 // 获取前路图片(Photo)文件
http://192.168.1.1/cgi-bin/Config.cgi?action=dir&property=Event&format=all&count=10&from=0 // 获取前路紧急视频(Event)文件
http://192.168.1.1/cgi-bin/Config.cgi?action=reardir&property=Normal&format=all&count=20&from=10 // 获取后路普通循环录制视频(Normal)文件
http://192.168.1.1/cgi-bin/Config.cgi?action=reardir&property=Photo&format=all&count=20&from=10// 获取后路图片(Photo)文件
http://192.168.1.1/cgi-bin/Config.cgi?action=reardir&property=Event&format=all&count=20&from=10 // 获取后路紧急视频(Event)文件文件
2.6.3 获取文件缩略图
当前有两种规则拼接文件缩略图的方式,设备只要满足其中一种即可:
方式一:如果文件路径包含/SD/,将其中的SD替换成‘thumb’,然后拼接下载缩略图路径如下:
文件路径为:/SD/Normal/F/FILE211229-163306F.MOV,其中含有'SD',替换拼接后的缩略图下载路径为: http://192.168.1.1/thumb/Normal/F/FILE211229-163306F.MOV
方式二:文件路径中不含有‘SD’的,直接在文件路径前加‘/thumb’来拼接:
文件路径为:/mnt/mmc/Normal/F/REC20201214-114131-23.mp4,下载缩略图路径为: http://192.168.1.1/thumb/mnt/mmc/Normal/F/REC20201214-114131-23.mp4
2.6.4 删除文件
参数:文件列表中获取到的文件路径(name),其中分隔符'/'替换为‘$’,比如:$SD$Normal$F$FILE211229-163306F.MOV
样例:
http://192.168.1.1/cgi-bin/Config.cgi?action=del&property=$SD$Normal$F$FILE211229-163306F.MOV
2.7 事件通知的标准化说明
设备发生事件变化,如存储卡插拔等通过Socket(UDP,端口49142)实时上报给App
样例:
SD_STATUS = ON
支持的事件:
| 事件名称 | 关键字 | 状态说明 | | ---- | --- | ---- | | 卡状态 | SD_STATUS | ON:正常;OFF:卡异常,包括拔卡 | | 录像时长 | rec_time | 单位:毫秒,格式:action=rec_time\ntime=%d\n | | 加锁状态 | LockStatus | ON:加锁中;OFF:未加锁 | | 录像时录音状态 | SoundRecord | ON:录音;OFF:不录音 | | 设备将关机 | POWER | 不管返回什么,App都将断开连接 | | 设备关闭WiFi | WIFI | 不管返回什么,App都将断开连接 |
3. 其他
3.1 GPS相关协议
请联系我们,获取GPS协议文档
3.2 差异化适配
- 需要在设备代码中预置区分此类差异化设备的标识;
- 联系我们进行适配;
3.3 FAQ
3.3.1 怎么显示停车监控的文件夹内容?
参见 2.6.2 获取文件列表
3.3.2 怎么支持双路摄像头预览切换?
参见 2.1.2 双路摄像头
3.3.3 怎样让APP里面的某个设置项显示与否
公版app设置项显示的条件有两个:
从Camera.Menu.*中能查询到了对应的设置属性key;
- 如果是开关,该设置属性key对应的值是ON 或 OFF,则会显示该开关项,否则不显示;
- 如果是下拉选项,则需要比对key对应的value值是否在上面接口定义中参数范围内,如果在,则显示,如果不做参数列表内,则不显示该设置项
举例如下:
开关类:
http://192.168.1.1:80/cgi-bin/Config.cgi?action=get&property=Camera.Menu.* …… Camera.Menu.SoundRecord=ON ……
比如:mic录音这个设置开关,只有上面的Camera.Menu.*查询出了Camera.Menu.SoundRecord,且 值为 ON 或者 OFF中的其中一个,该设置项在app上才会出现,否则app会隐藏该设置项;
选项类:
http://192.168.1.1:80/cgi-bin/Config.cgi?action=get&property=Camera.Menu.* …… Camera.Menu.LoopingVideo=3MIN ……
比如:''循环录制时长''这个设置选项,只有上面的Camera.Menu.*查询出了Camera.Menu.LoopingVideo,且 值为 [1MIN,3MIN,5MIN]中的其中一个,该设置项在app上才会出现,否则app会隐藏该设置项;
3.3.4 预览有花屏(马赛克)怎么办?
如果预览是有低概率花屏,这是网络抖动造成的丢包,请设置RTSP底层通讯协议为TCP,通过以下方式返回tcp即可,当前APP默认会采用udp(因为发现有部分设备不支持tcp);如果已经是tcp还是花屏,请联系我们处理;
读属性key:Camera.Preview.RTSP.over
参数:"tcp", "udp"
样例:
http://192.168.1.1:80/cgi-bin/Config.cgi?action=get&property=Camera.Preview.RTSP.over …… Camera.Preview.RTSP.over=tcp ……
3.4 设备能力集查询
为更好的进行机器功能的适配,我们定义app需要的特定能力识别,以便APP自动进行部分功能适配,设备端根据真实的设备情况按下面的定义返回字符串;
读属性key:Camera.Menu.DeviceCapability
操作类型:get
返回值:"0100"
样例:
http://192.72.1.1/cgi-bin/Config.cgi?action=get&property=Camera.Menu.DeviceCapability 0 OK Camera.Menu.DeviceCapability=0100
其中String自动的每一位代表1个业务能力(方案商实现时,如果对某位的业务不支持或是不了解,默认填0):
第0位:GPS数据业务
- 0 不支持GPS
- 1 仅支持下载后的视频文件GPS数据获取;
- 2 支持下载后的视频文件、在线回放的视频文件GPS数据获取;
- 3 支持下载后的视频文件、在线回放的视频文件、实时画面GPS数据获取;
- 4 支持下载后的视频文件、实时画面GPS数据获取;
第1位:1-运动相机,0-记录仪(默认)
第2位:1-不支持停车监控相册,0-支持停车监控相册(默认)
第3位:1-该设备支持通过APP操作文件加锁,0-不支持(默认)
第4位:1- 不支持删除加锁文件;0-支持删除加锁文件(默认); 如果有需求不能删除加锁文件,修改此字段;
第5位:部分芯片拍照需要切换到拍照模式的,1- 不切换模式,直接录像码流抓拍,0-(默认)切换模式进行抓拍或是当前默认方式
第6位:回放是否使用rtsp的流,如果部分设备回放码率特别大,wifi传输会造成回放卡顿,需要使用rtsp播放小码流时,可以修改此字段(回放是否支持rtsp还需要设备端支持);
0-(默认)-不使用rtsp的流,使用文件下载播放的方式,
1- 使用RTSP的协议TCP播放回放实时流
2- 使用RTSP的协议UDP播放回放实时流;
第7位:是否支持拍照功能,0(默认)-支持拍照功能, 1- 不支持拍照,只支持录像;部分设备资源不够,不支持拍照功能时,修改此字段,app上将会隐藏拍照按钮;
第8位:是否支持APP修改wifi名或wifi密码
- 0(默认)- 支持修改WiFi名和WiFi密码,
- 1-不支持修改WiFi名,支持修改WiFi密码,此时WiFi名将会隐藏;
- 2-支持修改WiFi名,不支持修改WiFi密码,此时WiFi密码将会隐藏;
- 3.不支持修改WiFi名,且不支持修改WiFi密码,此时WiFi名和密码都将会隐藏;
第9位:0(默认)- 不支持文件拷贝,1-支持文件拷贝
第10位:是否使用其他非HTTP的方式下载设备视频文件,0(默认)-App自己决定下载策略,1-固定使用原厂sdk的方式下载设备视频文件,2-固定使用http下载设备视频文件,当前主要是针对杰理方案,非特殊需求,请使用默认值0
第n位:待补充
4.补充
如果缺少适配的方式,请联系我们进行补充到公版