前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大华NVR通过SDK接入EasyCVR平台如何过滤无效通道?

大华NVR通过SDK接入EasyCVR平台如何过滤无效通道?

原创
作者头像
TSINGSEE青犀视频
修改2021-08-11 18:10:33
9310
修改2021-08-11 18:10:33
举报
文章被收录于专栏:TSINGSEE青犀视频TSINGSEE青犀视频

大家知道EasyCVR是TSINGSEE青犀视频开发的平台中支持协议最多的一款协议融合平台,EasyCVR能够兼容海康、大华的私有SDK,同时也具备GB28181、Ehome协议的级联、语音对讲等特点,我们接触的不少项目中,很多用户都会使用海康或者大华NVR的SDK来接入EasyCVR。

有的用户使用大华NVR接入EasyCVR期间,实际接入通道为10路,nvr可接入通道32路,登录成功后通过接口获取设备的通道信息,其中nChnNum 为nvr通道的接入能力32路。因此如果不添加判断接入的通道是否是有效通道的话,会造成很多无效通道占据通道信息的情况。

原本获取通道信息的代码如下:

代码语言:javascript
复制
		//登录成功,获取通道信息
		int nRetLen = 0;
		NET_DEV_CHN_COUNT_INFO stuChn = { sizeof(NET_DEV_CHN_COUNT_INFO) };
		stuChn.stuVideoIn.dwSize = sizeof(stuChn.stuVideoIn);
		stuChn.stuVideoOut.dwSize = sizeof(stuChn.stuVideoOut);
		if (CLIENT_QueryDevState(ret, DH_DEVSTATE_DEV_CHN_COUNT, (char*)&stuChn, stuChn.dwSize, &nRetLen))
		{
			nChnNum = stuChn.stuVideoIn.nMaxTotal;
		}
		else
		{
			nChnNum = stDevInfo.byChanNum;
		}

我们对此代码进行修改,添加获取远端信息判断通道是否有效的部分,修改后的代码如下:

代码语言:javascript
复制
			int index = 0;
			//*channelSizes = nChnNum;
			char names[DAHUA_CHANNEL_INFO_ARR_MAX_LEN][32] = {};
			CLIENT_QueryChannelName(ret, names[0], 32 * DH_DEVSTATE_DEV_CHN_COUNT, &nChnNum);
			//通道信息
			if (lpChannels != NULL){
				for (int i = 0; i < stDevInfo.byChanNum; i++){
					if (i < DAHUA_CHANNEL_INFO_ARR_MAX_LEN){
						//获取码流
						const int channum = 1;
						DWORD dwBitRate[channum] = { 0 };
						int retlen = 0;
						BOOL bRet = CLIENT_QueryRemotDevState(ret, DH_DEVSTATE_BITRATE, i, (char *)dwBitRate, channum*sizeof(DWORD), &retlen);
						if (!bRet || retlen != channum*sizeof(DWORD)){
							printf("[DAHUA SDK S] \r\n");
							printf("[%s] DH_DEVSTATE_BITRATE bRet=%d,retlen=%d,chnNum=%d,sizeof()=%d \r\n", ip, bRet, retlen, nChnNum, sizeof(DHDEV_CHANNEL_CFG));
							printf("[DAHUA SDK E] \r\n");
						}
						else{
							printf("[DAHUA SDK S] \r\n");
							printf("[%s] DH_DEV_CHANNELCFG dwBitRate=%d \r\n", ip, dwBitRate);
							printf("[DAHUA SDK E] \r\n");
							//strncpy(lpChannels->arr[i].name, names[i], 32);
							memcpy(lpChannels->arr[index].name, names[i], 32);
							lpChannels->arr[index].channelNum = i;
							lpChannels->arr[index].online = 1;
							index++;
						}
					}
					else{
						break;
					}
				}
			}
			*channelSizes = index;

此时当大华NVR接入EasyCVR后就可自动对无效通道进行筛选并剔除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档