# 事件订阅流程 服务端发送订阅请求 ```mermaid sequenceDiagram participant web端 participant 服务端 participant 设备 web端 -->> 服务端 : 配置订阅请求 服务端 ->> +设备 : 1. SUBSCRIBE 请求 订阅ai信息 设备 -->> -服务端 : 2. 回复订阅成功信息 par 设备录像或者拍照 设备 -->> +设备: 等待识别到指定ai信息 设备 -->> -设备: 识别结果规则匹配 end 设备 ->> +服务端 : 3. NOTIFY 识别到物体通知 服务端 -->> -设备 : 4. 回复收到信息 服务端 ->> 服务端 : 处理通知 服务端 ->> web端 : 推送识别到ai数据通知 ``` ### gb28181订阅示范 1:事件观察者向事件源发送SUBSCRIBE请求,请求消息体携带订阅参数; 2:事件源应将订阅成功与否的响应消息返回给该事件观察者。 服务端 -> 设备 ``` Via:SIP/2.0/UDP 事件观察者域名或IP地址 Max-Forwards:70 From:显示名;tag=BK32B1U8DKDrB To:显示名 Call-ID:17250 CSeq:1SUBSCRIBE Expires:90 Event:presence Content-type:Application/MANSCDP+XML Content-Length:消息实体的字节长度 Alarm 17430 64010000001340000001 1 4 0 2010-11-11T00:00:00 2010-12-11T00:00:00 ``` 设备 -> 服务端 ``` Via:SIP/2.0/UDP 事件观察者域名或IP地址 From:显示名;tag=BK32B1U8DKDrB To:显示名 Call-ID:17250 CSeq:1SUBSCRIBE Expires:90 Event:presence Content-type:Application/MANSCDP+XML Content-Length:消息实体的字节长度 Alarm 17430 64010000001340000001 OK ``` ### 事件通知消息示范 设备 -> 服务端 ``` Via:SIP/2.0/UDP 事件源域名或IP地址 Max-Forwards:70 From:显示名;tag=BK32B1U8DKDrB To:显示名 Call-ID:17250 CSeq:1NOTIFY Subscription-State:active;expires=90;retry-after=0 Event:presence Content-type:Application/MANSCDP+XML Content-Length:消息实体的字节长度 Alarm 1 64010000001340000001 4 2 2009-12-04T16:23:32 警情描述 171.3 34.2 ``` 服务端 --> 设备 ``` Via:SIP/2.0/UDP 事件源域名或IP地址 From:显示名;tag=BK32B1U8DKDrB To:显示名 Call-ID:17250 CSeq:1NOTIFY Content-type:Application/MANSCDP+XML Content-Length:消息实体的字节长度 Alarm 1 64010000001340000001 OK ``` ## 需求 1. 指定设备端启用的识别算法 - 人脸 - 火情 - 车牌 2. 根据指定规则触发人脸 - 根据特征码识别人脸 - 根据识别相似度 ## 订阅通知协议定义与数据获取方法 > 对订阅报警方法进行扩展,使用4级警情-报警条件为7来设定报警 ### 开始订阅 (服务端 -> 设备) 头数据 ``` Via:SIP/2.0/UDP 事件观察者域名或IP地址 Max-Forwards:70 From:显示名;tag=BK32B1U8DKDrB To:显示名 Call-ID:17250 CSeq:1SUBSCRIBE Expires:90 Event:presence Content-type:Application/MANSCDP+XML Content-Length:消息实体的字节长度 ``` xml数据结构 ```xml Alarm 17430 64010000001340000001 4 4 7 2010-11-11T00:00:00 2010-12-11T00:00:00 1 3 http://127.0.0.1/ http://127.0.0.1:8080/up 60 70.0 2 45.3 http://127.0.0.1:8080/fire 3 1 http://127.0.0.1/carList 60 65.3 ``` ### 订阅回复 (设备 -> 服务端) 头数据 ``` Via:SIP/2.0/UDP 事件观察者域名或IP地址 From:显示名;tag=BK32B1U8DKDrB To:显示名 Call-ID:17250 CSeq:1SUBSCRIBE Expires:90 Event:presence Content-type:Application/MANSCDP+XML Content-Length:消息实体的字节长度 ``` xml 结构体 ```xml Alarm 17430 64010000001340000001 OK ``` ## 设备端获取名单资源数据 设备端获取数据流程 ```mermaid graph TD a(开始检查数据) --> b[请求url] --> c{是否携带数据版本信息} c -->|否| d[服务端返回当前版本] --> a c -->|是| f{版本是否一致} f -->|否| e[返回版本号和数据] f -->|是| g[返回版本一致] --> 不更新数据 --> wait[等待] -->a e --> 更新数据 -->wait ``` ## 设备端触发通知 > 设备端在指定情况下推送消息到gb服务端 ```xml Alarm 1 64010000001340000001 4 7 2009-12-04T16:23:32 警情描述 171.3 34.2 3 65.3 x1,x2,y1,y2 1 85.0 1234 x1,x2,y1,y2 2 65.3 x1,x2,y1,y2 10086 ``` ## 通知设备ai库更新 update 17430 64010000001340000001 OK ## ai识别到的多媒体数据上传 > 摄像头会在识别时会有对应的图像或者录像数据,这部分得看怎么和通知绑定起来 1. 通过 http post 的方式上传文件,但是参数携带 MediaId ## http接口定义 ### 设备获取数据库列表 1. 接口地址 /aiLib/list/{libId} 2. 请求参数 | 字段 | 位置 | 必须? | 备注 | | --- | --- | --- | --- | | libId | path | y | 数据库id 由wvp平台下发指定 | | v | query | n | 数据库版本号 | | p | version | n | 页码 默认1 | | l | limit | n | 每页数量 默认50 | 3. 服务端返回数据结构 json | 字段 | 类型 | 备注 | |-------| --- |------------------------------| | code | int | 调用状态码 0:成功,携带指定数据 2:无版本号 | | v | string | 版本号 生成规则 hfy+随机uid,指定接口只有一个值 | | data | array | 识别名单列表,为0时存在 | | page | int | 页码 | | limit | int | 限制值 | | total | int | 总数量 |