视频监控安防平台-国标GB28181支持上下级级联支持HTTP接口和码流RTSP/RTMP/HLS输出

                    视频监控安防平台-国标GB28181支持上下级级联支持HTTP接口和码流RTSP/RTMP/HLS输出

        很久没更新博客了,最近抽时间整理了一下http平台,在原来的平台基础上增加了级联上级模块,和通过http+json接口设置平台信息、获取平台资源等接口,丰富了很多接口,设备管理在5000路以上,视频并发在100路左右(同时100路码流接收和发送)。运行环境是centos7.4 x64系统,mysql采用系统自带的mariadb。

国标GB28181支持上下级级联支持HTTP接口和码流RTSP/RTMP/HLS输出下载地址如下:

https://download.csdn.net/download/songxiao1988918/11110655

由于上传无法选择0积分下载,没有积分的可以联系我, 联系方式QQ:123011785  ,欢迎大家一起学习!

一、功能介绍:

    1、支持国标GB28181平台、国标GB28181 IPC和国标GB28181 NVR设备同时接入 (支持GB28181-2011版本和GB28181-2016版本)

    2、支持国标GB28181设备注册和注销,对所有设备进行管理,获取资源 对资源列表进行管理

    3、支持国标GB28181的目录订阅,对接收的订阅通知进行处理

    4、支持国标GB28181实时视频请求(支持UDP、TCP主动(tcpactive)、TCP被动(tcppassive))

    5、支持国标GB28181 PTZ控制

    6、支持国标GB28181 录像查询

    7、支持国标GB28181 历史视频点播 (支持UDP、TCP主动(tcpactive)、TCP被动(tcppassive))

    8、支持国标GB28181 历史视频下载 (支持UDP、TCP主动(tcpactive)、TCP被动(tcppassive))

    9、支持对接收的国标实时视频码流和历史视频码流进行管理

    10、支持将国标的PS码流转换成ES码流

    11、支持丢包打印和断流打印

    13、支持RTSP服务和RTSP会话管理

    14、支持RTSP客户端 UDP传输和TCP传输

    15、支持国标GB28181设备5000路左右的接入管理,支持国标请求视频在100路左右

    16、支持国标28181设备和通道写入mysql数据库

     17、支持设备的云台PTZ控制,控制类型:上"up",下"down",左"left",右"right",左上"leftup",左下"leftdown",右上"rightup",右下"rightdown",镜头近"zoomin",镜头远"zoomout", 焦距远"focusfar",焦距近"focusnear", 设置预置位"setpos",调预置位"callpos"

    18、支持历史视频的查询和历史视频的点播控制

    19、支持对国标设备的控制,"record":录像开启和停止-通道id "guard":布放和撤防-报警通道id "reboot":设备重启-设备id "keyfame":强制关键帧-通道id

    20、支持对实时视频的图片截图,通过http直接访问图片

   21、支持rtmp和hls会话一直保留

   22、支持报警消息(设备上线、下线和设备端报警)通过httpclient方式主动通知

   23、支持公网和局域网同时存在

   24、支持httpserver,接口支持http+json

   25、支持设备上线、下线和设备报警通过httpclient通知到指定的httpserver

  26、支持http+json设置平台信息

 27、支持http+json获取资源组、资源等信息

 29、支持国标28181级联上级

下面整理下大体架构:

       视频监控安防平台-国标GB28181支持上下级级联支持HTTP接口和码流RTSP/RTMP/HLS输出

环境搭建和操作手册详情参考demo里面的文档,下面简单介绍下接口定义:

通道为请求视频的单位,通道id生成方式:

    采用20位国标id的方式:
    
一、数据配置管理协议:
1.设置服务器信息 
    字段说明:
    "name":           (字符串)   国标平台的名称
    "publicid":     (字符串)   国标平台的20位ID (200类型)
    "gbserverport":   (数字)      国标平台监听的端口 
    "rtspservrport":  (数字)      RTSP服务的端口
    "httpclientip":   (字符串)   HTTP客户端的ip(用于报警通知,一般不设置)
    "httpclientport": (数字)      HTTP客户端的端口(用于报警通知,一般不设置)
    
    "errcode:    (数字)   返回状态值,0表示正常状态,其他见错误码(下同)
    "errdesc":   (字符串) 错误码描述(下同)
请求:
    URL:    http://192.168.1.230:8060/vssconfig/set_platform_server
        
    HTTP Method:    POST
    
    Body: 
    {"name":"本级平台","publicid":"11000000002000000001","gbserverport":7060,"rtspservrport":7554,"httpclientip":"","httpclientport":0}    
    
返回:
    其中errcode为必填项,errcode小于0表示错误
    {
        "errcode":0,
        "errdesc":"OK"
    }    
    
2.获取服务器信息 (根节点)
    字段说明:
    "name":           (字符串)   国标平台的名称
    "publicid":     (字符串)   国标平台的20位ID (200类型)
    "gbserverport":   (数字)      国标平台监听的端口 
    "rtspservrport":  (数字)      RTSP服务的端口
    "httpclientip":   (字符串)   HTTP客户端的ip(用于报警通知,一般不设置)
    "httpclientport": (数字)      HTTP客户端的端口(用于报警通知,一般不设置)
    
    "errcode:    (数字)   返回状态值,0表示正常状态,其他见错误码(下同)
    "errdesc":   (字符串) 错误码描述(下同)
请求:
    URL:    http://192.168.1.230:8060/vssconfig/get_platform_server
        
    HTTP Method:    GET
        
返回:
    其中errcode为必填项,errcode小于0表示错误,无数据
    {
        "errcode":0,
        "errdesc":"OK",
        "name":"bejing",
        "ipaddr":"192.168.1.230",
        "httpserverport":8060,
        "publicid":"11000000002000000001",
        "gbserverport":7060,
        "rtspservrport":7554,
        "httpclientip":"",
        "httpclientport":0
    }    

3.设置上级平台信息 
    字段说明:
    "type":            (字符串)   上级平台设置的类型  update-更新和增加  delete-删除
    
    "name":              (字符串)   上级平台的名称
    "publicid":       (字符串)   上级国标平台的20位ID (200类型)
    "ip":             (字符串)   上级国标平台的ip地址
    "port":           (数字)      上级国标平台的端口    
    "authname":         (字符串)      上级国标平台认证的用户名 
    "authpasswd":        (字符串)      上级国标平台认证的密码
    "registertime":   (数字)      上级国标平台的注册饱和时间间隔
    "keepalivetime":  (数字)      上级国标平台的心跳饱和时间间隔
    "synctime":       (字符串)   是否同步上级平台的时间
    "pushprotocol":   (字符串)   资源返回或则录像检索返回采用的协议方式(UDP或则TCP) (目前只支持UDP)
    
    "errcode:    (数字)   返回状态值,0表示正常状态,其他见错误码(下同)
    "errdesc":   (字符串) 错误码描述(下同)
请求:
    URL:    http://192.168.1.230:8060/vssconfig/set_upper_platform_server/{type}
        
    HTTP Method:    POST
    
    Body: 
    {"name":"test_upper1","publicid":"11010000002000000001","ip":"192.168.1.230","port":5060,"authname":"11010000002000000001","authpasswd":"12345678a","registertime":3600,"keepalivetime":60,"synctime":"false","pushprotocol":"udp"}    
    
返回:
    其中errcode为必填项,errcode小于0表示错误
    {
        "errcode":0,
        "errdesc":"OK"
    }    

4.获取上级平台信息  
    字段说明:
    "pageno":      (数字)   指定获取第几页,第一次为1,返回总页数,总条数  
    
    "errcode:      (数字)   返回状态值,0表示正常状态,其他见错误码(下同)
    "errdesc":     (字符串) 错误码描述(下同)
    "totalsize":   (数字)   设备总数  (下同)
    "onepagesize": (数字)   每页大小  (下同)
    "totalpage":   (数字)   总分页数  (下同)
    "pageno":      (数字)   当前第几页(下同)
    "count":       (数字)   当前有几条数据(下同)
    "data":        设备信息,参照“1.设备管理”定义
    
    "name":              (字符串)   上级平台的名称
    "publicid":       (字符串)   上级国标平台的20位ID (200类型)
    "ip":             (字符串)   上级国标平台的ip地址
    "port":           (数字)      上级国标平台的端口    
    "authname":         (字符串)      上级国标平台认证的用户名 
    "authpasswd":        (字符串)      上级国标平台认证的密码
    "registertime":   (数字)      上级国标平台的注册饱和时间间隔
    "keepalivetime":  (数字)      上级国标平台的心跳饱和时间间隔
    "synctime":       (字符串)   是否同步上级平台的时间
    "pushprotocol":   (字符串)   资源返回或则录像检索返回采用的协议方式(UDP或则TCP) (目前只支持UDP)    
    "alive"              (数字)     0-不在线  1-在线
    
请求:
    URL:    http://192.168.1.230:8060/vssconfig/get_upper_platform_server/{pageno}
        
    HTTP Method:    GET
        
返回:  
    其中errcode为必填项,errcode小于0表示错误,无数据; 如果errcode等于0,那么数据里面的每项都是必填项
    {
        "errcode":0,"totalsize":3,"onepagesize":10,"totalpage":1,"pageno":1,"count":3,"data":
        [
            {"name":"test_upper1","publicid":"11010000002000000001","ip":"192.168.1.230","port":5060,"authname":"11010000002000000001","authpasswd":"12345678a","registertime":3600,"keepalivetime":60,"synctime":"false","pushprotocol":"udp","alive":1},
            {"name":"test_upper2","publicid":"11010000002000000002","ip":"192.168.1.240","port":5060,"authname":"11010000002000000001","authpasswd":"12345678a","registertime":3600,"keepalivetime":60,"synctime":"false","pushprotocol":"udp","alive":1},
            {"name":"test_upper3","publicid":"11010000002000000003","ip":"192.168.1.250","port":5060,"authname":"11010000002000000001","authpasswd":"12345678a","registertime":3600,"keepalivetime":60,"synctime":"false","pushprotocol":"udp","alive":1}
        ]
    }    
            
5.获取所有的设备信息 (二级根节点)
    字段说明:
    "pageno":      (数字)   指定获取第几页,第一次为1,返回总页数,总条数  
    
    "errcode:      (数字)   返回状态值,0表示正常状态,其他见错误码(下同)
    "errdesc":     (字符串) 错误码描述(下同)
    "totalsize":   (数字)   设备总数  (下同)
    "onepagesize": (数字)   每页大小  (下同)
    "totalpage":   (数字)   总分页数  (下同)
    "pageno":      (数字)   当前第几页(下同)
    "count":       (数字)   当前有几条数据(下同)
    "data":        设备信息,参照“1.设备管理”定义
    
    "publicid":   (字符串)   国标设备20位id 
    "name":       (字符串)   资源名称 
    "alive":         (数字)      状态 0:不在线 1:在线
    "corp":        (字符串)      厂商
    "parentid":   (字符串)      父节点id 
    "ip":         (字符串)   ip地址
    "port":       (数字)     端口
    "username"      (字符串)   设备注册用户名 
    "passwd"      (字符串)   设备注册密码
    "devmode"      (字符串)   设备类型
    
请求:
    URL:    http://192.168.1.230:8060/vssconfig/get_all_device/{pageno}
        
    HTTP Method:    GET
        
返回:  
    其中errcode为必填项,errcode小于0表示错误,无数据; 如果errcode等于0,那么数据里面的每项都是必填项
    {
        "errcode":0,"totalsize":4,"onepagesize":100,"totalpage":1,"pageno":1,"count":4,"data":
        [
            {"publicid":"11000000001320020001","name":"camear1","alive":1,"corp":"Dahua","parentid":"11010000002000000001","ip":"192.168.1.11","port":5060,"username":"","passwd":"","devmode":"gb28181"},
            {"publicid":"11000000001320020002","name":"camear2","alive":1,"corp":"Dahua","parentid":"11010000002000000001","ip":"192.168.1.12","port":5060,"username":"","passwd":"","devmode":"gb28181"},
            {"publicid":"11000000001320020003","name":"camear3","alive":1,"corp":"Dahua","parentid":"11010000002000000001","ip":"192.168.1.13","port":5060,"username":"","passwd":"","devmode":"gb28181"}
        ]
    }    
    
6.    设备管理  (一般用于删除设备)
    方法说明: 
    "type":            (字符串)   上级平台设置的类型  update-更新和增加  delete-删除
    
    字段说明:
    "publicid":   (字符串)   国标设备20位id 
    "name":       (字符串)   资源名称 
    "ip":         (字符串)   ip地址
    "port":       (数字)     端口
    "username"      (字符串)   设备注册用户名 (一般不填写)
    "passwd"      (字符串)   设备注册密码    (一般不填写)
    "devmode"      (字符串)   设备类型   (默认gb28181)
    
    "errcode:    (数字)   返回状态值,0表示正常状态,其他见错误码(下同)
    "errdesc":   (字符串) 错误码描述(下同)
    "devid":     (数字)   返回设备编号
请求:
    URL:    http://192.168.1.230:8060/vssconfig/set_device/{type}
        
    HTTP Method:    POST
        
    Body: 
    {
        "count":3,
        "data":
        [
            {"publicid":"11000000001320020001","name":"hik_1","ip":"192.168.45.15", "port":8000,"username":"", "passwd":"", "devmode":"gb28181"},
            {"publicid":"11000000001320020002","name":"hik_1","ip":"192.168.45.15", "port":8000,"username":"", "passwd":"", "devmode":"gb28181"},
            {"publicid":"11000000001320020003","name":"hik_1","ip":"192.168.45.15", "port":8000,"username":"", "passwd":"", "devmode":"gb28181"}
        ]
    }
返回:  
    其中errcode为必填,errcode小于0表示错误,无数据
    {
        "errcode":0,"errdesc":"OK","count":3,"data":
        [
            {"publicid":'11000000001320020001',"errcode":0,"errdesc":"OK"},
            {"publicid":'11000000001320020001',"errcode":-501,"errdesc":"error 501"},
            {"publicid":'11000000001320020001',"errcode":-502,"errdesc":"error 501"}
        ]
    }    
    

7.获取设备的所有通道资源信息

    字段说明:
    "pageno":      (数字)   指定获取第几页,第一次为1,返回总页数,总条数  
    "devpubid":       (字符串) 注册的设备id
    "type"           (字符串) "all"-表示获取设备的所有资源  "node"-父节点下的第一级资源
    
    "errcode:      (数字)   返回状态值,0表示正常状态,其他见错误码(下同)
    "errdesc":     (字符串) 错误码描述(下同)
    "totalsize":   (数字)   设备总数  (下同)
    "onepagesize": (数字)   每页大小  (下同)
    "totalpage":   (数字)   总分页数  (下同)
    "pageno":      (数字)   当前第几页(下同)
    "count":       (数字)   当前有几条数据(下同)
    "data":        设备信息,参照“1.设备管理”定义
    
    "restype":      (数字)     1-通道资源 2-资源组 
    "publicid":  (字符串)   国标资源通道20位id (用于请求视频、控制等操作)
    "name":       (字符串)   资源名称 
    "alive":         (数字)      状态 0:不在线 1:在线
    "corp":        (字符串)      厂商
    "owner":         (字符串)   设备归属
    "civilcode":  (字符串)      行政区域 (可以按照行政区域进行划分资源组)
    "address":    (字符串)      地址
    "devpubid":   (字符串)      通道的设备id
    "parentid":   (字符串)      父节点id
    "ip":         (字符串)   ip地址
    "port":       (数字)     端口
    "longitude":  (数字)     经度
    "latitude":   (数字)     纬度
    "ptztype":    (数字)     控制类型 1-球机;2-半球;3-固定枪机;4-遥控枪机;
    "streamtype": (数字)     码流类型 0-H264;1-MPEG2;2-MPEG4;3-SVAC;4-3GP;5-H265;
    "realrtspurl":(字符串)   实时视频的rtsp地址
    
请求:
    URL:    http://192.168.1.230:8060/vssconfig/get_all_channel/{devpubid}/{type}/{pageno}
        
    HTTP Method:    GET
        
返回:  
    其中errcode为必填项,errcode小于0表示错误,无数据; 如果errcode等于0,那么数据里面的每项都是必填项
    { 
        "errcode": 0 ,"errdesc": "OK" ,"totalsize": 5 ,"onepagesize": 100 ,"totalpage": 1 ,"pageno": 1, "count":13,"data":
        [
            {"restype":2,"publicid":"11010000002150000004","name":"28181推送角色","alive":1,"corp":"","model":"","owner":"","civilcode":"","address":"","devpubid":"11010000002000000001","parentid":"11010000002000000001","ip":"","port":0,"longitude":0.0,"latitude":0.0,"ptztype":0,"streamtype":0,"realrtspurl":""},
            {"restype":2,"publicid":"11010000002160000009","name":"网关接入摄像机组","alive":1,"corp":"","model":"","owner":"","civilcode":"","address":"","devpubid":"11010000002000000001","parentid":"11010000002150000004","ip":"","port":0,"longitude":0.0,"latitude":0.0,"ptztype":0,"streamtype":0,"realrtspurl":""},
            {"restype":1,"publicid":"11010000001310000004","name":"rtsp_69_1","alive":1,"corp":"51","model":"rtsplib_ipc","owner":"11010000002000000001","civilcode":"1101","address":"","devpubid":"11010000002000000001","parentid":"11010000002160000009","ip":"","port":0,"longitude":104.08116,"latitude":30.68946,"ptztype":3,"streamtype":0,"realrtspurl":"rtsp://192.168.1.230:7554/DevAor=11010000001310000004"},
            {"restype":1,"publicid":"11010000001310000029","name":"成都分公司","alive":1,"corp":"8","model":"hikes_ipc","owner":"11010000002000000001","civilcode":"1101","address":"","devpubid":"11010000002000000001","parentid":"11010000002160000009","ip":"","port":0,"longitude":0.0,"latitude":0.0,"ptztype":1,"streamtype":0,"realrtspurl":"rtsp://192.168.1.230:7554/DevAor=11010000001310000029"},
            {"restype":1,"publicid":"11010000001310000030","name":"大华测试摄像机179-1","alive":1,"corp":"1","model":"dahua_IPC","owner":"11010000002000000001","civilcode":"1101","address":"","devpubid":"11010000002000000001","parentid":"11010000002160000009","ip":"","port":0,"longitude":0.0,"latitude":0.0,"ptztype":1,"streamtype":0,"realrtspurl":"rtsp://192.168.1.230:7554/DevAor=11010000001310000030"}
        ]
    }


资源组展现方式:(完全采用下级注册资源展现方式)
    本级平台的(Svrtbl)
        --注册设备1(VSSDevtbl)
            --注册设备下的资源组1 (VSSChannelTbl)
                --通道资源 (VSSChannelTbl)
            --注册设备下的资源组2 (VSSChannelTbl)
                --通道资源 (VSSChannelTbl)
        --注册设备2(VSSDevtbll)
            --通道资源 (VSSChannelTbl)    

资源树展现:
    一级资源组(国标服务名称:http://192.168.1.230:8060/vssconfig/get_platform_server)
        --二级资源组 (设备信息:http://192.168.1.230:8060/vssconfig/get_all_device/{pageno})
            --三级资源组 (restype=2 通道资源:http://192.168.1.230:8060/vssconfig/get_all_channel/{devpubid}/node/{pageno})
                --通道资源 (restype=1 通道资源:http://192.168.1.230:8060/vssconfig/get_all_channel/{devpubid}/node/{pageno})
        --二级资源组 (设备信息:http://192.168.1.230:8060/vssconfig/get_all_device/{pageno})    
            --通道资源 (restype=1 通道资源:http://192.168.1.230:8060/vssconfig/get_all_channel/{devpubid}/node/{pageno})    
    

8.获取平台的所有通道资源信息 (不包含资源组) ---->  如果只接入IPC设备, 建议采用该接口获取资源信息

    字段说明:
    "pageno":      (数字)   指定获取第几页,第一次为1,返回总页数,总条数  
    
    "errcode:      (数字)   返回状态值,0表示正常状态,其他见错误码(下同)
    "errdesc":     (字符串) 错误码描述(下同)
    "totalsize":   (数字)   设备总数  (下同)
    "onepagesize": (数字)   每页大小  (下同)
    "totalpage":   (数字)   总分页数  (下同)
    "pageno":      (数字)   当前第几页(下同)
    "count":       (数字)   当前有几条数据(下同)
    "data":        设备信息,参照“1.设备管理”定义
    
    "restype":      (数字)     1-通道资源 2-资源组 
    "publicid":  (字符串)   国标资源通道20位id (用于请求视频、控制等操作)
    "name":       (字符串)   资源名称 
    "alive":         (数字)      状态 0:不在线 1:在线
    "corp":        (字符串)      厂商
    "owner":         (字符串)   设备归属
    "civilcode":  (字符串)      行政区域 (可以按照行政区域进行划分资源组)
    "address":    (字符串)      地址
    "devpubid":   (字符串)      通道的设备id
    "parentid":   (字符串)      父节点id
    "ip":         (字符串)   ip地址
    "port":       (数字)     端口
    "longitude":  (数字)     经度
    "latitude":   (数字)     纬度
    "ptztype":    (数字)     控制类型 1-球机;2-半球;3-固定枪机;4-遥控枪机;
    "streamtype": (数字)     码流类型 0-H264;1-MPEG2;2-MPEG4;3-SVAC;4-3GP;5-H265;
    "realrtspurl":(字符串)   实时视频的rtsp地址
    
请求:
    URL:    http://192.168.1.230:8060/vssconfig/get_platform_all_channel/{pageno}
        
    HTTP Method:    GET
        
返回:  
    其中errcode为必填项,errcode小于0表示错误,无数据; 如果errcode等于0,那么数据里面的每项都是必填项
    { 
        "errcode": 0 ,"errdesc": "OK" ,"totalsize": 3 ,"onepagesize": 100 ,"totalpage": 1 ,"pageno": 1, "count":13,"data":
        [
            {"restype":1,"publicid":"11010000001310000004","name":"rtsp_69_1","alive":1,"corp":"51","model":"rtsplib_ipc","owner":"11010000002000000001","civilcode":"1101","address":"","devpubid":"11010000002000000001","parentid":"11010000002160000009","ip":"","port":0,"longitude":104.08116,"latitude":30.68946,"ptztype":3,"streamtype":0,"realrtspurl":"rtsp://192.168.1.230:7554/DevAor=11010000001310000004"},
            {"restype":1,"publicid":"11010000001310000029","name":"成都分公司","alive":1,"corp":"8","model":"hikes_ipc","owner":"11010000002000000001","civilcode":"1101","address":"","devpubid":"11010000002000000001","parentid":"11010000002160000009","ip":"","port":0,"longitude":0.0,"latitude":0.0,"ptztype":1,"streamtype":0,"realrtspurl":"rtsp://192.168.1.230:7554/DevAor=11010000001310000029"},
            {"restype":1,"publicid":"11010000001310000030","name":"大华测试摄像机179-1","alive":1,"corp":"1","model":"dahua_IPC","owner":"11010000002000000001","civilcode":"1101","address":"","devpubid":"11010000002000000001","parentid":"11010000002160000009","ip":"","port":0,"longitude":0.0,"latitude":0.0,"ptztype":1,"streamtype":0,"realrtspurl":"rtsp://192.168.1.230:7554/DevAor=11010000001310000030"}
        ]
    }    


    

二、通信接口:
    视频服务器作为httpserver。        
    
1.    请求实时视频
    字段说明:
    "channelid":  (字符串)   通道20位编号
    "type":       (数字)        国标请求视频类型:1:udp 2:tcp主动 3:tcp被动
    "videourltype":  (字符串)   视频类型:rtsp:返回rtsp地址  rtmp:返回rtmp地址 hls:返回hls地址

    "errcode":    (数字)   返回值,0表示成功,其他见错误码
    "sessionid":  (字符串) 会话返回的sessionid
    "videourl":    (字符串) rtsp地址/rtmp地址/hls地址
请求:
    URL:    http://192.168.1.230:8088/vss/open_stream/{channelid}/{type}/{videourltype}
        
    HTTP Method:    GET
        
返回:
    其中errcode为必填项,errcode小于0表示错误,无数据
    {
        "errcode":0,
        "errdesc":"OK",
        "strsessionid":"11000000001325000001",
        "videourl":"http://192.168.1.230:8060/video/11000000001325000001.m3u8"
    }

2.    停止视频-通过sessionid停止视频 (包含实时视频、历史视频点播、历史视频下载)
    字段说明:
    "sessionid":  (字符串) 会话返回的sessionid
    
    "errcode":    (数字)   返回状态值,0表示正常状态,其他见错误码
请求:
    URL:    http://192.168.1.230:8088/vss/close_stream/{sessionid}
        
    HTTP Method:    GET
        
返回:
    其中errcode为必填项,errcode小于0表示错误
    {
        "errcode":0,
        "errdesc":"OK"
    }
        
3.    PTZ云台控制
    字段说明:
    "channelid":  (字符串)   通道20位编号
    "ptztype":   (字符串) 控制类型:上"up",下"down",左"left",右"right",左上"leftup",左下"leftdown",右上"rightup",右下"rightdown",镜头近"zoomin",镜头远"zoomout", 
                            焦距远"focusfar",焦距近"focusnear", 设置预置位"setpos",调预置位"callpos",停止"stop"
    "ptzparam":   (数字)   参数,速度范围为1-255
    
请求:
    URL:    http://192.168.1.230:8088/vss/ptz/{ptztype}/{ptzparam}/{channelid}
        
    HTTP Method:    GET
        
返回: 
    其中errcode为必填项,errcode小于0表示错误
    {"errcode":0,"errdesc":"OK"}


4.    录像查询
    字段说明:
    
    "channelid":   (字符串)   通道20位编号
    "begintime":   (字符串) "YYYY-MM-DDTHH:MM:SS":  年月日时分秒; 开始时间,注意不全0
    "endtime":     (字符串) "YYYY-MM-DDTHH:MM:SS":  年月日时分秒; 结束时间,注意不全0
    
    "data":        录像查询信息
    "begintime":   (字符串) "YYYY-MM-DDTHH:MM:SS":  年月日时分秒; 开始时间,注意不全0
    "endtime":     (字符串) "YYYY-MM-DDTHH:MM:SS":  年月日时分秒; 结束时间,注意不全0
    "filename":    (字符串) 文件名,不一定用,如果根据文件回放才用,根据时间回放不用
    "type":      (字符串)录像类型 all,time,alarm,manual

请求:
    URL:    http://192.168.1.230:8088/vss/history_search/{begintime}/{endtime}/{channelid}
        
    HTTP Method:    GET
        
返回: 
    其中errcode为必填项,errcode小于0表示错误,无数据; 如果errcode等于0,那么数据里面的每项都是必填项
    {"errcode":0,"errdesc":"OK","totalsize":3,"onepagesize":100,"totalpage":1,"pageno":1,"count":3,"data":
        [
            {"channelid":11000000001325000001,"begintime":"2017-09-19T15:13:24","endtime":"2017-09-19T15:38:34","filename":"101101001_0","type":"all"},
            {"channelid":11000000001325000001,"begintime":"2017-09-19T15:56:52","endtime":"2017-09-19T16:03:10","filename":"101101001_2","type":"all"},
            {"channelid":11000000001325000001,"begintime":"2017-09-19T16:06:42","endtime":"2017-09-19T17:28:55","filename":"101101001_4","type":"all"}
        ]
    }
    
5.    录像点播/下载
    字段说明:
    "channelid":  (字符串)   通道20位编号
    "opttype":    (字符串) "vod"点播, "download"下载
    "begintime":  (字符串) "YYYY-MM-DDTHH:MM:SS":  年月日 时分秒; 开始时间
    "endtime":    (字符串) "YYYY-MM-DDTHH:MM:SS":  年月日 时分秒; 结束时间
    "type":       (数字)   国标请求视频类型:1:udp 2:tcp主动 3:tcp被动

    返回参数:
    "errcode":    (数字)   返回状态值,0表示正常状态,其他见错误码
    "rtspurl":    (字符串) 点播/下载rtsp地址
    "sessionid":  (字符串) 点播/下载句柄,用于点播控制,关闭(为请求时传入的sessionid)
    "filesize":   (64位数字)   点播/下载的总大小
    
请求:
    URL:    http://192.168.1.230:8088/vss/open_his_stream/{opttype}/{begintime}/{endtime}/{channelid}/{type}
        
    HTTP Method:    GET
        
返回:
    其中errcode为必填项,errcode小于0表示错误,无数据; 如果errcode等于0,那么数据里面的每项都是必填项
    {
        "errccode":0,
        "rtspurl":"rtsp://192.168.1.230:9554/Type=2/DevAor=101101001-2017030031-111",
        "sessionid":"101101001-2017030031-111"
        "filesize":110503259
    }
        
    
6.    录像点播控制
    字段说明:
    "sessionid":    (字符串) 点播返回的sessionid句柄
    "vodctrltype":  (字符串) "play","pause","stop","jump"
    "vodctrlparam": (字符串)  0(pause,stop) / 0.125,0.25,0.5,1,2,4,8,16(play) (范围:0-32)/ 从开始时间跳转的秒数(jump)
    
请求:
    URL:    http://192.168.1.230:8088/vss/his_stream_ctrl/{sessionid}/{vodctrltype}/{vodctrlparam}
        
    HTTP Method:    GET
        
返回:
    其中errcode为必填项,errcode小于0表示错误
    {"errccode":0,"errdesc":"OK"}

7.     设备控制
    字段说明:
    "channelid":  (字符串)   通道或者设备20位编号
    "devctrltype": (字符串)  "record":录像开启和停止-通道id "guard":布放和撤防-报警通道id "reboot":设备重启-设备id "keyfame":强制关键帧-通道id  
    "param":  (字符串) "start"启动,"stop"停止 
    
请求:
    URL:    http://192.168.1.230:8060/vss/device_ctrl/{devctrltype}/{channelid}/{param}
        
    HTTP Method:    GET
        
返回:
    其中errcode为必填项,errcode小于0表示错误
    {"errccode":0,"errdesc":"OK"}
    
8.     实时截图
    字段说明:
    "channelid":  (字符串)   通道20位编号
    "type":       (数字)        国标请求视频类型:1:udp 2:tcp主动 3:tcp被动

    "errcode":    (数字)   返回值,0表示成功,其他见错误码
    "imageurl":    (字符串) 图片的url地址
请求:
    URL:    http://192.168.1.230:8088/vss/get_image/{channelid}/{type}
        
    HTTP Method:    GET
        
返回:
    其中errcode为必填项,errcode小于0表示错误,无数据
    {
        "errcode":0,
        "errdesc":"OK",
        "imagetime":"2018-12-18T12:00:00"
        "imageurl":"http://192.168.1.230:8060/image/11000000001325000001.jpg"
    }
    
9.     重新获取资源目录
    字段说明:
    "devpubid":  (字符串)   设备20位编号 
    
请求:
    URL:    http://192.168.1.230:8060/vss/get_catalog/{devpubid}
        
    HTTP Method:    GET
        
返回:
    其中errcode为必填项,errcode小于0表示错误
    {"errccode":0,"errdesc":"OK"}
    
    
三、报警通知  
    视频服务器作为httpclient

    方法说明: 
    

    字段说明:
    "channelid":  (字符串)   通道20位编号
    "alarmtype": (数字) 报警类型(后续根据需求定义)
    "alarmtime":  (字符串) "YYYY-MM-DDTHH:MM:SS":  年月日 时分秒; 报警时间
    "alarmdesc":  (字符串) 报警描述
    "longitude":  (字符串) 经度
    "latitude":      (字符串) 纬度
    
请求:
    URL:    http://192.168.1.230:8088/vssalarm

        
    HTTP Method:    POST
        
    Body: 
    所有字段都为必填项
    {"channelid":"11000000001325000001","alarmtype":1,"alarmtime":"2017-09-19T15:13:24","alarmdesc":"fire","longitude":"10.01123","latitude":"20.34221"}