zoukankan      html  css  js  c++  java
  • 大华摄像头java开发之抓图

    大华摄像头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,我也是初学者,功能没做完,可以互相交流一下经验)

  • 相关阅读:
    洛谷 P1508 Likecloud-吃、吃、吃
    Codevs 1158 尼克的任务
    2017.10.6 国庆清北 D6T2 同余方程组
    2017.10.6 国庆清北 D6T1 排序
    2017.10.3 国庆清北 D3T3 解迷游戏
    2017.10.3 国庆清北 D3T2 公交车
    2017.10.3 国庆清北 D3T1 括号序列
    2017.10.4 国庆清北 D4T1 财富
    2017.10.7 国庆清北 D7T2 第k大区间
    2017.10.7 国庆清北 D7T1 计数
  • 原文地址:https://www.cnblogs.com/G1432291874/p/9346034.html
Copyright © 2011-2022 走看看