海康摄像头二次开发详解,包含海康摄像头登录、海康云台控制、视频下载等核心功能

本文详细介绍了海康摄像头的二次开发过程,包括SDK下载、开发问题记录、Maven依赖设置、CameraManage和ControlDto实体类的使用,以及登录、云台控制、查询历史视频保存时间等核心功能的实现,同时提供了完整的代码示例,涵盖视频下载、回放、直播和抓图等操作。
摘要由CSDN通过智能技术生成

准备

海康摄像头SDK开发下载路径:

https://www.hikvision.com/cn/download_61.html

在这里插入图片描述

下载解压之后的目录结构:
1 中为需要加载的库文件;2中有所需的jar包及HCNetSDK.java文件在这里插入图片描述

开发过程中遇到的问题记录:

  • 一定要记得开启日志打印与及时获取最后一次的错误状态码
  • 一个ip下面会有多个摄像头
  • 如果返回的错误状态码为10:有可能是端口不对,改用8000试试
  • 如果可以登陆却无法控制,有可能是通道错误,有的摄像机通道从1开始,有的从33开始【可通过NET_DVR_GetDVRConfig/NET_DVR_SetDVRConfig来查询和修改相关配置】
  • 查询保存的历史视频的起始时间时:NET_DVR_RECORD_TIME_SPAN_INQUIRY结构体占用内存的大小是68个字节

添加maven依赖

<!--海康录像机二次开发依赖jar包-->
<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna</artifactId>
    <version>3.0.9</version>
</dependency>
<!--海康录像机sdk官方提供jar包-->
<dependency>
    <groupId>com.qy</groupId>
    <artifactId>examples</artifactId><!--需要在maven自行安装这个jar包-->
    <version>1.0.0</version>
</dependency>

下面代码中会出现的实体类

CameraManage实体类:

private String deviceIp;
private Integer devicePort;
private String username;
private String password;

ControlDto实体类:

private Long controlUserId;//用户id
private Long channel;//通道【有的类型通道从1开始,有的则从33开始,具体看摄像头配置】
private Integer command;//命令
private Integer motionSpeed;//运动速度
private Integer runOrStop;//0启动/1停止

HCNetSDK.java文件中缺失的部分类/方法

//加载库文件时使用
public static class BYTE_ARRAY extends Structure
    {
   
        public byte[] byValue;

        public BYTE_ARRAY(int iLen) {
   
            byValue = new byte[iLen];
        }

        @Override
        protected List<String> getFieldOrder() {
   
            // TODO Auto-generated method stub
            return Arrays.asList("byValue");
        }
    }

 public static class NET_DVR_RECORD_TIME_SPAN_INQUIRY extends Structure
    {
   
        public int    dwSize;    //结构体大小
        public byte    byType;    //0 正常音视频录像, 1图片通道录像, 2ANR通道录像, 3抽帧通道录像
        public byte[]     byRes = new byte[63]; //保留
    }
    public static class NET_DVR_RECORD_TIME_SPAN extends Structure
    {
   
        public int          dwSize;        //结构体大小
        public NET_DVR_TIME  strBeginTime;  //开始时间
        public NET_DVR_TIME  strEndTime;    //结束时间
        public byte          byType;        //0 正常音视频录像, 1图片通道录像, 2ANR通道录像, 3抽帧通道录像
        public byte[]           byRes = new byte[35];     //保留

        @Override
        public String toString() {
   
            return "NET_DVR_RECORD_TIME_SPAN{" +
                    "dwSize=" + dwSize +
                    ", strBeginTime=" + strBeginTime +
                    ", strEndTime=" + strEndTime +
                    ", byType=" + byType +
                    ", byRes=" + Arrays.toString(byRes) +
                    '}';
        }
    }

    boolean NET_DVR_InquiryRecordTimeSpan(NativeLong lUserID, int dwChannel,  NET_DVR_RECORD_TIME_SPAN_INQUIRY lpInquiry, NET_DVR_RECORD_TIME_SPAN lpResult);

加载库文件:

	//修改HCNetSDK.java文件中的加载路径
	//如果是jar包可能找不到jar包中的文件,所以需要单独存放
	HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary("此处为linux存放库文件libhcnetsdk.so的路径",HCNetSDK.class);
	hcNetSDK = HCNetSDK.INSTANCE;
	
	//如果某些文件加载不到需要手动加载,加载过程如下
	//设置HCNetSDKCom组件库所在路径
	String strPathCom = "/opt/project/yc/yc-video/HCNetLib";
	HCNetSDK.NET_DVR_LOCAL_SDK_PATH struComPath = new HCNetSDK.NET_DVR_LOCAL_SDK_PATH();
	System.out.println(strPathCom.getBytes());
	System.out.println(struComPath.sPath);
	System.
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值