基于海康SDK开发文档分析+云台控制实现+经典案例

基于海康SDK开发文档分析+云台控制实现+经典案例

上一篇:海康威视java开发+demo运行+调用dll动态库坑

一、准备

  1. 海康的SDK下载 https://www.hikvision.com/cn/download_61.html
  2. 开发环境
  3. 海康设备(ip、端口、账号、密码)

二、SDK开发文档分析

  1. 开发文档位置:CH-HCNetSDKV5.3.6.30_build20180816_Win64 ->开发文档 -> 设备网络SDK使用手册.chm
  2. 打开文档注意下面这两个地方(这两个地方是开发寻找调用的接口的关键)
    在这里插入图片描述
  3. 由于该文档并不是开发文档,所以我们自己构建结构体不知道应该怎样定义(举一个典型的例子)

这是SDK定义
在这里插入图片描述

这是Java代码

//报警设备信息
public static class NET_DVR_ALARMER extends Structure
{
   public  byte byUserIDValid;                 /* userid是否有效 0-无效,1-有效 */
   public  byte bySerialValid;                 /* 序列号是否有效 0-无效,1-有效 */
   public  byte byVersionValid;                /* 版本号是否有效 0-无效,1-有效 */
   public  byte byDeviceNameValid;             /* 设备名字是否有效 0-无效,1-有效 */
   public  byte byMacAddrValid;                /* MAC地址是否有效 0-无效,1-有效 */
   public  byte byLinkPortValid;               /* login端口是否有效 0-无效,1-有效 */
   public  byte byDeviceIPValid;               /* 设备IP是否有效 0-无效,1-有效 */
   public  byte bySocketIPValid;               /* socket ip是否有效 0-无效,1-有效 */
    //原本是NativeLong类型   但是在之后的测试中发现在windows中这个是偏移了4字节  所以改为int
   public  int lUserID;                        /* NET_DVR_Login()返回值, 布防时有效    */
   public  byte[] sSerialNumber = new byte[SERIALNO_LEN];	/* 序列号 */
   public  int dwDeviceVersion;			    /* 版本信息 高16位表示主版本,低16位表示次版本*/
   public  byte[] sDeviceName = new byte[NAME_LEN];		    /* 设备名字 */
   public  byte[] byMacAddr = new byte[MACADDR_LEN];		/* MAC地址 */
   public  short wLinkPort;                     /* link port */
   public  byte[] sDeviceIP = new byte[128];    			/* IP地址 */
   public  byte[] sSocketIP = new byte[128];    			/* 报警主动上传时的socket IP地址 */
   public  byte byIpProtocol;                  /* Ip协议 0-IPV4, 1-IPV6 */
   public  byte[] byRes2 = new byte[11];
}
  1. 知道接口需要搜索的时候
    在这里插入图片描述

三、云台控制实现

  1. 按照上面的分析找到开发的流程结合java版本的Demo
    在这里插入图片描述

  2. 调用接口的时候需要注意

    ①、海康的demo是启动了预览的(如果需要和海康的demo一致的话,海康有些好的web控件)

    ②、我采用的方案是前端采用Video.js播放,通过EasyNVR流媒体服务(也可以自己搭建,我自

    己搭建的不太稳定)拿到对应的RTMP/HLS/FLV播放路径

  3. 根据上面的两种在调用接口的时候会有区别

    ①、启动预览(海康demo方案)
    在这里插入图片描述

    ②、不启动预览
    在这里插入图片描述

四、经典的案例

  1. 下面写出了经典的设置值和获取值的方法(在一些参数不知道怎么赋值的情况下,可以参照这个)
 /**
     * 设置视频参数
     */
    public boolean setParm(String lUser, Integer lCannel, VideoParmBean videoParmBean){
        IntByReference ibrBytesReturned = new IntByReference(0);
        HCNetSDK.NET_DVR_CAMERAPARAMCFG_EX struCameraCfg_ex = new HCNetSDK.NET_DVR_CAMERAPARAMCFG_EX();
        Pointer lpOutBuffer = struCameraCfg_ex.getPointer();
        struCameraCfg_ex.write();
        if(!hCNetSDK.NET_DVR_GetDVRConfig(new NativeLong(Long.parseLong(lUser)), 3368/*NET_DVR_GET_CCDPARAMCFG_EX*/, new NativeLong(lCannel), lpOutBuffer, struCameraCfg_ex.size(), ibrBytesReturned)){
            return false;
        }
        struCameraCfg_ex.read();
        struCameraCfg_ex.dwSize = struCameraCfg_ex.size();
        //给结构体赋值
        struCameraCfg_ex.struVideoEffect.liangdu = videoParmBean.getLiangdu().byteValue();
        struCameraCfg_ex.struVideoEffect.ruidu = videoParmBean.getRuidu().byteValue();
        struCameraCfg_ex.struVideoEffect.sedu = videoParmBean.getSedu().byteValue();
        struCameraCfg_ex.struVideoEffect.baohedu = videoParmBean.getBaohedu().byteValue();
        struCameraCfg_ex.struVideoEffect.duibidu = videoParmBean.getDuibidu().byteValue();
        struCameraCfg_ex.struNoiseRemove.byDigitalNoiseRemoveLevel = videoParmBean.getQuzao().byteValue();
        Pointer lpInBuffer = struCameraCfg_ex.getPointer();
        struCameraCfg_ex.write();
        if(!hCNetSDK.NET_DVR_SetDVRConfig(new NativeLong(Long.parseLong(lUser)), 3369/*NET_DVR_SET_CCDPARAMCFG_EX*/, new NativeLong(lCannel), lpInBuffer, struCameraCfg_ex.size())){
            return false;
        }
        return true;
    }
  1. 关于回调函数的设置,可以在报警的地方找到
设备网络SDK是基于设备私有网络通信协议开发的,为嵌入式网络硬盘录像机、NVR、网络摄像机、网络球机、视频服务器、解码器、报警主机、网络存储等产品服务的配套模块,用于远程访问和控制设备软件的二次开发。 设备网络SDK主要功能 图像预览, 文件回放和下载, 云台控制, 布防/撤防, 语音对讲, 日志管理, 解码卡, 远程升级, 远程重启/关闭, 格式化硬盘, 参数配置(系统配置, 通道配置, 串口配置, 报警配置, 用户配置), 多路解码器, 智能设备功能和获取设备能力集等。 适用于但不仅限于以下产品型号: 1. 编解码设备 DVR:DS-9100、DS-8100、DS-8000-S、DS-8800、DS-7800、DS-7300、DS-7200、DS-7100、DS-7000等系列,包括-ST、-SH、-SE、-SN、-RT、-RH、-XT等; NVR:DS-96000、DS-9600、DS-9500、DS-8600、DS-7900、DS-7800、DS-7700、DS-7600、DS-7100等系列,包括-I、-F、-K、-E、-H、-ST、-XT、-SN、-SE、-SNH、-SHT、-S、-SH、-RT等; XVR:DS-9000HQH-SH、DS-8100HQH(/HGH)-SH、DS-8000HQH-SH、DS-7300HQH(/HGH)-SH、DS-7200HQH(/HGH)-SH、DS-8800HQH(/HGH)(/HUH)-SH(/Fx)、DS-7900HQH(/HGH)(/HUH)-SH(/Fx)、DS-7800HQH(/HGH)(/HUH)-SH(/Ex/Fx)、DS-7100HGH-E1(/F1)等; HDVR(混合型DVR):DS-9000、DS-8000-ST、DS-7600H-ST/-S系列等; 编码器:DS-6700、DS-6600、DS-6500(-JX)、DS-6100、DS-6401HFH系列视频服务器、DS-6000系列编/解码器等; 解码器:DS-6300D(-JX)、DS-6400HD(-JX/-T)、DS-6500D(-T)等 2. 网络摄像机, 网络球机 网络摄像机:标清、高清、红外、热成像、鱼眼等,如DS-2CD7xx、DS-2CD71xx、DS-2CD72xx、DS-2CD8xx、DS-2CD81xx、DS-2CD82xx、DS-2CD84xx、DS-2CD83xx、DS-2CD11xx、DS-2CD12xx、DS-2CD13xx、DS-2CD20xx、DS-2CD21xx、DS-2CD22xx、DS-2CD23xx、DS-2CD24xx、DS-2CD25xx、DS-2CD26xx、DS-2CD27xx、DS-2CD28xx、DS-2CD29xx、DS-2CD2Axx、DS-2CD2Cxx、DS-2CD2Dxx、DS-2CD2Txx、DS-2CD2Qxx、DS-2CD30xx、DS-2CD31xx、DS-2CD32xx、DS-2CD33xx、DS-2CD34xx、DS-2CD39xx、DS-2CD3Txx、DS-2CD3Qxx、DS-2CD40xx、DS-2CD41xx、DS-2CD42xx、DS-2CD4Axx、DS-2CD62xx、DS-2CD63xx、DS-2CD64xx、DS-2CD65xx等 网络球机:标清、高清、红外等,如DS-2DF86xx、DS-2DF85xx、DS-2DF82xx、DS-2DF72xx、DS-2DF71xx、DS-2DE71xx、DS-2DE73xx、DS-2DE72xx、DS-2DM72xx、DS-2DM71xx、DS-2DF1-7xx、DS-2DF66xx、DS-2DF62xx、DS-2DF1-6xx、DS-2DE51xx、DS-2DE52xx、DS-2DE53xx、DS-2DM52xx、DS-2DF52xx、DS-2DC52xx、DS-2DC51xx、DS-2DF1-5xx、DS-2DE45xx、DS-2DE42xx、DS-2DE41xx、DS-2DF1-4xx、DS-2DM1-7xx、DS-2DM1-6xx、DS-2DM1-5xx等 一体化网络摄像机:DS-2ZCN3007、DS-2ZCN3006、DS-2DZ216MF、DS-2DZ2116、DS-2ZCN2006、DS-2ZCN2007、DS-2ZMN2007、DS-2ZMN2006等 智能交通摄像机(抓拍机):(i)DS-2CD93xx、(i)DS-2CD92xx、(i)DS-2CD91xx、DS-2CD9xx、DS-TCG225、DS-TCG113等系列
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值