最近半个月在对接大华摄像头,要实现摄像头的实时预览、云台控制和截图等功能。在网上找了很多资源也没有找到想要的,所以自己写了工具类。简单陈述一下基于大华的官网SDK实现摄像头的云台控制和抓图。无非就是调用SDK提供的一些函数来实现。
1. 首先先看看大华给的开发流程
image.png
开发可以顺着这个流程图的步骤,就会变得简单明了,开发其他功能也一样,下面是我封装好的工具类。至于一些引用类都是在大华官网的SDK里面。
云台控制
/**
* @author : colors
* @date : 11:04 2020/12/3
* 云台控制工具类
*/
public class PTZControlUtil {
// 初始化sdk
public 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 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, int lParam1, int lParam2) {
// 初始化
LoginModule.init(disConnect, haveReConnect);
// 若未登录,先登录。
if (m_hLoginHandle.longValue() == 0) {
login(m_strIp, m_nPort, m_strUser, m_strPassword);
}
// 开始向上移动,若超过角度则会变为左右移动
if (m_hLoginHandle.longValue() != 0) {
System.out.println("开始向上移动..., 当前速度为:" + lParam2);
startUpControl(nChannelID, lParam1, lParam2);
}
System.out.println("操作完成");
// 停止移动
stopUpControl(nChannelID);
// 退出
logout();
System.out.println("退出登录...");
// 释放资源
LoginModule.cleanup();
}
// 向上
private static void startUpControl(int nChannelID, int lParam1, int lParam2) {
if (m_hLoginHandle.longValue() != 0) {
netsdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
NetSDKLib.NET_PT