java对接大华SDK摄像头监控

java对接大华SDK摄像头监控


前言

小编在接到对接大华摄像头实时监控在网页显示直播视频,先是在网上寻找了一番,发现对接大华的博文少之又少,而且大多都是收费的。没办法只能硬着头皮上,功夫不负有心人,终于搞定这该死的监控了...

获取SDK

我相信看到这篇文章的小伙伴都已经拥有了SDK,ps:官网也可以下载,一般调用SDK都是分为Windows和Linux的,但是我们开发项目基本上都是要上线的,所以此处我基于linux的配置来讲

官网提供的类:

IDpsdkCore类为加载动态链接库,Windows加载的是.dll Linux加载的是.so

windows:
在这里插入图片描述
在这里插入图片描述

linux:
在这里插入图片描述
在这里插入图片描述

配置环境变量

Windows版本的sdk是不需要配置环境变量的,但我们程序部署于linux时是需要配置环境变量的,配置如下:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:(libDPSDK_Java.so所在目录绝对路径):(linuxjava中的lib目录绝对路径)   
export CLASSPATH=$CLASSPATH:(demo/src目录所在的绝对路径):(当前目录相对路径)  
例如:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/linuxjava/:/root/linuxjava/lib
export CLASSPATH=$CLASSPATH:/home/linuxjava/demo/src/:./

拉取实时监控数据

大华SDK提供了很多的监控功能,例如回放、报警、实时直播,此处以直播为例:

/*
	 * 创建DPSDK
	 * */
	public void OnCreate()
	{
		int nRet = -1;
		Return_Value_Info_t res = new Return_Value_Info_t();
		nRet =IDpsdkCore.DPSDK_Create(dpsdk_sdk_type_e.DPSDK_CORE_SDK_SERVER,res);
		
		m_nDLLHandle = res.nReturnValue;
		String dpsdklog = "D:\\dpsdkjavalog";
		nRet = IDpsdkCore.DPSDK_SetLog(m_nDLLHandle, dpsdklog.getBytes());
		String dumpfile = "D:\\dpsdkjavadump";
		nRet = IDpsdkCore.DPSDK_StartMonitor(m_nDLLHandle, dumpfile.getBytes());
		if(m_nDLLHandle > 0)
		{
			//设置设备状态上报监听函数
			nRet = IDpsdkCore.DPSDK_SetDPSDKDeviceStatusCallback(m_nDLLHandle, fDeviceStatus);
			//设置NVR通道状态上报监听函数
			nRet =IDpsdkCore.DPSDK_SetDPSDKNVRChnlStatusCallback(m_nDLLHandle, fNVRChnlStatus);
			//设置通用JSON回调
			nRet = IDpsdkCore.DPSDK_SetGeneralJsonTransportCallback(m_nDLLHandle, fGeneralJson);
			
			nRet = IDpsdkCore.DPSDK_SetDPSDKGetBayCarInfoCallbackEx(m_nDLLHandle, fBayCarInfo);
			
			nRet = IDpsdkCore.DPSDK_SetDPSDKTrafficAlarmCallback(m_nDLLHandle, fTrafficAlarmCallback);
			
			nRet = IDpsdkCore.DPSDK_SetDPSDKGetAreaSpeedDetectCallback(m_nDLLHandle, fGetAreaSpeedDetectCallback);
		}
		
		System.out.print("创建DPSDK, 返回 m_nDLLHandle = ");
		System.out.println(m_nDLLHandle);
	}
	/*
	 * 登录
	 * */
	public void OnLogin()
	{
		Login_Info_t loginInfo = new Login_Info_t();
		loginInfo.szIp = m_strIp.getBytes();
		loginInfo.nPort = m_nPort;
		loginInfo.szUsername = m_strUser.getBytes();
		loginInfo.szPassword = m_strPassword.getBytes();
		loginInfo.nProtocol = dpsdk_protocol_version_e.DPSDK_PROTOCOL_VERSION_II;
		loginInfo.iType = 1;

		int nRet = IDpsdkCore.DPSDK_Login(m_nDLLHandle,loginInfo,10000);
		if(nRet == dpsdk_retval_e.DPSDK_RET_SUCCESS)
		{
			System.out.printf("登录成功,nRet = %d", nRet);
		}else
		{
			System.out.printf("登录失败,nRet = %d", nRet);
		}
		System.out.println();
	}
	
	/*
	 * 加载所有组织树
	 * */
	public void LoadAllGroup()
	{
		int nRet = IDpsdkCore.DPSDK_LoadDGroupInfo(m_nDLLHandle, nGroupLen, 180000 );
		
		if(nRet == dpsdk_retval_e.DPSDK_RET_SUCCESS)
		{
			System.out.printf("加载所有组织树成功,nRet = %d, nDepCount = %d", nRet, nGroupLen.nReturnValue);
		}else
		{
			System.out.printf("加载所有组织树失败,nRet = %d", nRet);
		}
		System.out.println();
	}
	
	/*
	 * 获取所有组织树串
	 * */
	public void GetGroupStr()
	{
		byte[] szGroupBuf = new byte[nGroupLen.nReturnValue];
		int nRet = IDpsdkCore.DPSDK_GetDGroupStr(m_nDLLHandle, szGroupBuf, nGroupLen.nReturnValue, 10000);
		
		if(nRet == dpsdk_retval_e.DPSDK_RET_SUCCESS)
		{
			String GroupBuf = "";
			try {
				GroupBuf = new String(szGroupBuf, "UTF-8");
			} catch (IOException e) {  
            e.printStackTrace();  
			} 
			System.out.printf("获取所有组织树串成功,nRet = %d, szGroupBuf = [%s]", nRet, GroupBuf);
			try {
				File file = new File("D:\\text.xml");
				if(!file.exists())
				{
					file.createNewFile();	
				}
				
				FileOutputStream  out = new FileOutputStream(file);
				out.write(szGroupBuf);
				out.close();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}else
		{
			System.out.printf("获取所有组织树串失败,nRet = %d", nRet);
		}
		System.out.println();
	}
		/*
	 * 登出
	 * */
	public void OnLogout()
	{
		int nRet = IDpsdkCore.DPSDK_Logout(m_nDLLHandle, 10000);
		if(nRet == dpsdk_retval_e.DPSDK_RET_SUCCESS)
		{
			System.out.printf("登出成功,nRet = %d", nRet);
		}else
		{
			System.out.printf("登出失败,nRet = %d", nRet);
		}
		System.out.println();
	}
	
	/*
	 * 释放内存
	 * */
	public void OnDestroy()
	{
		int nRet = IDpsdkCore.DPSDK_Destroy(m_nDLLHandle);
		if(nRet == dpsdk_retval_e.DPSDK_RET_SUCCESS)
		{
			System.out.printf("释放内存成功,nRet = %d", nRet);
		}else
		{
			System.out.printf("释放内存失败,nRet = %d", nRet);
		}
		System.out.println();
	}

补充

1.一定要记得释放内存
2.获取的数据是XML格式,可以自己通过工具类解析
3.友情提示:如果是使用docker部署的话,镜像依赖宿主机的xml文件时,一定要在创建镜像的配置加入环境依赖

  • 16
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 73
    评论
以下是一个使用Java对接大华SDK视频监控实时播放和回放的示例代码: 1. 导入大华SDK的jar包 在项目中导入大华SDK的jar包,可以在官网下载SDK并按照文档进行安装。 2. 初始化SDK 在程序入口处初始化SDK,代码如下: ```java HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; boolean initSuc = hCNetSDK.NET_DVR_Init(); if (!initSuc) { System.out.println("SDK初始化失败"); return; } ``` 3. 登录设备 使用SDK提供的登录方法登录设备,代码如下: ```java HCNetSDK.NET_DVR_DEVICEINFO_V30 deviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30(); int lUserID = hCNetSDK.NET_DVR_Login_V30("设备IP地址", 端口号, "用户名", "密码", deviceInfo); if (lUserID < 0) { System.out.println("设备登录失败"); return; } ``` 4. 实时预览视频 使用SDK提供的预览方法进行实时预览,代码如下: ```java NativeLong lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(lUserID, previewInfo, null); if (lRealHandle.longValue() < 0) { System.out.println("预览失败"); return; } ``` 其中,previewInfo是一个NET_DVR_PREVIEWINFO结构体,可以通过以下代码进行初始化: ```java HCNetSDK.NET_DVR_PREVIEWINFO previewInfo = new HCNetSDK.NET_DVR_PREVIEWINFO(); previewInfo.lChannel = 1; // 预览的通道号 previewInfo.dwStreamType = 1; // 码流类型,1-主码流,2-子码流 previewInfo.bBlocked = true; // 是否阻塞取流 ``` 5. 停止预览 使用SDK提供的停止预览方法停止实时预览,代码如下: ```java hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); ``` 6. 回放视频 使用SDK提供的回放方法进行视频回放,代码如下: ```java NativeLong lPlayHandle = hCNetSDK.NET_DVR_PlayBackByTime_V40(lUserID, playbackInfo, null); if (lPlayHandle.longValue() < 0) { System.out.println("回放失败"); return; } ``` 其中,playbackInfo是一个NET_DVR_PLAYCOND结构体,可以通过以下代码进行初始化: ```java HCNetSDK.NET_DVR_TIME startTime = new HCNetSDK.NET_DVR_TIME(); startTime.dwYear = 2022; startTime.dwMonth = 2; startTime.dwDay = 1; startTime.dwHour = 0; startTime.dwMinute = 0; startTime.dwSecond = 0; HCNetSDK.NET_DVR_TIME endTime = new HCNetSDK.NET_DVR_TIME(); endTime.dwYear = 2022; endTime.dwMonth = 2; endTime.dwDay = 1; endTime.dwHour = 23; endTime.dwMinute = 59; endTime.dwSecond = 59; HCNetSDK.NET_DVR_PLAYCOND playbackInfo = new HCNetSDK.NET_DVR_PLAYCOND(); playbackInfo.struStartTime = startTime; playbackInfo.struStopTime = endTime; playbackInfo.byDrawFrame = 1; playbackInfo.byStreamType = 0; ``` 7. 停止回放 使用SDK提供的停止回放方法停止视频回放,代码如下: ```java hCNetSDK.NET_DVR_StopPlayBack(lPlayHandle); ``` 以上是一个简单的使用Java对接大华SDK视频监控实时播放和回放的示例,具体实现还需要根据自己的需求进行改进。
评论 73
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值