大华摄像头java开发之抓图

大华摄像头java开发之抓图

      继上一个海康的项目之后,这个月开始了大华网络摄像头的二次开发,在写正式的内容之前先容我吐槽一下:

  1. 首先就是从官网下载的Demo,里面只有C写的,让我一个java开发怎么看的懂,这个方面就比海康要差一点了;
  2. 遇到问题,咨询他们的技术的时候,每次回复都是寥寥数字,还得让我猜半天,但最后问题好歹都解决了(也有一小部分,他们也没法解决);
  3. 每次我问问题的时候,都会给我回复一个附件,就是所问问题的Demo,既然有java的Demo,为什么不直接放官网呢,还要每次问一个给一个,相当无语。

      好了言归正传,回到正题。我们拿到摄像头安装好之后,根据官网的工具,自己配置一下IP地址,然后下载官网的Demo(虽然是C的,但是开发文档和编程指导还是有用的),如果想要截图部分的代码的话,可以自己去下载https://download.csdn.net/download/u012492535/10106849,里面还有预览功能、智能交通功能、下载录像功能。


      既然是网络摄像头开发,那么流程就都是差不多的,都是按照流程来执行的:
流程图
1、第一步先初始化设备,大华的设备功能需要用到回调类,所以初始化也是有的:
     代码

		// 初始化SDK
		boolean binit = NetSdk.CLIENT_Init(m_DisConnectCB, new NativeLong(0));
		if (binit) {
			System.out.println("初始化成功");
		}

      其中m_DisConnectCB是回调函数

public class FDisConnectCB implements NetSDKLib.fDisConnect {
	public void invoke(NativeLong lLoginID, String pchDVRIP, int nDVRPort,
			NativeLong dwUser) {
		System.out.printf("断线回调:\n", pchDVRIP, nDVRPort, lLoginID.longValue(),
				dwUser.longValue());
	}
}

2、其中的可选操作项,如果有需要的话,各位自己添加吧,这里就直接写登录了

m_hLoginHandle = NetSdk
				.CLIENT_LoginEx(ipAddress, (short) port, userName, password,
						nSpecCap, pCapParam, m_stDeviceInfo, nError);
						if (m_hLoginHandle.longValue() != 0) {
			System.out.printf("Login Success!\n");
			} else {
			System.out.printf("Login Fail.Last Error\n",
					NetSdk.CLIENT_GetLastError());
		}

3、设置抓图回调函数

//设置回调函数
		NetSdk.CLIENT_SetSnapRevCallBack(snapPicRet, new NativeLong(0));

      回调函数的入口

//抓图回调函数
public class SnapPicRet implements NetSDKLib.fSnapRev{
	Pointer pBuffer; 
	int revLen;

	public void invoke( NativeLong lLoginID, Pointer pBuf, int RevLen, int EncodeType, NativeLong CmdSerial, NativeLong dwUser) {	
	}
}

4、设置好回调函数之后,就来执行请求抓图,SNAP_PARAMS的参数在上传的Demo中有

NetSdk.CLIENT_SnapPictureEx(m_hLoginHandle, SNAP_PARAMS,
					reserved

5、接下来就是重点了,回调函数中写的是如何将获取到的 图片保存到本地的位置和名称

if(pBuf != null && RevLen > 0) {
						File path = new File("./Capture/");
				        if (!path.exists()) {
				        	path.mkdir();
				        }
				        
						String strFileName = "./Capture/" + INetSDK.getDate() + ".jpg"; 

						//保存图片到本地文件
						INetSDK.savePicture(pBuf, RevLen, strFileName); 
						System.out.println("strFileName = " + strFileName);
	try
        {
        	DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(sDstFile)));
        	out.write(pBuf.getByteArray(0, dwBufSize), 0, dwBufSize);
        	out.close();
        } catch (Exception e){
        	e.printStackTrace();
        }
						

6、运行程序的结果
结果

      以上就是我在做大华网络摄像头的截图功能的一些经验,完整代码就不附了,有不明白的可以留言,看到会回复的。(PS:也可以加我的QQ,只不过不一定能及时看到1307329425,我也是初学者,功能没做完,可以互相交流一下经验)

大华摄像头SDK提供了Java版的API接口,可以通过Java编程语言来实现常用的功能。以下是一些常用的Java功能实现: 1. 初始化SDK ```java HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; boolean initSuc = hCNetSDK.NET_DVR_Init(); if (initSuc != true) { System.out.println("SDK初始化失败"); return; } ``` 2. 登录设备 ```java HCNetSDK.NET_DVR_DEVICEINFO_V30 deviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30(); int userID = hCNetSDK.NET_DVR_Login_V30(deviceIP, devicePort, username, password, deviceInfo); if (userID < 0) { System.out.println("登录设备失败"); return; } ``` 3. 实时预览 ```java HCNetSDK.NET_DVR_PREVIEWINFO previewInfo = new HCNetSDK.NET_DVR_PREVIEWINFO(); previewInfo.lChannel = channelNo; previewInfo.dwStreamType = 0; // 0-主码流,1-子码流 previewInfo.dwLinkMode = 0x0000; // 0- TCP方式,0x0001 - UDP方式, previewInfo.hPlayWnd = new NativeLong(0); // 默认为0 previewInfo.bBlocked = true; // 阻塞取流开关:0-非阻塞,1-阻塞 previewInfo.byProtoType = 0; // 应用层取流协议:0-私有协议,1-RTSP协议,2-用户自定义协议 previewInfo.byPreviewMode = 0; // 预览模式:0-正常预览,1-延迟预览 previewInfo.byStreamID[0] = 0; NativeLong playHandle = hCNetSDK.NET_DVR_RealPlay_V40(userID, previewInfo, null); if (playHandle.longValue() == -1) { System.out.println("实时预览失败"); return; } ``` 4. 抓图 ```java HCNetSDK.NET_DVR_JPEGPARA jpegPara = new HCNetSDK.NET_DVR_JPEGPARA(); jpegPara.wPicSize = 0xff; // 图片尺寸:0xff-原始尺寸 jpegPara.wPicQuality = 0; // 图片质量:0-最好,1-较好,2-一般 String filePath = "D:\\capture.jpg"; // 保存路径 boolean captureSuc = hCNetSDK.NET_DVR_CaptureJPEGPicture(playHandle, channelNo, jpegPara, filePath); if (captureSuc != true) { System.out.println("抓图失败"); return; } ``` 5. 录像 ```java HCNetSDK.NET_DVR_TIME startTime = new HCNetSDK.NET_DVR_TIME(); HCNetSDK.NET_DVR_TIME endTime = new HCNetSDK.NET_DVR_TIME(); startTime.dwYear = 2021; startTime.dwMonth = 7; startTime.dwDay = 1; startTime.dwHour = 0; startTime.dwMinute = 0; startTime.dwSecond = 0; endTime.dwYear = 2021; endTime.dwMonth = 7; endTime.dwDay = 1; endTime.dwHour = 1; endTime.dwMinute = 0; endTime.dwSecond = 0; String filePath = "D:\\record.mp4"; // 保存路径 boolean recordSuc = hCNetSDK.NET_DVR_SaveRealData_V40(playHandle, filePath, HCNetSDK.NET_DVR_TRANSPARENT, 0); if (recordSuc != true) { System.out.println("录像失败"); return; } ``` 以上是一些常用的Java功能实现,仅供参考。具体的实现方式还需要根据实际需求来确定。
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值