大华摄像头java开发之抓图
继上一个海康的项目之后,这个月开始了大华网络摄像头的二次开发,在写正式的内容之前先容我吐槽一下:
1. 首先就是从官网下载的Demo,里面只有C写的,让我一个java开发怎么看的懂,这个方面就比海康要差一点了;
2. 遇到问题,咨询他们的技术的时候,每次回复都是寥寥数字,还得让我猜半天,但最后问题好歹都解决了(也有一小部分,他们也没法解决);
3. 每次我问问题的时候,都会给我回复一个附件,就是所问问题的Demo,既然有java的Demo,为什么不直接放官网呢,还要每次问一个给一个,相当无语。
好了言归正传,回到正题。我们拿到摄像头安装好之后,根据官网的工具,自己配置一下IP地址,然后下载官网的Demo(虽然是C的,但是开发文档和编程指导还是有用的),如果想要截图部分的代码的话,可以自己去下载http://download.csdn.net/download/u012492535/10128871,里面还有预览功能、智能交通功能、下载录像功能。
既然是网络摄像头开发,那么流程就都是差不多的,都是按照流程来执行的:
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,我也是初学者,功能没做完,可以互相交流一下经验)
来源:https://www.cnblogs.com/G1432291874/p/9346034.html