700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 海康威视摄像机SDK二次开发--通过云台参数设置控制摄像机的位置

海康威视摄像机SDK二次开发--通过云台参数设置控制摄像机的位置

时间:2019-11-14 16:17:47

相关推荐

海康威视摄像机SDK二次开发--通过云台参数设置控制摄像机的位置

由于最近在开发海康威视摄像头,特此记录一下通过云台参数控制摄像机的位置,我这里是通过properties配置文件输入的参数,也可以不用配置文件,看具体的需求

package ClientDemo;import com.sun.jna.NativeLong;import com.sun.jna.Pointer;import com.sun.jna.ptr.IntByReference;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.util.HashMap;import java.util.Map;import java.util.Properties;public class HIKSDKSaveRealData {public static void main(String[] args) {HIKSDKSaveRealData HikSdk= new HIKSDKSaveRealData();short port =8000;//初始化连接信息 用户名密码IP地址端口号CameraInfo cameraInfo = new CameraInfo();cameraInfo.setAddress("192.168.1.64");cameraInfo.setPort(port);cameraInfo.setUserName("admin");cameraInfo.setPwd("gw*123456");HikSdk.SaveRealDataformDir(cameraInfo);}/** 通过云台参数控制摄像机位置* param: CameraInfo 摄像机连接的基本信息* return: null* */void SaveRealDataformDir(CameraInfo cameraInfo){//设置设备通道号 查看Demo代码 通道号为1NativeLong channel = new NativeLong(1);cameraInfo.setChannel(channel);//初始化HCNetSDK接口 实例化对象HCNetSDK sdk = HCNetSDK.INSTANCE;if (!_DVR_Init()) {System.out.println("初始化失败..................");}//创建设备_DVR_DEVICEINFO_V30 deInfo = new _DVR_DEVICEINFO_V30();//注册用户设备NativeLong id = _DVR_Login_V30(cameraInfo.getAddress(), cameraInfo.getPort(),cameraInfo.getUserName(), cameraInfo.getPwd(), deInfo);cameraInfo.setUserId(id);//判断是否注册成功if(cameraInfo.getUserId().intValue()<0){System.out.println("注册设备失败 错误码为: " +_DVR_GetLastError());}else {System.out.println("注册成功 Id为:"+ cameraInfo.getUserId().intValue());}//判断是否获取到设备能力_DVR_WORKSTATE_V30 devWork = new _DVR_WORKSTATE_V30();if(!_DVR_GetDVRWorkState_V30(cameraInfo.getUserId(), devWork)){System.out.println("获取设备能力集失败,返回设备状态失败...............");return;}//启动实时预览功能 创建clientInfo对象赋值预览参数_DVR_CLIENTINFO clientInfo = new _DVR_CLIENTINFO();clientInfo.lChannel=cameraInfo.getChannel(); //设置通道号clientInfo.lLinkMode=new NativeLong(0); //TCP取流clientInfo.sMultiCastIP=null; //不启动多播模式//创建窗口句柄clientInfo.hPlayWnd=null;ClientDemo clientDemo = new ClientDemo();ClientDemo.FRealDataCallBack fRealDataCallBack = clientDemo.fRealDataCallBack;//开启实时预览NativeLong key = _DVR_RealPlay_V30(cameraInfo.getUserId(), clientInfo, fRealDataCallBack, null, true);cameraInfo.setKey(key);//判断是否预览成功if(key.intValue()==-1){System.out.println("预览失败 错误代码为: "+_DVR_GetLastError());_DVR_Logout(cameraInfo.getUserId());_DVR_Cleanup();return;}//预览成功后 调用接口使视频资源保存到文件中if(!_DVR_SaveRealData(cameraInfo.getKey(), "D:\\realData\\result.mp4")){System.out.println("保存到文件失败 错误码为: "+_DVR_GetLastError());_DVR_StopRealPlay(key);_DVR_Logout(cameraInfo.getUserId());_DVR_Cleanup();return;}try {Thread.sleep(1000);} catch (Exception e) {e.printStackTrace();}/* 获取PTZ快球位置参数* 获取水平角度,垂直角度,变倍角度* */IntByReference intByReference = new IntByReference(0);//创建PTZPOS参数对象_DVR_PTZPOS net_dvr_ptzpos = new _DVR_PTZPOS();Pointer pointer = net_dvr_ptzpos.getPointer();//执行获取参数if(!_DVR_GetDVRConfig(cameraInfo.getKey(),_DVR_GET_PTZPOS ,new NativeLong(0),pointer,net_dvr_ptzpos.size() , intByReference)){System.out.println("获取DVR参数PTZ参数失败,错误码为: "+_DVR_GetLastError());_DVR_StopRealPlay(key);_DVR_Logout(cameraInfo.getUserId());_DVR_Cleanup();return;}//把数据写入net_dvr_ptzpos对象中 下面才可以获取到参数net_dvr_ptzpos.read();System.out.println("PTZ垂直参数为: "+net_dvr_ptzpos.wTiltPos);System.out.println("PTZ水平参数为: "+net_dvr_ptzpos.wPanPos);System.out.println("PTZ变倍参数为: "+net_dvr_ptzpos.wZoomPos);/** 设置PTZPOS快球参数* 设置垂直角度,水平角度,变倍角度* 从配置文件中获取参数 设置到PTZ中* */try {Map<String, Short> ptzParameters = getPtzParameters();net_dvr_ptzpos.wPanPos=ptzParameters.get("wPanPos");//设置水平角度net_dvr_ptzpos.wTiltPos=ptzParameters.get("wTiltPos"); //设置垂直角度net_dvr_ptzpos.wZoomPos=ptzParameters.get("wZoomPos"); //设置变倍参数net_dvr_ptzpos.write(); //把数据写入缓冲区} catch (Exception e) {System.out.println("获取配置文件PTZ参数失败,请检查参数名称是否正确.....");_DVR_StopRealPlay(key);_DVR_Logout(cameraInfo.getUserId());_DVR_Cleanup();return;}/** 设置PTZ参数 水平参数 垂直参数 变倍参数* */if (!_DVR_SetDVRConfig(cameraInfo.getKey(), _DVR_SET_PTZPOS, new NativeLong(0), pointer,net_dvr_ptzpos.size())){System.out.println("设置PTZ参数失败,错误码为: "+_DVR_GetLastError());_DVR_StopRealPlay(key);_DVR_Logout(cameraInfo.getUserId());_DVR_Cleanup();return;}System.out.println("执行成功--------------");/** 设备更换位置后再次获取PTZ参数* */System.out.println("PTZ垂直参数为: "+net_dvr_ptzpos.wTiltPos);System.out.println("PTZ水平参数为: "+net_dvr_ptzpos.wPanPos);System.out.println("PTZ变倍参数为: "+net_dvr_ptzpos.wZoomPos);}/** 获取配置文件中的PTZ参数* config.preperties* */Map<String,Short> getPtzParameters(){Map<String,Short> map = new HashMap();Properties properties = new Properties();try {properties.load(new FileInputStream(new File("properties文件的绝对路径")));} catch (IOException e) {System.out.println("读取配置文件失败,请检查配置文件路径是否正确");}Short wPanpos = Short.parseShort(properties.getProperty("wPanpos"));Short wTiltPos = Short.parseShort(properties.getProperty("wTiltPos"));Short wZoomPos = Short.parseShort(properties.getProperty("wZoomPos"));map.put("wPanPos", wPanpos);map.put("wTiltPos", wTiltPos);map.put("wZoomPos", wZoomPos);return map;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。