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

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

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

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

		//登录成功,获取通道信息
		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;
		}

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

			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后就可自动对无效通道进行筛选并剔除。

posted on 2021-08-09 16:23  EasyCVR视频融合平台  阅读(304)  评论(0)    收藏  举报