java springboot mqtt控制海康摄像头

GHHKControlService 接口
package org.gh.ghhk.service;

public interface GHHKControlService {

    boolean monitorControl(String payload);

}

GHHKControlServiceImpl  实现类

​
package org.gh.ghhk.service.impl;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.sun.jna.NativeLong;
import lombok.RequiredArgsConstructor;
import org.gh.ghhk.net.HCNetSDK;
import org.gh.ghhk.service.GHHKControlService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

@RequiredArgsConstructor
@Service
public class GHHKControlServiceImpl implements GHHKControlService {

    private static final String MONITORIP = "monitorIp";
    private static final String MONITORCONTROLPORT = "monitorControlPort";
    private static final String MONITORUSERNAME = "monitorUserName";
    private static final String MONITORPASSWORD = "monitorPassWord";
    private static final String DIR = "dir";
    private static final String SPEED = "speed";
    private static final String DATA = "data";
    private static final String ACTIONS = "actions";
    private static final Logger log = LoggerFactory.getLogger(GHHKControlServiceImpl.class);


    @Override
    public boolean monitorControl(String payload) {
        try {
            JSONObject jsonObject = JSONObject.parseObject(payload);
            JSONObject dastaJsonObject = jsonObject.getJSONObject(DATA);
            JSONArray actionsJsonArray = dastaJsonObject.getJSONArray(ACTIONS);

            for (int i = 0; i < actionsJsonArray.size(); i++) {
                JSONObject actionJsonObject = actionsJsonArray.getJSONObject(i);
                String monitorIp = actionJsonObject.getString(MONITORIP);
                Short monitorControlPort = actionJsonObject.getShort(MONITORCONTROLPORT);
                String monitorUserName = actionJsonObject.getString(MONITORUSERNAME);
                String monitorPassword = actionJsonObject.getString(MONITORPASSWORD);
                int dir = actionJsonObject.getInteger(DIR);
                int speed = actionJsonObject.getInteger(SPEED);

                boolean result = this.processMonitorControl(monitorIp, monitorControlPort, monitorUserName, monitorPassword, dir, speed);
                if (!result) {
                    // 如果某个操作失败,可以选择返回false或者继续执行
                    return false;
                }
            }
            return true; // 如果所有操作都成功,返回true
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    public boolean processMonitorControl(String monitorIp, Short monitorControlPort, String monitorUserName, String monitorPassword, Integer dir, int speed) throws InterruptedException {
        int lUserID;// 用户句柄
        int lPreviewHandle;// 预览句柄

        HCNetSDK.NET_DVR_CLIENTINFO m_strClientInfo;// 用户参数

        HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
        log.info("加载完成");

        boolean bool = hCNetSDK.NET_DVR_Init();
        log.info("初始化结果:{}", bool);

        HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();

        lUserID = hCNetSDK.NET_DVR_Login_V30(
                monitorIp,
                monitorControlPort,
                monitorUserName,
                monitorPassword,
                m_strDeviceInfo
        );
        log.info("用户登录句柄:{}", lUserID);

        m_strClientInfo = new HCNetSDK.NET_DVR_CLIENTINFO();
        m_strClientInfo.lChannel = new NativeLong(1);
        lPreviewHandle = hCNetSDK.NET_DVR_RealPlay_V30(lUserID,
                m_strClientInfo, null, null, true);
        log.info("预览句柄:{}", lPreviewHandle);

        boolean isOK = hCNetSDK.NET_DVR_PTZControl(lPreviewHandle, dir, speed);
        log.info("控制结果:{}", isOK);
        Thread.sleep(1000);
        isOK = hCNetSDK.NET_DVR_PTZControl(lPreviewHandle, dir, 1);
        log.info("控制结果:{}", isOK);
        Thread.sleep(1000);
        isOK = hCNetSDK.NET_DVR_Logout(lUserID);
        log.info("控制结果:{}", isOK);
        isOK = hCNetSDK.NET_DVR_Cleanup();
        log.info("控制结果:{}", isOK);
        return true;
    }

}

​

订阅mqtt消息

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

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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值