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文件时,一定要在创建镜像的配置加入环境依赖

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐