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

  • 相关阅读:
    indy Sftp 编程 ftp安全访问
    关于MySql里的字段
    php---魔术方法(__tostring(),__set_state())
    看了这个才发现jQuery源代码不是那么晦涩
    JS的Document属性和方法小结
    JS的Document属性和方法
    原始JS选择器使用方法总结
    docker 镜像配置
    Docker部署SpringBoot项目
    springboot 和spring cloud 博客分享
  • 原文地址:https://www.cnblogs.com/G1432291874/p/9346034.html
Copyright © 2020-2023  润新知