通过海康sdk获取NVR IP通道接入配置

博客作者在尝试通过海康的SDK获取NVR通道配置信息时遇到了结构体NET_DVR_IPPARACFG_V40中联合结构体解析的问题。经过研究和尝试,作者发现需要重写write和read方法来正确解析嵌套的联合结构体。最终,通过动态设置联合结构体类型并实现读写方法,成功获取了所需数据。
摘要由CSDN通过智能技术生成

最近在做这一块的内容,通过海康的sdk获取其NVR上面IP通道接入配置,简单来说就是获取如下信息:

于是查询海康官网的JAVA Demo,和chm文档,就找到了如下内容

到这一步都还挺顺利的,内容基本都有,当时当我把 NET_DVR_IPPARACFG_V40 这个结构体的名字去HCNetSDK.java 文件内查询,竟然没有查询到,难道要自己创建一个,于是我发邮件给海康技术,得到的回复是暂时没有样例,只能自己按照其他结构体的定义来来自己定义这个结构体了,这个结构体嵌套了三层,最后一层还是一个联合结构体,我就是在这里出了问题,之前没了解过jna,所以在定义的时候,随便模仿的去定义了,最终使用sdk跑数据的时候,发现如下的结构的联合结构体的内容始终为 0 

其他都获取正常,我第一次的定义如下:

找了很多原因没有找到,后面突然找到一个文章说是要 重写 write和read方法 ,抱着试一试的想法,改了之后竟然可以了,最后获取到的信息如下:

 

关键结构体的定义如下:

 

public static class NET_DVR_STREAM_MODE extends Structure
{
   public byte   byGetStreamType; //取流方式GET_STREAM_TYPE,0-直接从设备取流,1-从流媒体取流、2-通过IPServer获得ip地址后取流,3.通过IPServer找到设备,再通过流媒体去设备的流
    //4-通过流媒体由URL去取流,5-通过hkDDNS取流,6-直接从设备取流(扩展),使用NET_DVR_IPCHANINFO_V40结构, 7-通过RTSP协议方式进行取流
    public byte []    byRes = new byte[3];        //保留字节
    public NET_DVR_GET_STREAM_UNION uGetStream;    // 不同取流方式结构体
    public static class ByValue extends NET_DVR_STREAM_MODE implements Structure.ByValue{}
	public static class ByReference extends NET_DVR_STREAM_MODE implements Structure.ByReference{}
	
	@Override
	public void read() {
		super.read();
		switch(byGetStreamType) {
		case 0:
			uGetStream.setType(NET_DVR_IPCHANINFO.class);
			break;
		case 1:
			uGetStream.setType(NET_DVR_IPSERVER_STREAM.class);
			break;
		case 2:
			uGetStream.setType(NET_DVR_PU_STREAM_CFG.class);
			break;
		case 3:
			uGetStream.setType(NET_DVR_DDNS_STREAM_CFG.class);
			break;
		case 4:
			uGetStream.setType(NET_DVR_PU_STREAM_URL.class);
			break;
		case 5:
			uGetStream.setType(NET_DVR_HKDDNS_STREAM.class);
			break;
		case 6:
			uGetStream.setType(NET_DVR_IPCHANINFO_V40.class);
			break;
		}
		uGetStream.read();
	}

	@Override
	public void write() {
		super.write();
		switch(byGetStreamType) {
		case 0:
			uGetStream.setType(NET_DVR_IPCHANINFO.class);
			break;
		case 1:
			uGetStream.setType(NET_DVR_IPSERVER_STREAM.class);
			break;
		case 2:
			uGetStream.setType(NET_DVR_PU_STREAM_CFG.class);
			break;
		case 3:
			uGetStream.setType(NET_DVR_DDNS_STREAM_CFG.class);
			break;
		case 4:
			uGetStream.setType(NET_DVR_PU_STREAM_URL.class);
			break;
		case 5:
			uGetStream.setType(NET_DVR_HKDDNS_STREAM.class);
			break;
		case 6:
			uGetStream.setType(NET_DVR_IPCHANINFO_V40.class);
			break;
		}
		uGetStream.write();
	}


    
}

 

### 回答1: 海康是国内安防设备领域知名企业,其产品涵盖摄像头、录像机、NVR等众多安防设备,用户可通过海康提供的SDK对这些设备进行控制和数据交互。 要使用海康SDK获取NVR通道,需要按照以下步骤进行: 1.获取开发者账号和SDK开发包 在海康官网上申请开发者账号,然后下载对应产品的SDK开发包,该开发包包含了API文档、Demo示例代码、SDK库文件等。 2.创建应用程序 通过SDK提供的示例代码,创建应用程序,并按照文档要求进行配置和编译。 3.连接NVR设备 在应用程序中,通过SDK提供的接口调用,连接NVR设备,需要输入设备的IP地址、用户名和密码等信息。 4.获取通道信息 NVR设备中包含多个通道,每个通道对应一个摄像头,通过SDK提供的接口调用,可以获取到设备中的所有通道信息。同时,还可以设置通道的参数和属性,例如视频格式、码率、帧率等。 5.实现业务逻辑 将获取到的通道信息绑定到应用程序中的播放器组件,实现视频监控的功能。此外,也可以在应用程序中添加一些附加功能,例如图像识别、报警提示等,以便更好地满足用户的需求。 以上就是使用海康SDK获取NVR通道的简要步骤。需要注意的是,由于每个产品的SDK接口略有不同,开发人员还需仔细阅读文档和示例代码,才能顺利完成开发工作。 ### 回答2: 海康威视是一家知名的视频监控相关产品的生产商。其中,获取NVR通道使用SDK的一个非常普遍的需求。具体而言,要使用海康SDK获取NVR通道,需要按照以下几步进行: 1.准备好所需的开发环境:正常情况下,海康SDK提供了Java和C++两种不同的开发环境,开发者可以按照自己的熟悉程度选择使用哪一种。 2.编写代码:使用对应SDK提供的API,编写能够调用相应函数操作NVR通道的代码。通常情况下,代码中需要指定要访问的NVR地址、账号密码等信息,同时也可以执行视频播放、抓图等相关操作。 3.调试代码:编写完代码后,需要在本地进行测试以确保代码能够正常运行。在调试过程中,可通过对调试器进行设置、打断点等操作定位代码中的问题,进行调试。 4.部署代码:完成测试后,将代码部署到实际应用中。在部署过程中,应注意配置好相关的外部依赖、环境变量等,以确保代码在运行中能够正常访问NVR通道并执行所需的操作。 总体而言,使用海康SDK获取NVR通道是一个相对较为简单的任务,只要在各个环节中认真完成相应的步骤,就能够顺利地完成整个过程。在实际应用中,我们可以通过SDK来实现对监控管理系统的扩展,提升整个系统的功能和效果。 ### 回答3: 海康威视的SDK是开发者可以通过编程语言与NVR设备进行通信的工具。通过使用SDK,可以获取NVR设备中的通道信息。 首先,需要安装海康威视SDK,与NVR设备建立连接。连接NVR设备需要获得NVR设备的IP地址和端口号。连接成功后,可以通过SDK提供的API获取通道信息,如获取通道状态、获取通道名称等。 获取通道信息的主要流程如下: 1、打开SDK 2、连接NVR设备 3、获取NVR设备信息 4、获取通道信息 5、关闭SDK 具体操作步骤如下: 1、打开SDK 在开发中需要引入SDK及其相关库文件。 2、连接NVR设备 使用SDK提供的或者自定义的通信协议连接NVR设备。 3、获取NVR设备信息 获取NVR设备的IP地址、端口号、设备型号等信息。 4、获取通道信息 使用SDK提供的API获取NVR设备中每个通道的信息,可以获取通道状态、通道名称、通道编号等信息。 5、关闭SDK 在程序结束时,需要关闭SDK连接,确保设备安全性和性能。 总之,使用海康威视SDK获取NVR通道需要通过连接NVR设备并使用SDK提供的API获取通道信息。这个过程需要理解SDK的操作步骤和相关API的使用方法。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值