• java springboot mqtt控制海康摄像头


    GHHKControlService 接口
    1. package org.gh.ghhk.service;
    2. public interface GHHKControlService {
    3. boolean monitorControl(String payload);
    4. }

    GHHKControlServiceImpl  实现类

    1. package org.gh.ghhk.service.impl;
    2. import com.alibaba.fastjson.JSONArray;
    3. import com.alibaba.fastjson.JSONObject;
    4. import com.sun.jna.NativeLong;
    5. import lombok.RequiredArgsConstructor;
    6. import org.gh.ghhk.net.HCNetSDK;
    7. import org.gh.ghhk.service.GHHKControlService;
    8. import org.slf4j.Logger;
    9. import org.slf4j.LoggerFactory;
    10. import org.springframework.stereotype.Service;
    11. @RequiredArgsConstructor
    12. @Service
    13. public class GHHKControlServiceImpl implements GHHKControlService {
    14. private static final String MONITORIP = "monitorIp";
    15. private static final String MONITORCONTROLPORT = "monitorControlPort";
    16. private static final String MONITORUSERNAME = "monitorUserName";
    17. private static final String MONITORPASSWORD = "monitorPassWord";
    18. private static final String DIR = "dir";
    19. private static final String SPEED = "speed";
    20. private static final String DATA = "data";
    21. private static final String ACTIONS = "actions";
    22. private static final Logger log = LoggerFactory.getLogger(GHHKControlServiceImpl.class);
    23. @Override
    24. public boolean monitorControl(String payload) {
    25. try {
    26. JSONObject jsonObject = JSONObject.parseObject(payload);
    27. JSONObject dastaJsonObject = jsonObject.getJSONObject(DATA);
    28. JSONArray actionsJsonArray = dastaJsonObject.getJSONArray(ACTIONS);
    29. for (int i = 0; i < actionsJsonArray.size(); i++) {
    30. JSONObject actionJsonObject = actionsJsonArray.getJSONObject(i);
    31. String monitorIp = actionJsonObject.getString(MONITORIP);
    32. Short monitorControlPort = actionJsonObject.getShort(MONITORCONTROLPORT);
    33. String monitorUserName = actionJsonObject.getString(MONITORUSERNAME);
    34. String monitorPassword = actionJsonObject.getString(MONITORPASSWORD);
    35. int dir = actionJsonObject.getInteger(DIR);
    36. int speed = actionJsonObject.getInteger(SPEED);
    37. boolean result = this.processMonitorControl(monitorIp, monitorControlPort, monitorUserName, monitorPassword, dir, speed);
    38. if (!result) {
    39. // 如果某个操作失败,可以选择返回false或者继续执行
    40. return false;
    41. }
    42. }
    43. return true; // 如果所有操作都成功,返回true
    44. } catch (Exception e) {
    45. e.printStackTrace();
    46. return false;
    47. }
    48. }
    49. public boolean processMonitorControl(String monitorIp, Short monitorControlPort, String monitorUserName, String monitorPassword, Integer dir, int speed) throws InterruptedException {
    50. int lUserID;// 用户句柄
    51. int lPreviewHandle;// 预览句柄
    52. HCNetSDK.NET_DVR_CLIENTINFO m_strClientInfo;// 用户参数
    53. HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
    54. log.info("加载完成");
    55. boolean bool = hCNetSDK.NET_DVR_Init();
    56. log.info("初始化结果:{}", bool);
    57. HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();
    58. lUserID = hCNetSDK.NET_DVR_Login_V30(
    59. monitorIp,
    60. monitorControlPort,
    61. monitorUserName,
    62. monitorPassword,
    63. m_strDeviceInfo
    64. );
    65. log.info("用户登录句柄:{}", lUserID);
    66. m_strClientInfo = new HCNetSDK.NET_DVR_CLIENTINFO();
    67. m_strClientInfo.lChannel = new NativeLong(1);
    68. lPreviewHandle = hCNetSDK.NET_DVR_RealPlay_V30(lUserID,
    69. m_strClientInfo, null, null, true);
    70. log.info("预览句柄:{}", lPreviewHandle);
    71. boolean isOK = hCNetSDK.NET_DVR_PTZControl(lPreviewHandle, dir, speed);
    72. log.info("控制结果:{}", isOK);
    73. Thread.sleep(1000);
    74. isOK = hCNetSDK.NET_DVR_PTZControl(lPreviewHandle, dir, 1);
    75. log.info("控制结果:{}", isOK);
    76. Thread.sleep(1000);
    77. isOK = hCNetSDK.NET_DVR_Logout(lUserID);
    78. log.info("控制结果:{}", isOK);
    79. isOK = hCNetSDK.NET_DVR_Cleanup();
    80. log.info("控制结果:{}", isOK);
    81. return true;
    82. }
    83. }

    订阅mqtt消息

    1. @Override
    2. public void messageArrived(String topic, MqttMessage message) {
    3. String payload = new String(message.getPayload());
    4. ghhkControlService.monitorControl(payload);
    5. log.info("收到消息: {}", payload);
    6. }

    这里注意 控制摄像头一定要释放 登出 要不然摄像头控制几次不受控制了

    1. isOK = hCNetSDK.NET_DVR_PTZControl(lPreviewHandle, dir, 1);
    2. log.info("控制结果:{}", isOK);
    3. Thread.sleep(1000);
    4. isOK = hCNetSDK.NET_DVR_Logout(lUserID);
    5. log.info("控制结果:{}", isOK);
    6. isOK = hCNetSDK.NET_DVR_Cleanup();
    7. log.info("控制结果:{}", isOK);

  • 相关阅读:
    VisionPro学习笔记(3)——BeadInspectTool
    Mybatis-Plus中QueryWrapper的使用
    记录配置打印机遇到的三个问题
    靶机 Raven2 / UDF 提权
    什么是On-die Termination(ODT,片上端接)
    使用 NumPy 来模拟随机游走(Random Walk)
    多线程 _ 基础篇 _ 线程安全问题【JavaEE初阶】
    前端面试题:1.为什么有时连续多次setState只有一次生效?2.http的缓存机制 3.数组扁平化 4.babel和babel-polyfill
    Canny算子详解及例程
    Maven基础学习——tomcat插件配置(含web工程配置)
  • 原文地址:https://blog.csdn.net/hmbbpdx/article/details/141069192