欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java海康威视摄像头录制视频

程序员文章站 2023-12-22 16:41:28
...

java海康摄像头录制视频

这里就只介绍下录制视频的代码,安装环境啥的就不说了!!!
如果不喜欢,勿喷啊,我也是个刚入行的小白,偶尔记录下开发的一些功能代码,希望下面这段代码能帮到你。

下面是摄像头的初始化和登录的代码,如果你的代码里有,就不要抄我的啦啊!!!

/**
初始化摄像头
**/
public NativeLong initDataVideo() {
        String strPathCom = "/home/czc/java/lib";
        HCNetSDK.NET_DVR_LOCAL_SDK_PATH struComPath = new HCNetSDK.NET_DVR_LOCAL_SDK_PATH();
        System.arraycopy(strPathCom.getBytes(), 0, struComPath.sPath, 0, strPathCom.length());
        struComPath.write();
        boolean loginFlag = hCNetSDK.NET_DVR_Init();
        System.out.print("initSDK is " + loginFlag + "\n");
        System.out.print("error code :" + hCNetSDK.NET_DVR_GetLastError() + "\n");
        hCNetSDK.NET_DVR_SetSDKInitCfg(2, struComPath.getPointer());
        
        hCNetSDK.NET_DVR_SetLogToFile(true, null, false);
        lRealHandle = new NativeLong(-1);
        this.m_strClientInfo = new HCNetSDK.NET_DVR_CLIENTINFO();
        this.m_strClientInfo.lChannel = new NativeLong(1);
        this.m_strClientInfo.lLinkMode = new NativeLong(0);
        this.m_strClientInfo.hPlayWnd = null;
        return lRealHandle;
    }

    //摄像头登录
    public NativeLong myLogin(String ip) {
        HCNetSDK.NET_DVR_USER_LOGIN_INFO struLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();
        HCNetSDK.NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = new HCNetSDK.NET_DVR_DEVICEINFO_V40();
        struLoginInfo.bUseAsynLogin = 0;

        struLoginInfo.wPort = 8000;//端口
        String address = ip;//你的IP地址
        String userName = "";//用户名
        String passWord = "";//密码
        for (int i = 0; i < address.length(); i++) {
            struLoginInfo.sDeviceAddress[i] = (byte) address.charAt(i);
        }
        for (int i = 0; i < userName.length(); i++) {
            struLoginInfo.sUserName[i] = (byte) userName.charAt(i);
        }
        for (int i = 0; i < passWord.length(); i++) {
            struLoginInfo.sPassword[i] = (byte) passWord.charAt(i);
        }
        struLoginInfo.write();

        userId = hCNetSDK.NET_DVR_Login_V40(struLoginInfo.getPointer(), struDeviceInfoV40.getPointer());
        System.out.println("********** ip :" + ip+ "*****************");
        System.out.println("********** NET_DVR_GetLastError :" + hCNetSDK.NET_DVR_GetLastError() + "*****************");
        System.out.println("********** this.m_strClientInfo.lChannel :"+ this.m_strClientInfo.lChannel + "*****************");
        System.out.println("the userId is :" + userId + "\n");
        return userId;

    }

接下里才是你点进来的真正原因吧,重点来了…

NativeLong NET_DVR_RealPlay_V30(NativeLong lUserID, NET_DVR_CLIENTINFO lpClientInfo,
			FRealDataCallBack_V30 fRealDataCallBack_V30, Pointer pUser, boolean bBlocked);

boolean NET_DVR_SaveRealData(NativeLong lRealHandle, String sFileName);

boolean NET_DVR_StopSaveRealData(NativeLong lRealHandle);

boolean NET_DVR_StopRealPlay(NativeLong lRealHandle);

boolean NET_DVR_Logout_V30(NativeLong lUserID);

boolean NET_DVR_Cleanup();
//开始录像
    public Result startRecord(String ip, String path,String filePath) {
        Result result = new Result();
        //用当前时间戳来命名视频名字
        long time = System.currentTimeMillis();
        if(StrUtil.isBlank(filePath)){
        	filePath=path + time;
        }
        File file = new File(filePath);
    	if (!file.exists()) {
    		file.mkdirs();
    	}
    	String fileName = filePath + File.separator + time + ".mp4";

        initDataVideo();//初始化摄像头
        NativeLong lUserID = myLogin(ip);//登录摄像头
        
        lRealHandle = hCNetSDK.NET_DVR_RealPlay_V30(lUserID, this.m_strClientInfo, null, null, true);
        //如果失败了,在重新来一次
        if (lRealHandle.longValue() == -1) {
            initDataVideo();
            myLogin(ip);
            lRealHandle = hCNetSDK.NET_DVR_RealPlay_V30(this.userId, this.m_strClientInfo, null, null, true);
            System.err.println("---------" + hCNetSDK.NET_DVR_GetLastError());
        }
        //打印错误代码
        System.err.println("---------" + hCNetSDK.NET_DVR_GetLastError());
		//录像
        boolean mark = hCNetSDK.NET_DVR_SaveRealData(lRealHandle, fileName);
        if (!mark) {
            result.setMsg("录像失败");
            result.setSuccess(false);
            System.err.println("----录像失败:" + hCNetSDK.NET_DVR_GetLastError()+"-----");
        }
        //返回结果
        result.setCode(filePath);
        result.setData(lRealHandle);
        return result;
    }
//停止录像
//lRealHandle就是 lRealHandle = hCNetSDK.NET_DVR_RealPlay_V30 他的返回值,在上面有
    public void stopRecord(NativeLong lRealHandle) {
        hCNetSDK.NET_DVR_StopSaveRealData(lRealHandle);
        destroySDK();
        System.err.println(hCNetSDK.NET_DVR_GetLastError());
        System.out.print("*************stoptime************:" + System.currentTimeMillis() + "\n");
    }

    public void destroySDK() {
        boolean stopRealPlay = hCNetSDK.NET_DVR_StopRealPlay(this.lRealHandle);
        boolean logoutV30 = hCNetSDK.NET_DVR_Logout_V30(this.userId);
        boolean cleanup = hCNetSDK.NET_DVR_Cleanup();
        System.out.println("stopRealPlay = " + stopRealPlay);
        System.out.println("logoutV30 = " + logoutV30);
        System.out.println("cleanup = " + cleanup);
    }

到这,海康威视录制视频的功能就可以说做完了。
如果你想录制出来的视频上加上日期时间,看下图:
用网页登录的你摄像头IP,看到如下页面,你就可以设置这些操作了

java海康威视摄像头录制视频

相关标签: 个人笔记记载

上一篇:

下一篇: