5.1 设备升级
5.1.1 功能介绍
局域网下平台/客户端/Web通过ISAPI协议,对设备进行升级。
5.1.2 集成流程
以平台为例,对设备进行升级如下:
对设备固件升级 POST /ISAPI/System/updateFirmware ;
获取设备升级的进度 GET /ISAPI/System/upgradeStatus ;
重启设备 PUT /ISAPI/System/reboot 。
5.2 时间校时
5.2.1 功能介绍
时间校时是指针对网络内所有具有时钟的设备进行时钟同步,使网络内所有设备的时钟保持一致,从而使
设备能够提供基于统一时间的多种应用。当前支持的校时类型有:NTP校时、手动校时、卫星校时、萤石平台校时、GB28181校时等。当前重点说明下NTP的校时原理:
5.2.1.1 NTP校时
运行NTP的本地系统,既可以接收来自其他时钟源的同步(自身作为客户端),又可以作为时钟源同步其他的时钟(自身作为服务端),并且可以和其他设备互相同步。
NTP的基本工作原理如图所示。Device A和Device B通过网络相连,它们都有自己独立的系统时钟,需要通过NTP实现各自系统时钟的自动同步。为便于理解,作如下假设:
在Device A和Device B的系统时钟同步之前,Device A的时钟设定为10:00:00am,Device B的时
钟设定为11:00:00am。
Device B作为NTP时间服务器,即Device A将使自己的时钟与Device B的时钟同步。
NTP报文在Device A和Device B之间单向传输所需要的时间为1秒。
系统时钟同步的工作过程如下:
Device A发送一个NTP报文给Device B,该报文带有它离开Device A时的时间戳,该时间戳为
10:00:00am(T1)。
当此NTP报文到达Device B时,Device B加上自己的时间戳,该时间戳为11:00:01am(T2)。
当此NTP报文离开Device B时,Device B再加上自己的时间戳,该时间戳为11:00:02am(T3)。
当Device A接收到该响应报文时,Device A的本地时间为10:00:03am(T4)。
至此,Device A已经拥有足够的信息来计算两个重要的参数:
NTP报文的往返时延Delay=(T4-T1)-(T3-T2)=2秒。
Device A相对Device B的时间差offset=((T2-T1)+(T3-T4))/2=1小时。
这样,Device A就能够根据这些信息来设定自己的时钟,使之与Device B的时钟同步。
……
5.3.1.2 事件消息语法
触发监听报警事件之后,报警分为携带二进制数据(如图片)和不携带二进制数据。
不携带二进制数据:
设备发送数据HTTP请求Headers中的Content-Type 通常为application/xml 或
application/json ,示例如下。
设备发送报警报文
POST Request_URI HTTP/1.1 <!--/Request_URI,来自于URI(POST
/ISAPI/Event/notification/httpHosts)的创建 -->
Host: data_gateway_ip:port <!--Host:指定设备访问的http服务器的域名/IP 地址和端口号,此
处来自于URI(POST /ISAPI/Event/notification/httpHosts)的创建,根据实际情况填充;-->
Accept-Language: zh-cn
Date: YourDate
Content-Type: application/xml; <!--部分报警走json格式,所以要求上层解析的时候,根据
Content-Type字段进行区分-->
Content-Length: text_length
Connection: keep-alive <!--设备端与接收服务端保持长连接,提升传输性能-->
<EventNotificationAlert/>
监听主机应答
HTTP/1.1 200 OK
Date: YourDate
Connection: close
携带二进制数据:
设备发送数据的格式为HTTP表单格式(multipart/form-data)。HTTP请求Headers中的Content-
Type 通常为multipart/form-data, boundary=<frontier> ,其中boundary是一个变量,用于将整
个HTTP Body分割成多个单元,每个单元为一份数据,都有各自的Headers和body。详细格式说明参
考RFC 1867 (Form-based File Upload in HTML),示例如下,请注意boundary前面和后面的横线-- 。
设备发送报警报文
POST Request_URI HTTP/1.1 <!--Request_URI,来自于URI(POST
/ISAPI/Event/notification/httpHosts)的创建-->
Host: device_ip:port <!--Host:指定设备访问的http服务器的域名/IP 地址和端口号,此处来自于
URI(POST /ISAPI/Event/notification/httpHosts)的创建,根据实际情况填充;-->
Accept-Language: zh-cn
Date: YourDate
Content-Type: multipart/form-data;boundary=<frontier>
Content-Length: text_length
Connection: keep-alive <!--设备端与接收服务端保持长连接,提升传输性能-->
--<frontier>
Content-Disposition: form-data; name="Event_Type"
Content-Type: text/xml <!--部分报警走json格式,所以要求上层解析的时候,根据Content-Type
字段进行区分-->
<EventNotificationAlert/>
--<frontier>
Content-Disposition: form-data; name="Picture_Name"
Content-Length: image_length
Content-Type: image/jpeg
[图片数据]
--<frontier>--
监听主机应答
HTTP/1.1 200 OK
Date: YourDate
Connection: close
……