最近对接大华接口要控制摄像头的旋转,SDK源码中注释比较少也没有详细的技术文档,自己研究下写了这个帮助类可以实现摄像头8个方向的控制,首先需要引入netsdk的jar包,直接上源码:

public class PTZControlUtil {// 初始化sdkpublic static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE;// 设备信息private static NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();// 登陆句柄private static NetSDKLib.LLong m_hLoginHandle = new NetSDKLib.LLong(0);// 网络断线处理private static DisConnect disConnect = new DisConnect();// 设备连接恢复,实现设备连接恢复接口private static HaveReConnect haveReConnect = new HaveReConnect();/*** 云台控制* @param m_strIp       ip* @param m_nPort       端口* @param m_strUser     登录名* @param m_strPassword 密码* @param nChannelID    通道id 默认为0* @param command       命令* @param lParam1       默认 0,当有左上或左下等操作时才会传值 (1-8)* @param lParam2       垂直/水平 移动速度 (1-8)*/public static void upControlPtz(String m_strIp, int m_nPort, String m_strUser, String m_strPassword, int nChannelID, String command, int lParam1, int lParam2) {// 初始化init(disConnect, haveReConnect);// 若未登录,先登录if (m_hLoginHandle.longValue() == 0) {login(m_strIp, m_nPort, m_strUser, m_strPassword);}// 开始移动,若超过角度则会变为左右移动if (m_hLoginHandle.longValue() != 0) {control(nChannelID, command, lParam1, lParam2);}// 退出logout();// 释放资源cleanup();}/*** 云台控制* @param nChannelID* @param command* @param lParam1* @param lParam2*/private static void control(int nChannelID, String command, int lParam1, int lParam2) {if ("UP".equals(command)) {//向上netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL,0, lParam2, 0, 0);netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL,0, 0, 0, 1);} else if ("DOWN".equals(command)) {//向下netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL,0, lParam2, 0, 0);netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL,0, 0, 0, 1);} else if ("LEFT".equals(command)) {//向左netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL,0, lParam2, 0, 0);netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL,0, 0, 0, 1);} else if ("RIGHT".equals(command)) {//向右netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL,0, lParam2, 0, 0);netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL,0, 0, 0, 1);} else if ("LEFT_UP".equals(command)) {//向左上netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP,lParam1, lParam2, 0, 0);netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP,0, 0, 0, 1);} else if ("LEFT_DOWN".equals(command)) {//向左下netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN,lParam1, lParam2, 0, 0);netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN,0, 0, 0, 1);} else if ("RIGHT_UP".equals(command)) {//向右上netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP,lParam1, lParam2, 0, 0);netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP,0, 0, 0, 1);} else if ("RIGHT_DOWN".equals(command)) {//向右下netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN,lParam1, lParam2, 0, 0);netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN,0, 0, 0, 1);} else if ("FOCUS_NEAR".equals(command)) {//变焦+netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL,0, lParam2, 0, 0);netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL,0, 0, 0, 1);} else if ("FOCUS_FAR".equals(command)) {//变焦-netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL,0, lParam2, 0, 0);netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL,0, 0, 0, 1);} else if ("ZOOM_IN".equals(command)) {//变倍+netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL,0, lParam2, 0, 0);netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL,0, 0, 0, 1);} else if ("ZOOM_OUT".equals(command)) {//变倍-netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL,0, lParam2, 0, 0);netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL,0, 0, 0, 1);} else if ("IRIS_ENLARGE".equals(command)) {//光圈+netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL,0, lParam2, 0, 0);netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL,0, 0, 0, 1);} else if ("IRIS_REDUCE".equals(command)) {//光圈-netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL,0, lParam2, 0, 0);netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL,0, 0, 0, 1);}}/*** 初始化*/private static boolean bInit    = false;private static boolean bLogopen = false;public static boolean init(NetSDKLib.fDisConnect disConnect, NetSDKLib.fHaveReConnect haveReConnect) {bInit = netsdk.CLIENT_Init(disConnect, null);if(!bInit) {System.out.println("Initialize SDK failed");return false;}//打开日志,可选NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO();File path = new File("./sdklog/");if (!path.exists()) {path.mkdir();}String logPath = path.getAbsoluteFile().getParent() + "\\sdklog\\" + ToolKits.getDate() + ".log";setLog.nPrintStrategy = 0;setLog.bSetFilePath = 1;System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length);System.out.println(logPath);setLog.bSetPrintStrategy = 1;bLogopen = netsdk.CLIENT_LogOpen(setLog);if(!bLogopen ) {System.err.println("Failed to open NetSDK log");}// 设置断线重连回调接口,设置过断线重连成功回调函数后,当设备出现断线情况,SDK内部会自动进行重连操作// 此操作为可选操作,但建议用户进行设置netsdk.CLIENT_SetAutoReconnect(haveReConnect, null);//设置登录超时时间和尝试次数,可选int waitTime = 5000; //登录请求响应超时时间设置为5Sint tryTimes = 1;    //登录时尝试建立链接1次netsdk.CLIENT_SetConnectTime(waitTime, tryTimes);// 设置更多网络参数,NET_PARAM的nWaittime,nConnectTryNum成员与CLIENT_SetConnectTime// 接口设置的登录设备超时时间和尝试次数意义相同,可选NetSDKLib.NET_PARAM netParam = new NetSDKLib.NET_PARAM();netParam.nConnectTime = 10000;      // 登录时尝试建立链接的超时时间netParam.nGetConnInfoTime = 3000;   // 设置子连接的超时时间netParam.nGetDevInfoTime = 3000;//获取设备信息超时时间,为0默认1000msnetsdk.CLIENT_SetNetworkParam(netParam);return true;}/*** 登录** @param m_strIp       ip* @param m_nPort       端口号* @param m_strUser     账号* @param m_strPassword 密码* @return 成功则 true*/public static boolean login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword) {//入参NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY pstInParam = new NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY();pstInParam.nPort = m_nPort;pstInParam.szIP = m_strIp.getBytes();pstInParam.szPassword = m_strPassword.getBytes();pstInParam.szUserName = m_strUser.getBytes();//出参NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY pstOutParam = new NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY();pstOutParam.stuDeviceInfo = m_stDeviceInfo;m_hLoginHandle = netsdk.CLIENT_LoginWithHighLevelSecurity(pstInParam, pstOutParam);System.out.println(netsdk.getClass());if (m_hLoginHandle.longValue() == 0) {System.err.printf("登录失败!\n", m_strIp, m_nPort, ToolKits.getErrorCodePrint());} else {System.out.println("登录成功: [ " + m_strIp + " ]");}return m_hLoginHandle.longValue() == 0 ? false : true;}/*** 退出登录*/private static boolean logout() {if (m_hLoginHandle.longValue() == 0) {return false;}boolean bRet = netsdk.CLIENT_Logout(m_hLoginHandle);if (bRet) {m_hLoginHandle.setValue(0);}return bRet;}/*** 释放资源*/public static void cleanup() {if (bLogopen) {netsdk.CLIENT_LogClose();}if (bInit) {netsdk.CLIENT_Cleanup();}}// 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数private static class DisConnect implements NetSDKLib.fDisConnect {public void invoke(NetSDKLib.LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);}}// 网络连接恢复,设备重连成功回调// 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数private static class HaveReConnect implements NetSDKLib.fHaveReConnect {public void invoke(NetSDKLib.LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);}}}

大华SDK二次开发,JAVA相关推荐

  1. 大华摄像头二次开发-web端实现实时视频监控

    最近客户提需要,需要在现有的系统中集成视频监控功能,摄像头是大华的.而大华又没有关于java的sdk,官网只能下载到c++的demo和dll文件.无奈只能自己在网上找了,最后找到了一些解决办法,把实现 ...

  2. Android平台上集成大华SDK(二)

    Android平台上集成大华SDK 以上是我之前写的一篇Android平台上集成大华SDK的文章,其中对于Android平台上集成大华SDK.基于大华SDK进行二次开发基本上进行了详细地介绍. 这篇文 ...

  3. 大华摄像头二次开发总结

    最近半个月在做大华设备的数据流的获取,有点坑呀! 参考提供的手册,我本想回调出视频数据h264,拷贝手册上的代码,可就是获取不成功,咨询了对方人员,才知道怎么回事. 在window下,NETSDK回调 ...

  4. 基于大华SDK的二次开发,用于网络摄像头图像的实时显示和捕获(附源码)

    目录 1. 文章背景 2. 主要模块 2.1 初始化SDK 2.2 登录账号 2.3 捕获图片 2.4 实时显示 2.5 断开时释放 2.6 回调函数 3. 源代码 3.1 头文件 3.2 源文件 1 ...

  5. 大华SDK+JAVA+4g网络摄像头进行二次开发

    前言 监控,相信大家都不陌生.现在的监控技术发展迅速,国内以海康威视为首的智能视频监控提供商也层出不穷.现在,这些提供商都已经提供了相应的SDK以及API接口,能够很好的支撑我们进行摄像机的二次开发工 ...

  6. 大华 sdk java_[日常总结] 大华SDK基于Java的二次开发实现Restful Api

    最近半个月在对接大华摄像头,要实现摄像头的实时预览.云台控制和截图等功能.在网上找了很多资源也没有找到想要的,所以自己写了工具类.简单陈述一下基于大华的官网SDK实现摄像头的云台控制和抓图.无非就是调 ...

  7. java对接大华SDK摄像头监控

    java对接大华SDK摄像头监控 SDK对接 java对接大华SDK摄像头监控 前言 获取SDK 配置环境变量 拉取实时监控数据 补充 前言 小编在接到对接大华摄像头实时监控在网页显示直播视频,先是在 ...

  8. 大华sdk转springboot项目 (刷卡、刷人脸、刷二维码、刷身份证)

    最近公司有个项目需要对接设备扫粤康码! 管理层选择了大华, 拿回来了大华的1台设备给我调试, 因健康码不允许转发 大华那边无法帮我处理, 所以只能申请数字平台后自己对接, 目前我这边的业务流程是: 二 ...

  9. 大华SDK java实现车位和违停事件

    写在前面 gitee地址如下: Gitee仓库传送门 大华SDK分语言和操作系统,不同的SDK实现方式不太一样,需要先根据自己的需求进行SDK的选取.比如,很多线上服务是部署在Linux系统的,所以开 ...

最新文章

  1. ExtJs grid合并单元格
  2. 印象笔记设计经理王怀千:全栈设计师的职业本质
  3. OnClick,OnClientClick和OnServerClick的区别
  4. windows桌面待办事项_有没有一款使用简单的电脑桌面待办事项提醒软件
  5. 信息学奥赛一本通 1016:整型数据类型存储空间大小 | OpenJudge NOI 1.2 01
  6. blender 模型导入unity
  7. VB 二进制数据读写实例
  8. linux刷windows phone,老机焕新生!Lumia 950XL也能跑Win10
  9. matlab7.0官方下载64位win10,window10下MATLAB 7.0下载及安装
  10. PHP 仍然是最流行的服务器端编程语言
  11. 三角函数科学计算机在线应用,Scientific Calculator插件,在线科学计算器
  12. 射影几何----蝴蝶定理的证明
  13. 数学建模·层次分析法基本步骤及参考代码
  14. 如何打赢一场 DevOps 阻击战
  15. 德智体美劳,全面发展的DevOps
  16. [CF1091F](New Year and the Mallard Expedition)
  17. 多级文件系统(操作系统课设)
  18. Android两个项目整合成一个
  19. kindeditor4.x整合SyntaxHighlighter代码高亮
  20. Linux文件关联详解 linux 修改默认文件关联打开程序

热门文章

  1. 快速学习-Saturn创建作业
  2. ArcGIS 一级文件夹下的所有GDB中的所有要素类重命名
  3. 【Java】对象的实例化
  4. 字符斜杠是合法常量吗_C语言中,下列不合法的字符常量是
  5. 盘点WinCE6.0下的小游戏
  6. Java搭建企业级ERP架构学习(一)
  7. 2017年的奋斗目标
  8. centeros7 安装node
  9. 软件测试质量体系管控
  10. oracle solaris 11用u,前言 - 安装 Oracle Solaris 11 系统