• 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);

  • 相关阅读:
    数字孪生与智慧城市:开启未来智慧生活
    系统性能分析工具
    phtread_cancel函数用于取消线程,但不是实时的
    常用负载均衡详解(图文总结)
    《开源大模型食用指南》全网发布,轻松助你速通LLM大语言模型!
    规则解读(一)| 本地资源检测 For Unreal
    第三章变量
    winform绘制圆形控件抗锯齿
    微服务·数据一致-事务与分布式事务
    IOS(刘海/留海/流海)屏幕判断
  • 原文地址:https://blog.csdn.net/hmbbpdx/article/details/141069192