最近在做这一块的内容,通过海康的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();
	}


    
}

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐