EasyCVR平台支持多类型设备、多协议方式接入,包括市场主流标准协议国标GB/T28181、RTMP、RTSP/Onvif协议等,以及厂家私有协议如海康SDK、大华SDK、海康Ehome等。平台可将接入的流媒体进行处理及分发,分发的视频格式包括RTSP、RTMP、FLV、HLS、WebRTC等。
我们在测试时发现,通过大华SDK将设备接入出现异常问题。在设备的后台程序中,显示有1台设备在线,但是使用SDK登录大华设备,在线数为0,与实际在线数量不符。
于是我们针对该情况进行了排查。查看文档得知,CLIENT_QueryDevInfo是指获取设备是否在线情况。
大华SDK的文档说明信息如下:
在实际中使用此函数,输出的NET_OUT_GET_CAMERA_STATEINFO结构体如下,emConnectionState字段值为0,并没有输出设备的在线和离线状态。
文档中说明,emConnectionState为2才是连接状态,所以此函数无法获取到设备的在线离线情况。
从文档中发现,获取设备的在线状态不仅仅只有这一处。CLIENT_QueryNewSystemInfo函数也可获取设备在线、离线状态。
解决方法如下:
在登录设备时,调用CLIENT_QueryNewSystemInfo函数获取设备的在线离线情况,如下:
STATUS.devStatus内存地址为(json数据):